Updating trunk VERSION from 2139.0 to 2140.0
[chromium-blink-merge.git] / extensions / common / api / cast_channel.idl
blob3d2f7d827dda5d773fbff57a70df97b9c87e1473
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // API for communicating with a Google Cast device over an authenticated
6 // channel.
7 namespace cast.channel {
9 // The state of the channel.
10 enum ReadyState {
11 // The channel is connecting.
12 connecting,
13 // The channel is open and available for messaging.
14 open,
15 // The channel is closing.
16 closing,
17 // The channel is closed.
18 closed
21 // Error conditions that the channel may encounter. All error conditions
22 // are terminal. When an error condition is encountered the API will:
23 // (1) Transition the channel to readyState == 'closed'.
24 // (2) Set ChannelInfo.lastError to the error condition.
25 // (3) Fire an onError event with the error condition.
26 // (4) Fire an onClose event.
27 enum ChannelError {
28 // cast.channel.send() was called when ChannelInfo.readyState != 'open'.
29 channel_not_open,
30 // Authentication was requested and the receiver could not be
31 // authenticated (invalid signature, invalid handhake, TLS error, etc.)
32 authentication_error,
33 // A new channel could not be created for reasons unrelated to
34 // authentication (e.g., there is already an open channel to the same URL).
35 connect_error,
36 // There was an error writing or reading from the underlying socket.
37 socket_error,
38 // A transport level occurred (like an unparseable message).
39 transport_error,
40 // The client attempted to send an unsupported message type through the
41 // channel.
42 invalid_message,
43 // An invalid channel id was passed.
44 invalid_channel_id,
45 // The connection could not be established before timing out.
46 connect_timeout,
47 // Unspecified error.
48 unknown
51 // Authentication methods that may be required to connect to a Cast receiver.
52 enum ChannelAuthType {
53 // SSL over TCP.
54 ssl,
55 // SSL over TCP with challenge and receiver signature verification.
56 ssl_verified
59 // Describes the information needed to connect to a Cast receiver.
60 // This replaces the prior use of cast:// and casts:// URLs.
61 dictionary ConnectInfo {
62 // The IPV4 address of the Cast receiver, e.g. '198.1.0.2'.
63 // TODO(mfoltz): Investigate whether IPV6 addresses "just work."
64 DOMString ipAddress;
66 // The port number to connect to, 0-65535.
67 long port;
69 // The amount of time to wait in milliseconds before stopping the
70 // connection process. Timeouts are disabled if the value is zero.
71 // The default timeout is 8000ms.
72 long? timeout;
74 // The authentication method required for the channel.
75 ChannelAuthType auth;
78 // Describes the state of a channel to a Cast receiver.
79 dictionary ChannelInfo {
80 // Id for the channel.
81 long channelId;
83 // DEPRECATED: The URL to the receiver. This field will be removed in a
84 // future release.
85 DOMString url;
87 // Connection information that was used to establish the channel to the
88 // receiver.
89 ConnectInfo connectInfo;
91 // The current state of the channel.
92 ReadyState readyState;
94 // If set, the last error condition encountered by the channel.
95 ChannelError? errorState;
98 // Describes a message sent or received over the channel. Currently only
99 // string messages are supported, although ArrayBuffer and Blob types may be
100 // supported in the future.
101 dictionary MessageInfo {
102 // The message namespace. A namespace is a URN of the form
103 // urn:cast-x:<namespace> that is used to interpret and route Cast messages.
104 DOMString namespace_;
106 // source and destination ids identify the origin and destination of the
107 // message. They are used to route messages between endpoints that share a
108 // device-to-device channel.
110 // For messages between applications:
111 // - The sender application id is a unique identifier generated on behalf
112 // of the sender application.
113 // - The receiver id is always the the session id for the application.
115 // For messages to or from the sender or receiver platform, the special ids
116 // 'sender-0' and 'receiver-0' can be used.
118 // For messages intended for all endpoints using a given channel, the
119 // wildcard destination_id '*' can be used.
120 DOMString sourceId;
121 DOMString destinationId;
123 // The content of the message. Must be either a string or an ArrayBuffer.
124 any data;
127 // Describes a terminal error encountered by the channel with details of the
128 // error that caused the channel to be closed. One or more of the optional
129 // fields may be set with specific error codes from the underlying
130 // implementation.
131 dictionary ErrorInfo {
132 // The type of error encountered by the channel.
133 ChannelError errorState;
135 // The event that was occurring when the error happened. Values are defined
136 // in the enum EventType in logging.proto.
137 long? eventType;
139 // An error encountered when processing the authentication handshake.
140 // Values are defined in the enum ChallengeReplyErrorType in logging.proto.
141 long? challengeReplyErrorType;
143 // A return value from the underlying net:: socket libraries. Values are
144 // defined in net/base/net_error_list.h.
145 long? netReturnValue;
147 // An error code returned by NSS. Values are defined in secerr.h.
148 long? nssErrorCode;
151 // Callback holding the result of a channel operation.
152 callback ChannelInfoCallback = void (ChannelInfo result);
154 // Callback from <code>getLogs</code> method.
155 // |log|: compressed serialized raw bytes containing the logs.
156 // The log is formatted using protocol buffer.
157 // See extensions/browser/api/cast_channel/logging.proto for definition.
158 // Compression is in gzip format.
159 callback GetLogsCallback = void (ArrayBuffer log);
161 interface Functions {
162 // Opens a new channel to the Cast receiver specified by connectInfo. Only
163 // one channel may be connected to same receiver from the same extension at
164 // a time. If the open request is successful, the callback will be invoked
165 // with a ChannelInfo with readyState == 'connecting'. If unsuccessful, the
166 // callback will be invoked with a ChannelInfo with channel.readyState ==
167 // 'closed', channel.errorState will be set to the error condition, and
168 // onError will be fired with error details.
170 // TODO(mfoltz): Convert 'any' to ConnectInfo once all clients are updated
171 // to not send URLs.
172 static void open(any connectInfo,
173 ChannelInfoCallback callback);
175 // Sends a message on the channel and invokes callback with the resulting
176 // channel status. The channel must be in readyState == 'open'. If
177 // unsuccessful, channel.readyState will be set to 'closed',
178 // channel.errorState will be set to the error condition, and onError will
179 // be fired with error details.
180 static void send(ChannelInfo channel,
181 MessageInfo message,
182 ChannelInfoCallback callback);
184 // Requests that the channel be closed and invokes callback with the
185 // resulting channel status. The channel must be in readyState == 'open' or
186 // 'connecting'. If successful, onClose will be fired with readyState ==
187 // 'closed'. If unsuccessful, channel.readyState will be set to 'closed',
188 // and channel.errorState will be set to the error condition.
189 static void close(ChannelInfo channel,
190 ChannelInfoCallback callback);
192 // Get logs in compressed serialized format. See GetLogsCallback for
193 // details.
194 // |callback|: If successful, |callback| is invoked with data. Otherwise,
195 // an error will be raised.
196 static void getLogs(GetLogsCallback callback);
199 // Events on the channel.
200 interface Events {
201 // Fired when a message is received on an open channel.
202 static void onMessage(ChannelInfo channel,
203 MessageInfo message);
205 // Fired when an error occurs as a result of a channel operation or a
206 // network event. |error| contains details of the error.
207 static void onError(ChannelInfo channel, ErrorInfo error);