|  | // Copyright 2014 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | // Use the <code>chrome.sockets.tcp</code> API to send and receive data over the | 
|  | // network using TCP connections. This API supersedes the TCP functionality | 
|  | // previously found in the <code>chrome.socket</code> API. | 
|  | namespace sockets.tcp { | 
|  | // The socket properties specified in the <code>create</code> or | 
|  | // <code>update</code> function. Each property is optional. If a property | 
|  | // value is not specified, a default value is used when calling | 
|  | // <code>create</code>, or the existing value if preserved when calling | 
|  | // <code>update</code>. | 
|  | dictionary SocketProperties { | 
|  | // Flag indicating if the socket is left open when the event page of | 
|  | // the application is unloaded (see | 
|  | // <a href="http://developer.chrome.com/apps/app_lifecycle.html">Manage App | 
|  | // Lifecycle</a>). The default value is "false." When the application is | 
|  | // loaded, any sockets previously opened with persistent=true can be fetched | 
|  | // with <code>getSockets</code>. | 
|  | boolean? persistent; | 
|  |  | 
|  | // An application-defined string associated with the socket. | 
|  | DOMString? name; | 
|  |  | 
|  | // The size of the buffer used to receive data. The default value is 4096. | 
|  | long? bufferSize; | 
|  | }; | 
|  |  | 
|  | // Result of <code>create</code> call. | 
|  | dictionary CreateInfo { | 
|  | // The ID of the newly created socket. Note that socket IDs created from | 
|  | // this API are not compatible with socket IDs created from other APIs, such | 
|  | // as the deprecated <code>$(ref:socket)</code> API. | 
|  | long socketId; | 
|  | }; | 
|  |  | 
|  | // Callback from the <code>create</code> method. | 
|  | // |createInfo| : The result of the socket creation. | 
|  | callback CreateCallback = void (CreateInfo createInfo); | 
|  |  | 
|  | // DNS resolution preferences. The default is <code>any</code> and uses the | 
|  | // current OS config which may return IPv4 or IPv6. <code>ipv4</code> forces | 
|  | // IPv4, and <code>ipv6</code> forces IPv6. | 
|  | enum DnsQueryType { any, ipv4, ipv6 }; | 
|  |  | 
|  | // Callback from the <code>connect</code> method. | 
|  | // |result| : The result code returned from the underlying network call. | 
|  | // A negative value indicates an error. | 
|  | callback ConnectCallback = void (long result); | 
|  |  | 
|  | // Callback from the <code>disconnect</code> method. | 
|  | callback DisconnectCallback = void (); | 
|  |  | 
|  | // Result of the <code>send</code> method. | 
|  | dictionary SendInfo { | 
|  | // The result code returned from the underlying network call. | 
|  | // A negative value indicates an error. | 
|  | long resultCode; | 
|  |  | 
|  | // The number of bytes sent (if result == 0) | 
|  | long? bytesSent; | 
|  | }; | 
|  |  | 
|  | // Callback from the <code>send</code> method. | 
|  | // |sendInfo| : Result of the <code>send</code> method. | 
|  | callback SendCallback = void (SendInfo sendInfo); | 
|  |  | 
|  | // Callback from the <code>close</code> method. | 
|  | callback CloseCallback = void (); | 
|  |  | 
|  | // Callback from the <code>update</code> method. | 
|  | callback UpdateCallback = void (); | 
|  |  | 
|  | // Callback from the <code>setPaused</code> method. | 
|  | callback SetPausedCallback = void (); | 
|  |  | 
|  | // Callback from the <code>setKeepAliveCallback</code> method. | 
|  | // |result| : The result code returned from the underlying network call. | 
|  | // A negative value indicates an error. | 
|  | callback SetKeepAliveCallback = void (long result); | 
|  |  | 
|  | // Callback from the <code>setNodeDelay</code> method. | 
|  | // |result| : The result code returned from the underlying network call. | 
|  | // A negative value indicates an error. | 
|  | callback SetNoDelayCallback = void (long result); | 
|  |  | 
|  | dictionary TLSVersionConstraints { | 
|  | // The minimum and maximum acceptable versions of TLS. Supported values are | 
|  | // <code>tls1.2</code> or <code>tls1.3</code>. | 
|  | // | 
|  | // The values <code>tls1</code> and <code>tls1.1</code> are no longer | 
|  | // supported. If |min| is set to one of these values, it will be silently | 
|  | // clamped to <code>tls1.2</code>. If |max| is set to one of those values, | 
|  | // or any other unrecognized value, it will be silently ignored. | 
|  | DOMString? min; | 
|  | DOMString? max; | 
|  | }; | 
|  |  | 
|  | dictionary SecureOptions { | 
|  | TLSVersionConstraints? tlsVersion; | 
|  | }; | 
|  |  | 
|  | callback SecureCallback = void (long result); | 
|  |  | 
|  | // Result of the <code>getInfo</code> method. | 
|  | dictionary SocketInfo { | 
|  | // The socket identifier. | 
|  | long socketId; | 
|  |  | 
|  | // Flag indicating whether the socket is left open when the application is | 
|  | // suspended (see <code>SocketProperties.persistent</code>). | 
|  | boolean persistent; | 
|  |  | 
|  | // Application-defined string associated with the socket. | 
|  | DOMString? name; | 
|  |  | 
|  | // The size of the buffer used to receive data. If no buffer size has been | 
|  | // specified explictly, the value is not provided. | 
|  | long? bufferSize; | 
|  |  | 
|  | // Flag indicating whether a connected socket blocks its peer from sending | 
|  | // more data (see <code>setPaused</code>). | 
|  | boolean paused; | 
|  |  | 
|  | // Flag indicating whether the socket is connected to a remote peer. | 
|  | boolean connected; | 
|  |  | 
|  | // If the underlying socket is connected, contains its local IPv4/6 address. | 
|  | DOMString? localAddress; | 
|  |  | 
|  | // If the underlying socket is connected, contains its local port. | 
|  | long? localPort; | 
|  |  | 
|  | // If the underlying socket is connected, contains the peer/ IPv4/6 address. | 
|  | DOMString? peerAddress; | 
|  |  | 
|  | // If the underlying socket is connected, contains the peer port. | 
|  | long? peerPort; | 
|  | }; | 
|  |  | 
|  | // Callback from the <code>getInfo</code> method. | 
|  | // |socketInfo| : Object containing the socket information. | 
|  | callback GetInfoCallback = void (SocketInfo socketInfo); | 
|  |  | 
|  | // Callback from the <code>getSockets</code> method. | 
|  | // |socketInfos| : Array of object containing socket information. | 
|  | callback GetSocketsCallback = void (SocketInfo[] socketInfos); | 
|  |  | 
|  | // Data from an <code>onReceive</code> event. | 
|  | dictionary ReceiveInfo { | 
|  | // The socket identifier. | 
|  | long socketId; | 
|  |  | 
|  | // The data received, with a maxium size of <code>bufferSize</code>. | 
|  | ArrayBuffer data; | 
|  | }; | 
|  |  | 
|  | // Data from an <code>onReceiveError</code> event. | 
|  | dictionary ReceiveErrorInfo { | 
|  | // The socket identifier. | 
|  | long socketId; | 
|  |  | 
|  | // The result code returned from the underlying network call. | 
|  | long resultCode; | 
|  | }; | 
|  |  | 
|  | interface Functions { | 
|  | // Creates a TCP socket. | 
|  | // |properties| : The socket properties (optional). | 
|  | // |callback| : Called when the socket has been created. | 
|  | static void create(optional SocketProperties properties, | 
|  | CreateCallback callback); | 
|  |  | 
|  | // Updates the socket properties. | 
|  | // |socketId| : The socket identifier. | 
|  | // |properties| : The properties to update. | 
|  | // |callback| : Called when the properties are updated. | 
|  | static void update(long socketId, | 
|  | SocketProperties properties, | 
|  | optional UpdateCallback callback); | 
|  |  | 
|  | // Enables or disables the application from receiving messages from its | 
|  | // peer. The default value is "false". Pausing a socket is typically used | 
|  | // by an application to throttle data sent by its peer. When a socket is | 
|  | // paused, no <code>onReceive</code> event is raised. When a socket is | 
|  | // connected and un-paused, <code>onReceive</code> events are raised again | 
|  | // when messages are received. | 
|  | static void setPaused(long socketId, | 
|  | boolean paused, | 
|  | optional SetPausedCallback callback); | 
|  |  | 
|  | // Enables or disables the keep-alive functionality for a TCP connection. | 
|  | // |socketId| : The socket identifier. | 
|  | // |enable| : If true, enable keep-alive functionality. | 
|  | // |delay| : Set the delay seconds between the last data packet received | 
|  | // and the first keepalive probe. Default is 0. | 
|  | // |callback| : Called when the setKeepAlive attempt is complete. | 
|  | [doesNotSupportPromises= | 
|  | "Sets error along with callback arguments crbug.com/1504372"] | 
|  | static void setKeepAlive(long socketId, | 
|  | boolean enable, | 
|  | optional long delay, | 
|  | SetKeepAliveCallback callback); | 
|  |  | 
|  | // Sets or clears <code>TCP_NODELAY</code> for a TCP connection. Nagle's | 
|  | // algorithm will be disabled when <code>TCP_NODELAY</code> is set. | 
|  | // |socketId| : The socket identifier. | 
|  | // |noDelay| : If true, disables Nagle's algorithm. | 
|  | // |callback| : Called when the setNoDelay attempt is complete. | 
|  | [doesNotSupportPromises= | 
|  | "Sets error along with callback arguments crbug.com/1504372"] | 
|  | static void setNoDelay(long socketId, | 
|  | boolean noDelay, | 
|  | SetNoDelayCallback callback); | 
|  |  | 
|  | // Connects the socket to a remote machine. When the <code>connect</code> | 
|  | // operation completes successfully, <code>onReceive</code> events are | 
|  | // raised when data is received from the peer. If a network error occurs | 
|  | // while the runtime is receiving packets, a <code>onReceiveError</code> | 
|  | // event is raised, at which point no more <code>onReceive</code> event will | 
|  | // be raised for this socket until the <code>resume</code> method is called. | 
|  | // |socketId| : The socket identifier. | 
|  | // |peerAddress| : The address of the remote machine. DNS name, IPv4 and | 
|  | //  IPv6 formats are supported. | 
|  | // |peerPort| : The port of the remote machine. | 
|  | // |dnsQueryType| : The address resolution preference. | 
|  | // |callback| : Called when the connect attempt is complete. | 
|  | [doesNotSupportPromises= | 
|  | "Sets error along with callback arguments crbug.com/1504372"] | 
|  | static void connect(long socketId, | 
|  | DOMString peerAddress, | 
|  | long peerPort, | 
|  | optional DnsQueryType dnsQueryType, | 
|  | ConnectCallback callback); | 
|  |  | 
|  | // Disconnects the socket. | 
|  | // |socketId| : The socket identifier. | 
|  | // |callback| : Called when the disconnect attempt is complete. | 
|  | static void disconnect(long socketId, | 
|  | optional DisconnectCallback callback); | 
|  |  | 
|  | // Start a TLS client connection over the connected TCP client socket. | 
|  | // |socketId| : The existing, connected socket to use. | 
|  | // |options| : Constraints and parameters for the TLS connection. | 
|  | // |callback| : Called when the connection attempt is complete. | 
|  | [doesNotSupportPromises= | 
|  | "Sets error along with callback arguments crbug.com/1504372"] | 
|  | static void secure(long socketId, | 
|  | optional SecureOptions options, | 
|  | SecureCallback callback); | 
|  |  | 
|  | // Sends data on the given TCP socket. | 
|  | // |socketId| : The socket identifier. | 
|  | // |data| : The data to send. | 
|  | // |callback| : Called when the <code>send</code> operation completes. | 
|  | [doesNotSupportPromises= | 
|  | "Sets error along with callback arguments crbug.com/1504372"] | 
|  | static void send(long socketId, | 
|  | ArrayBuffer data, | 
|  | SendCallback callback); | 
|  |  | 
|  | // Closes the socket and releases the address/port the socket is bound to. | 
|  | // Each socket created should be closed after use. The socket id is no | 
|  | // no longer valid as soon at the function is called. However, the socket is | 
|  | // guaranteed to be closed only when the callback is invoked. | 
|  | // |socketId| : The socket identifier. | 
|  | // |callback| : Called when the <code>close</code> operation completes. | 
|  | static void close(long socketId, | 
|  | optional CloseCallback callback); | 
|  |  | 
|  | // Retrieves the state of the given socket. | 
|  | // |socketId| : The socket identifier. | 
|  | // |callback| : Called when the socket state is available. | 
|  | static void getInfo(long socketId, | 
|  | GetInfoCallback callback); | 
|  |  | 
|  | // Retrieves the list of currently opened sockets owned by the application. | 
|  | // |callback| : Called when the list of sockets is available. | 
|  | static void getSockets(GetSocketsCallback callback); | 
|  | }; | 
|  |  | 
|  | interface Events { | 
|  | // Event raised when data has been received for a given socket. | 
|  | // |info| : The event data. | 
|  | static void onReceive(ReceiveInfo info); | 
|  |  | 
|  | // Event raised when a network error occured while the runtime was waiting | 
|  | // for data on the socket address and port. Once this event is raised, the | 
|  | // socket is set to <code>paused</code> and no more <code>onReceive</code> | 
|  | // events are raised for this socket. | 
|  | // |info| : The event data. | 
|  | static void onReceiveError(ReceiveErrorInfo info); | 
|  | }; | 
|  | }; |