// 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
};
