QUIC - cleanup changes to sync chromium tree with internal source.
[chromium-blink-merge.git] / ppapi / api / ppb_websocket.idl
blobd006d282bcc71b7162dcd7084f264703c871104e
1 /* Copyright (c) 2012 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.
4 */
6 /**
7 * This file defines the <code>PPB_WebSocket</code> interface providing
8 * bi-directional, full-duplex, communications over a single TCP socket.
9 */
11 [generate_thunk]
13 label Chrome {
14 M18 = 1.0
17 /**
18 * This enumeration contains the types representing the WebSocket ready state
19 * and these states are based on the JavaScript WebSocket API specification.
20 * GetReadyState() returns one of these states.
22 [assert_size(4)]
23 enum PP_WebSocketReadyState {
24 /**
25 * Ready state is queried on an invalid resource.
27 PP_WEBSOCKETREADYSTATE_INVALID = -1,
29 /**
30 * Ready state that the connection has not yet been established.
32 PP_WEBSOCKETREADYSTATE_CONNECTING = 0,
34 /**
35 * Ready state that the WebSocket connection is established and communication
36 * is possible.
38 PP_WEBSOCKETREADYSTATE_OPEN = 1,
40 /**
41 * Ready state that the connection is going through the closing handshake.
43 PP_WEBSOCKETREADYSTATE_CLOSING = 2,
45 /**
46 * Ready state that the connection has been closed or could not be opened.
48 PP_WEBSOCKETREADYSTATE_CLOSED = 3
51 /**
52 * This enumeration contains status codes. These codes are used in Close() and
53 * GetCloseCode(). Refer to RFC 6455, The WebSocket Protocol, for further
54 * information.
55 * <code>PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE</code> and codes in the range
56 * <code>PP_WEBSOCKETSTATUSCODE_USER_REGISTERED_MIN</code> to
57 * <code>PP_WEBSOCKETSTATUSCODE_USER_REGISTERED_MAX</code>, and
58 * <code>PP_WEBSOCKETSTATUSCODE_USER_PRIVATE_MIN</code> to
59 * <code>PP_WEBSOCKETSTATUSCODE_USER_PRIVATE_MAX</code> are valid for Close().
61 [assert_size(4)]
62 enum PP_WebSocketCloseCode {
63 /**
64 * Indicates to request closing connection without status code and reason.
66 * (Note that the code 1005 is forbidden to send in actual close frames by
67 * the RFC. PP_WebSocket reuses this code internally and the code will never
68 * appear in the actual close frames.)
70 PP_WEBSOCKETSTATUSCODE_NOT_SPECIFIED = 1005,
72 /**
73 * Status codes in the range 0-999 are not used.
76 /**
77 * Indicates a normal closure.
79 PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE = 1000,
81 /**
82 * Indicates that an endpoint is "going away", such as a server going down.
84 PP_WEBSOCKETSTATUSCODE_GOING_AWAY = 1001,
86 /**
87 * Indicates that an endpoint is terminating the connection due to a protocol
88 * error.
90 PP_WEBSOCKETSTATUSCODE_PROTOCOL_ERROR = 1002,
92 /**
93 * Indicates that an endpoint is terminating the connection because it has
94 * received a type of data it cannot accept.
96 PP_WEBSOCKETSTATUSCODE_UNSUPPORTED_DATA = 1003,
98 /**
99 * Status code 1004 is reserved.
103 * Pseudo code to indicate that receiving close frame doesn't contain any
104 * status code.
106 PP_WEBSOCKETSTATUSCODE_NO_STATUS_RECEIVED = 1005,
109 * Pseudo code to indicate that connection was closed abnormally, e.g.,
110 * without closing handshake.
112 PP_WEBSOCKETSTATUSCODE_ABNORMAL_CLOSURE = 1006,
115 * Indicates that an endpoint is terminating the connection because it has
116 * received data within a message that was not consistent with the type of
117 * the message (e.g., non-UTF-8 data within a text message).
119 PP_WEBSOCKETSTATUSCODE_INVALID_FRAME_PAYLOAD_DATA = 1007,
122 * Indicates that an endpoint is terminating the connection because it has
123 * received a message that violates its policy.
125 PP_WEBSOCKETSTATUSCODE_POLICY_VIOLATION = 1008,
128 * Indicates that an endpoint is terminating the connection because it has
129 * received a message that is too big for it to process.
131 PP_WEBSOCKETSTATUSCODE_MESSAGE_TOO_BIG = 1009,
134 * Indicates that an endpoint (client) is terminating the connection because
135 * it has expected the server to negotiate one or more extension, but the
136 * server didn't return them in the response message of the WebSocket
137 * handshake.
139 PP_WEBSOCKETSTATUSCODE_MANDATORY_EXTENSION = 1010,
142 * Indicates that a server is terminating the connection because it
143 * encountered an unexpected condition.
145 PP_WEBSOCKETSTATUSCODE_INTERNAL_SERVER_ERROR = 1011,
148 * Status codes in the range 1012-1014 are reserved.
152 * Pseudo code to indicate that the connection was closed due to a failure to
153 * perform a TLS handshake.
155 PP_WEBSOCKETSTATUSCODE_TLS_HANDSHAKE = 1015,
158 * Status codes in the range 1016-2999 are reserved.
162 * Status codes in the range 3000-3999 are reserved for use by libraries,
163 * frameworks, and applications. These codes are registered directly with
164 * IANA.
166 PP_WEBSOCKETSTATUSCODE_USER_REGISTERED_MIN = 3000,
167 PP_WEBSOCKETSTATUSCODE_USER_REGISTERED_MAX = 3999,
170 * Status codes in the range 4000-4999 are reserved for private use.
171 * Application can use these codes for application specific purposes freely.
173 PP_WEBSOCKETSTATUSCODE_USER_PRIVATE_MIN = 4000,
174 PP_WEBSOCKETSTATUSCODE_USER_PRIVATE_MAX = 4999
177 /**
178 * The <code>PPB_WebSocket</code> interface provides bi-directional,
179 * full-duplex, communications over a single TCP socket.
181 interface PPB_WebSocket {
183 * Create() creates a WebSocket instance.
185 * @param[in] instance A <code>PP_Instance</code> identifying the instance
186 * with the WebSocket.
188 * @return A <code>PP_Resource</code> corresponding to a WebSocket if
189 * successful.
191 PP_Resource Create([in] PP_Instance instance);
194 * IsWebSocket() determines if the provided <code>resource</code> is a
195 * WebSocket instance.
197 * @param[in] resource A <code>PP_Resource</code> corresponding to a
198 * WebSocket.
200 * @return Returns <code>PP_TRUE</code> if <code>resource</code> is a
201 * <code>PPB_WebSocket</code>, <code>PP_FALSE</code> if the
202 * <code>resource</code> is invalid or some type other than
203 * <code>PPB_WebSocket</code>.
205 PP_Bool IsWebSocket([in] PP_Resource resource);
208 * Connect() connects to the specified WebSocket server. You can call this
209 * function once for a <code>web_socket</code>.
211 * @param[in] web_socket A <code>PP_Resource</code> corresponding to a
212 * WebSocket.
214 * @param[in] url A <code>PP_Var</code> representing a WebSocket server URL.
215 * The <code>PP_VarType</code> must be <code>PP_VARTYPE_STRING</code>.
217 * @param[in] protocols A pointer to an array of <code>PP_Var</code>
218 * specifying sub-protocols. Each <code>PP_Var</code> represents one
219 * sub-protocol and its <code>PP_VarType</code> must be
220 * <code>PP_VARTYPE_STRING</code>. This argument can be null only if
221 * <code>protocol_count</code> is 0.
223 * @param[in] protocol_count The number of sub-protocols in
224 * <code>protocols</code>.
226 * @param[in] callback A <code>PP_CompletionCallback</code> called
227 * when a connection is established or an error occurs in establishing
228 * connection.
230 * @return An int32_t containing an error code from <code>pp_errors.h</code>.
231 * Returns <code>PP_ERROR_BADARGUMENT</code> if the specified
232 * <code>url</code>, or <code>protocols</code> contain an invalid string as
233 * defined in the WebSocket API specification.
234 * <code>PP_ERROR_BADARGUMENT</code> corresponds to a SyntaxError in the
235 * WebSocket API specification.
236 * Returns <code>PP_ERROR_NOACCESS</code> if the protocol specified in the
237 * <code>url</code> is not a secure protocol, but the origin of the caller
238 * has a secure scheme. Also returns <code>PP_ERROR_NOACCESS</code> if the
239 * port specified in the <code>url</code> is a port that the user agent
240 * is configured to block access to because it is a well-known port like
241 * SMTP. <code>PP_ERROR_NOACCESS</code> corresponds to a SecurityError of the
242 * specification.
243 * Returns <code>PP_ERROR_INPROGRESS</code> if this is not the first call to
244 * Connect().
246 [report_errors=False]
247 int32_t Connect([in] PP_Resource web_socket,
248 [in] PP_Var url,
249 [in, size_as=protocol_count] PP_Var[] protocols,
250 [in] uint32_t protocol_count,
251 [in] PP_CompletionCallback callback);
254 * Close() closes the specified WebSocket connection by specifying
255 * <code>code</code> and <code>reason</code>.
257 * @param[in] web_socket A <code>PP_Resource</code> corresponding to a
258 * WebSocket.
260 * @param[in] code The WebSocket close code. This is ignored if it is
261 * <code>PP_WEBSOCKETSTATUSCODE_NOT_SPECIFIED</code>.
262 * <code>PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE</code> must be used for the
263 * usual case. To indicate some specific error cases, codes in the range
264 * <code>PP_WEBSOCKETSTATUSCODE_USER_REGISTERED_MIN</code> to
265 * <code>PP_WEBSOCKETSTATUSCODE_USER_REGISTERED_MAX</code>, and in the range
266 * <code>PP_WEBSOCKETSTATUSCODE_USER_PRIVATE_MIN</code> to
267 * <code>PP_WEBSOCKETSTATUSCODE_USER_PRIVATE_MAX</code> are available.
269 * @param[in] reason A <code>PP_Var</code> representing the WebSocket
270 * close reason. This is ignored if it is <code>PP_VARTYPE_UNDEFINED</code>.
271 * Otherwise, its <code>PP_VarType</code> must be
272 * <code>PP_VARTYPE_STRING</code>.
274 * @param[in] callback A <code>PP_CompletionCallback</code> called
275 * when the connection is closed or an error occurs in closing the
276 * connection.
278 * @return An int32_t containing an error code from <code>pp_errors.h</code>.
279 * Returns <code>PP_ERROR_BADARGUMENT</code> if <code>reason</code> contains
280 * an invalid character as a UTF-8 string, or is longer than 123 bytes.
281 * <code>PP_ERROR_BADARGUMENT</code> corresponds to a JavaScript SyntaxError
282 * in the WebSocket API specification.
283 * Returns <code>PP_ERROR_NOACCESS</code> if the code is not an integer
284 * equal to 1000 or in the range 3000 to 4999. <code>PP_ERROR_NOACCESS</code>
285 * corresponds to an InvalidAccessError in the WebSocket API specification.
286 * Returns <code>PP_ERROR_INPROGRESS</code> if a previous call to Close() is
287 * not finished.
289 [report_errors=False]
290 int32_t Close([in] PP_Resource web_socket,
291 [in] uint16_t code,
292 [in] PP_Var reason,
293 [in] PP_CompletionCallback callback);
296 * ReceiveMessage() receives a message from the WebSocket server.
297 * This interface only returns a single message. That is, this interface must
298 * be called at least N times to receive N messages, no matter the size of
299 * each message.
301 * @param[in] web_socket A <code>PP_Resource</code> corresponding to a
302 * WebSocket.
304 * @param[out] message The received message is copied to provided
305 * <code>message</code>. The <code>message</code> must remain valid until
306 * ReceiveMessage() completes. Its received <code>PP_VarType</code> will be
307 * <code>PP_VARTYPE_STRING</code> or <code>PP_VARTYPE_ARRAY_BUFFER</code>.
309 * @param[in] callback A <code>PP_CompletionCallback</code> called
310 * when ReceiveMessage() completes. This callback is ignored if
311 * ReceiveMessage() completes synchronously and returns <code>PP_OK</code>.
313 * @return An int32_t containing an error code from <code>pp_errors.h</code>.
314 * If an error is detected or connection is closed, ReceiveMessage() returns
315 * <code>PP_ERROR_FAILED</code> after all buffered messages are received.
316 * Until buffered message become empty, ReceiveMessage() continues to return
317 * <code>PP_OK</code> as if connection is still established without errors.
319 [report_errors=False]
320 int32_t ReceiveMessage([in] PP_Resource web_socket,
321 [out] PP_Var message,
322 [in] PP_CompletionCallback callback);
325 * SendMessage() sends a message to the WebSocket server.
327 * @param[in] web_socket A <code>PP_Resource</code> corresponding to a
328 * WebSocket.
330 * @param[in] message A message to send. The message is copied to an internal
331 * buffer, so the caller can free <code>message</code> safely after returning
332 * from the function. Its sent <code>PP_VarType</code> must be
333 * <code>PP_VARTYPE_STRING</code> or <code>PP_VARTYPE_ARRAY_BUFFER</code>.
335 * @return An int32_t containing an error code from <code>pp_errors.h</code>.
336 * Returns <code>PP_ERROR_FAILED</code> if the ReadyState is
337 * <code>PP_WEBSOCKETREADYSTATE_CONNECTING</code>.
338 * <code>PP_ERROR_FAILED</code> corresponds to a JavaScript
339 * InvalidStateError in the WebSocket API specification.
340 * Returns <code>PP_ERROR_BADARGUMENT</code> if the provided
341 * <code>message</code> contains an invalid character as a UTF-8 string.
342 * <code>PP_ERROR_BADARGUMENT</code> corresponds to a JavaScript
343 * SyntaxError in the WebSocket API specification.
344 * Otherwise, returns <code>PP_OK</code>, which doesn't necessarily mean
345 * that the server received the message.
347 [report_errors=False]
348 int32_t SendMessage([in] PP_Resource web_socket,
349 [in] PP_Var message);
352 * GetBufferedAmount() returns the number of bytes of text and binary
353 * messages that have been queued for the WebSocket connection to send, but
354 * have not been transmitted to the network yet.
356 * @param[in] web_socket A <code>PP_Resource</code> corresponding to a
357 * WebSocket.
359 * @return Returns the number of bytes.
361 [report_errors=False]
362 uint64_t GetBufferedAmount([in] PP_Resource web_socket);
365 * GetCloseCode() returns the connection close code for the WebSocket
366 * connection.
368 * @param[in] web_socket A <code>PP_Resource</code> corresponding to a
369 * WebSocket.
371 * @return Returns 0 if called before the close code is set.
373 [report_errors=False]
374 uint16_t GetCloseCode([in] PP_Resource web_socket);
377 * GetCloseReason() returns the connection close reason for the WebSocket
378 * connection.
380 * @param[in] web_socket A <code>PP_Resource</code> corresponding to a
381 * WebSocket.
383 * @return Returns a <code>PP_VARTYPE_STRING</code> var. If called before the
384 * close reason is set, the return value contains an empty string. Returns a
385 * <code>PP_VARTYPE_UNDEFINED</code> if called on an invalid resource.
387 [report_errors=False]
388 PP_Var GetCloseReason([in] PP_Resource web_socket);
391 * GetCloseWasClean() returns if the connection was closed cleanly for the
392 * specified WebSocket connection.
394 * @param[in] web_socket A <code>PP_Resource</code> corresponding to a
395 * WebSocket.
397 * @return Returns <code>PP_FALSE</code> if called before the connection is
398 * closed, called on an invalid resource, or closed for abnormal reasons.
399 * Otherwise, returns <code>PP_TRUE</code> if the connection was closed
400 * cleanly.
402 [report_errors=False]
403 PP_Bool GetCloseWasClean([in] PP_Resource web_socket);
406 * GetExtensions() returns the extensions selected by the server for the
407 * specified WebSocket connection.
409 * @param[in] web_socket A <code>PP_Resource</code> corresponding to a
410 * WebSocket.
412 * @return Returns a <code>PP_VARTYPE_STRING</code> var. If called before the
413 * connection is established, the var's data is an empty string. Returns a
414 * <code>PP_VARTYPE_UNDEFINED</code> if called on an invalid resource.
416 [report_errors=False]
417 PP_Var GetExtensions([in] PP_Resource web_socket);
420 * GetProtocol() returns the sub-protocol chosen by the server for the
421 * specified WebSocket connection.
423 * @param[in] web_socket A <code>PP_Resource</code> corresponding to a
424 * WebSocket.
426 * @return Returns a <code>PP_VARTYPE_STRING</code> var. If called before the
427 * connection is established, the var contains the empty string. Returns a
428 * <code>PP_VARTYPE_UNDEFINED</code> if called on an invalid resource.
430 [report_errors=False]
431 PP_Var GetProtocol([in] PP_Resource web_socket);
434 * GetReadyState() returns the ready state of the specified WebSocket
435 * connection.
437 * @param[in] web_socket A <code>PP_Resource</code> corresponding to a
438 * WebSocket.
440 * @return Returns <code>PP_WEBSOCKETREADYSTATE_INVALID</code> if called
441 * before Connect() is called, or if this function is called on an
442 * invalid resource.
444 [on_failure=PP_WEBSOCKETREADYSTATE_INVALID, report_errors=False]
445 PP_WebSocketReadyState GetReadyState([in] PP_Resource web_socket);
448 * GetURL() returns the URL associated with specified WebSocket connection.
450 * @param[in] web_socket A <code>PP_Resource</code> corresponding to a
451 * WebSocket.
453 * @return Returns a <code>PP_VARTYPE_STRING</code> var. If called before the
454 * connection is established, the var contains the empty string. Returns a
455 * <code>PP_VARTYPE_UNDEFINED</code> if this function is called on an
456 * invalid resource.
458 [report_errors=False]
459 PP_Var GetURL([in] PP_Resource web_socket);