// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

[DartPackage="mojo_services"]
module mojo;

import "mojo/public/interfaces/network/network_error.mojom";

interface WebSocket {
  enum MessageType {
    CONTINUATION,
    TEXT,
    BINARY
  };
  const uint16 kAbnormalCloseCode = 1006;  // stolen from websocket_bridge

  // Initiates a WebSocket connection to the given url. |send_stream| is a data
  // pipe which should remain open for the lifetime of the WebSocket. Data
  // to send over the WebSocket should be written to the producer end of the
  // |send_stream|.
  Connect(string url,
          array<string> protocols,
          string origin,
          handle<data_pipe_consumer> send_stream,
          WebSocketClient client);

  // Called after writing |num_bytes| worth of data to the WebSocket's
  // |send_stream|.
  Send(bool fin, MessageType type, uint32 num_bytes);

  FlowControl(int64 quota);

  Close(uint16 code, string reason);
};

interface WebSocketClient {
  // Called in response to a WebSocket.Connect call to indicate success
  // |receive_stream| is a data pipe which where incoming data from
  // the server is written.
  DidConnect(string selected_subprotocol,
             string extensions,
             handle<data_pipe_consumer> receive_stream);

  // Called when there is |num_bytes| worth of incoming data available on the
  // |receive_stream|.
  DidReceiveData(bool fin, WebSocket.MessageType type, uint32 num_bytes);

  DidReceiveFlowControl(int64 quota);

  DidFail(string message);

  DidClose(bool was_clean, uint16 code, string reason);

  // Blink has 3 extra methods that we don't implement, because they are used
  // for the inspector:
  // didStartOpeningHandshake
  // didFinishOpeningHandshake
  // didStartClosingHandshake
};
