Chromium Code Reviews| Index: ppapi/api/dev/ppb_websocket_dev.idl |
| diff --git a/ppapi/api/dev/ppb_websocket_dev.idl b/ppapi/api/dev/ppb_websocket_dev.idl |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..70a68716eaac264ab5470a6ae42f7b3c65efb9d1 |
| --- /dev/null |
| +++ b/ppapi/api/dev/ppb_websocket_dev.idl |
| @@ -0,0 +1,397 @@ |
| +/* Copyright (c) 2011 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. |
| + */ |
| + |
| +/** |
| + * This file defines the <code>PPB_WebSocket_Dev</code> interface. |
| + */ |
| +label Chrome { |
| + M16 = 0.1 |
|
cstefansen
2011/11/01 17:58:15
Note: We should plan to pull it out of dev for M17
Takashi Toyoshima
2011/11/02 09:23:42
I guess IDL generator doesn't support M17 yet.
Fir
dmichael (off chromium)
2011/11/02 16:14:40
noelallen
Takashi Toyoshima
2011/11/04 08:45:55
Thanks.
I pinged him with change http://codereview
|
| +}; |
| + |
| + |
| +/** |
| + * This enumeration contains the types representing the WebSocket ready state |
| + * and these states are based on the JavaScript WebSocket API specification. |
| + * GetReadyState() returns one of these states. |
| + */ |
| +[assert_size(4)] |
| +enum PP_WebSocketReadyState_Dev { |
| + /** |
| + * Ready state that the connection has not yet been established. |
| + */ |
| + PP_WEBSOCKETREADYSTATE_CONNECTING = 0, |
|
dmichael (off chromium)
2011/11/01 21:03:24
We've had problems in the past when transitioning
Takashi Toyoshima
2011/11/02 09:23:42
Done.
|
| + |
| + /** |
| + * Ready state that the WebSocket connection is established and communication |
| + * is possible. |
| + */ |
| + PP_WEBSOCKETREADYSTATE_OPEN = 1, |
| + |
| + /** |
| + * Ready state that the connection is going through the closing handshake. |
| + */ |
| + PP_WEBSOCKETREADYSTATE_CLOSING = 2, |
| + |
| + /** |
| + * Ready state that the connection has been closed or could not be opened. |
| + */ |
| + PP_WEBSOCKETREADYSTATE_CLOSED = 3 |
| +}; |
| + |
| +/** |
| + * This enumeration contains the types representing the WebSocket message type |
| + * and these types are based on the JavaScript WebSocket API specification. |
| + * ReceiveMessage() and SendMessage() use them as a parameter to represent |
| + * handling message types. |
| + */ |
| +[assert_size(4)] |
| +enum PP_WebSocketMessageType_Dev { |
| + /** |
| + * Message type that represents a text message type. |
| + */ |
| + PP_WEBSOCKET_MESSAGE_TYPE_TEXT = 0, |
| + |
| + /** |
| + * Message type that represents a binary message type. |
| + */ |
| + PP_WEBSOCKET_MESSAGE_TYPE_BINARY = 1 |
| +}; |
| + |
| +[version=0.1, macro="PPB_WEBSOCKET_DEV_INTERFACE"] |
| +interface PPB_WebSocket_Dev { |
| + /** |
| + * Create() creates a WebSocket instance. |
| + * |
| + * @param[in] instance A <code>PP_Instance</code> identifying the instance |
| + * with the WebSocket. |
| + * |
| + * @return A <code>PP_Resource</code> corresponding to a WebSocket if |
| + * successful. |
| + */ |
| + PP_Resource Create([in] PP_Instance instance); |
| + |
| + /** |
| + * IsWebSocket() determines if the provided <code>resource</code> is a |
| + * WebSocket instance. |
| + * |
| + * @param[in] resource A <code>PP_Resource</code> corresponding to a |
| + * WebSocket. |
| + * |
| + * @return Returns <code>PP_TRUE</code> if <code>resource</code> is a |
| + * <code>PPB_WebSocket_Dev</code>, <code>PP_FALSE</code> if the |
| + * <code>resource</code> is invalid or some type other than |
| + * <code>PPB_WebSocket_Dev</code>. |
| + */ |
| + PP_Bool IsWebSocket([in] PP_Resource resource); |
| + |
| + /** |
| + * SetOpenCallback() sets the callback which is called when the WebSocket |
| + * connection is opened. This callback corresponds to onopen event of |
| + * JavaScript API. |
| + * Caller can call this method safely only before calling Connect(). |
| + * |
| + * @param[in] web_socket A <code>PP_Resource</code> corresponding to a |
| + * WebSocket. |
| + * |
| + * @param[in] callback A <code>PP_CompletionCallback</code> which is called |
| + * when the connection is opened. |
| + * |
| + * @return Returns <code>PP_OK</code>. |
| + */ |
| + int32_t SetOpenCallback([in] PP_Resource web_socket, |
|
darin (slow to review)
2011/11/01 17:40:53
How about just passing a PP_CompletionCallback to
Takashi Toyoshima
2011/11/02 09:23:42
I think Darin's suggest is good for IDL and C inte
dmichael (off chromium)
2011/11/02 16:14:40
I'm not sure what you mean, but it might be intere
cstefansen
2011/11/02 16:23:30
Personally, I think having an API that is natural
Takashi Toyoshima
2011/11/04 08:45:55
Thank you for advices.
I understand that my previo
dmichael (off chromium)
2011/11/04 15:26:18
This is true for now, but I'm (slowly) working on
|
| + [in] PP_CompletionCallback callback); |
| + |
| + /** |
| + * SetMessageCallback() sets the callback which is called when the WebSocket |
| + * connection receives a frame. This callback corresponds to onmessage event |
| + * of JavaScript API. |
| + * Callback is invoked when the next frame can be read via ReceiveMessage(). |
| + * Caller can call this method safely only before calling Connect(). |
| + * |
| + * @param[in] web_socket A <code>PP_Resource</code> corresponding to a |
| + * WebSocket. |
| + * |
| + * @param[in] callback A <code>PP_CompletionCallback</code> which is called |
| + * when the connection receives a frame. |
| + * |
| + * @return Returns <code>PP_OK</code>. |
| + */ |
| + int32_t SetMessageCallback([in] PP_Resource web_socket, |
|
darin (slow to review)
2011/11/01 17:40:53
Have you considered just passing a PP_CompletionCa
cstefansen
2011/11/01 18:08:51
This slightly incongruent with the JS version whic
Takashi Toyoshima
2011/11/02 09:23:42
See comment at SetOpenCallback.
|
| + [in] PP_CompletionCallback callback); |
| + |
| + /** |
| + * SetErrorCallback() sets the callback which is called when the WebSocket |
| + * connection is closed with prejudice. This callback corresponds to onclose |
| + * event of JavaScript API. |
| + * Caller can call this method safely only before calling Connect(). |
| + * |
| + * @param[in] web_socket A <code>PP_Resource</code> corresponding to a |
| + * WebSocket. |
| + * |
| + * @param[in] callback A <code>PP_CompletionCallback</code> which is called |
| + * when the connection receives a frame. |
| + * |
| + * @return Returns <code>PP_OK</code>. |
| + */ |
| + int32_t SetErrorCallback([in] PP_Resource web_socket, |
|
darin (slow to review)
2011/11/01 17:40:53
It seems like this should not be necessary. error
Takashi Toyoshima
2011/11/02 09:23:42
See comment at SetOpenCallback.
|
| + [in] PP_CompletionCallback callback); |
| + |
| + /** |
| + * SetCloseCallback() sets the callback which is called when the WebSocket |
| + * connection is closed. This callback corresponds to onclose event of |
| + * JavaScript API. |
| + * Close code and reason should be queried via each interface. |
| + * Caller can call this method safely only before calling Connect(). |
| + * |
| + * @param[in] web_socket A <code>PP_Resource</code> corresponding to a |
| + * WebSocket. |
| + * |
| + * @param[in] callback A <code>PP_CompletionCallback</code> which is called |
| + * when the connection is closed. |
| + * |
| + * @return Returns <code>PP_OK</code>. |
| + */ |
| + int32_t SetCloseCallback([in] PP_Resource web_socket, |
|
darin (slow to review)
2011/11/01 17:40:53
Ditto. I'd just get rid of this in favor of using
cstefansen
2011/11/01 18:08:51
How would you know that the connection closed if y
dmichael (off chromium)
2011/11/01 21:03:24
Another thing to note, though, is that it doesn't
Takashi Toyoshima
2011/11/02 09:23:42
See comment at SetOpenCallback.
|
| + [in] PP_CompletionCallback callback); |
| + |
| + /** |
| + * Connect() connects to the specified WebSocket server. Caller can call this |
| + * method at most once for a <code>web_socket</code>. |
| + * |
| + * @param[in] web_socket A <code>PP_Resource</code> corresponding to a |
| + * WebSocket. |
| + * |
| + * @param[in] url A <code>PP_Var</code> representing a WebSocket server URL. |
| + * The <code>PP_VarType</code> must be <code>PP_VARTYPE_STRING</code>. |
| + * |
| + * @param[in] protocols A pointer to an array of <code>PP_Var</code> |
| + * specifying sub-protocols. Each <code>PP_Var</code> represents one |
| + * sub-protocol and its <code>PP_VarType</code> must be |
| + * <code>PP_VARTYPE_STRING</code>. This argument can be null only if |
| + * <code>protocol_count</code> is 0. |
| + * |
| + * @param[in] protocol_count The number of sub-protocols in |
| + * <code>protocols</code>. |
| + * |
| + * @return In case of immediate failure, returns an error code as follows. |
| + * Returns <code>PP_ERROR_BADARGUMENT</code> corresponding to JavaScript |
| + * SyntaxError and <code>PP_ERROR_NOACCESS</code> corresponding to JavaScript |
| + * SecurityError. Otherwise, returns <code>PP_OK</code>. |
| + */ |
| + int32_t Connect([in] PP_Resource web_socket, |
| + [in] PP_Var url, |
| + [in, size_as=protocol_count] PP_Var[] protocols, |
| + [in] uint32_t protocol_count); |
| + |
| + /** |
| + * Close() closes the specified WebSocket connection by specifying |
| + * <code>code</code> and <code>reason</code>. |
| + * |
| + * @param[in] web_socket A <code>PP_Resource</code> corresponding to a |
| + * WebSocket. |
| + * |
| + * @param[in] code The WebSocket close code. Ignored if it is 0. |
| + * |
| + * @param[in] reason A <code>PP_Var</code> which represents the WebSocket |
| + * close reason. Ignored if it is <code>PP_VARTYPE_UNDEFINED</code>. |
| + * Otherwise, its <code>PP_VarType</code> must be |
| + * <code>PP_VARTYPE_STRING</code>. |
| + * |
| + * @return In case of immediate failure, returns an error code as follows. |
| + * Returns <code>PP_ERROR_BADARGUMENT</code> corresponding to JavaScript |
| + * SyntaxError and <code>PP_ERROR_NOACCESS</code> corresponding to JavaScript |
| + * InvalidAccessError. Otherwise, returns |
| + * <code>PP_OK</code>. |
| + */ |
| + int32_t Close([in] PP_Resource web_socket, |
| + [in] uint16_t code, |
| + [in] PP_Var reason); |
| + |
| + /** |
| + * ReceiveMessage() receives a message from the WebSocket server. |
| + * This interface only returns bytes of a single message. That is, this |
| + * interface must be called at least N times to receive N messages, no matter |
| + * how small each message is. |
| + * |
| + * Note: This interface might be changed as follows. |
| + * int32_t ReceiveMessage([in] PP_Resource web_socket, |
| + * [out] PP_Var message, |
| + * [out] int32_t remaining_message_byte_count); |
| + * |
| + * @param[in] web_socket A <code>PP_Resource</code> corresponding to a |
| + * WebSocket. |
| + * |
| + * @param[out] message_bytes The message is copied to provided |
| + * <code>message_bytes</code> up to <code>message_byte_count</code> bytes. |
| + * <code>message_bytes</code> can be null only if |
| + * <code>message_byte_count</code> is 0. |
| + * In copying message to <code>message_bytes</code>, UTF-8 byte sequence |
| + * boundaries are not considered. Hence if the message is larger than |
| + * <code>message_bytes</code>, the last byte sequence may end prematurely. |
| + * Likewise, the first sequence of the bytes returned for the subsequent call |
| + * may start in the middle. |
| + * |
| + * @param[in] message_bytes_count The maximum receiving size in bytes. |
| + * |
| + * @param[out] remaining_byte_count The number of remaining bytes, if any, is |
| + * set to <code>remaining_message_byte_count</code> if |
| + * <code>remaining_message_byte_count</code> is not null. The remaining bytes |
| + * of the message are returned for subsequent call(s) to this method. |
| + * |
| + * @param[out] message_type A <code>PP_WebSocketMessageType_Dev</code> |
| + * representing the message type is set to <code>message_type</code> if |
| + * <code>message_type</code> is not null. If the message is text, it is |
| + * encoded in UTF-8. |
| + * |
| + * @return If a message is currently available, returns the number of bytes |
| + * copied to <code>message_bytes</code>. Otherwise, returns 0. |
| + * Frame boundaries must be detected by <code>remaining_byte_count</code>. |
| + * If the next message is available as a result, registerd callback by |
| + * SetMessageCallback() will be invoked. |
| + * Messages are queued internally. Hence this method can be called either |
| + * before or after a message is received by the browser. If the queue grows |
| + * beyond the browser-dependent limit, <code>web_socket</code> is closed and |
| + * messages are discarded. |
| + */ |
| + int32_t ReceiveMessage([in] PP_Resource web_socket, |
| + [out,size_as=message_byte_count] void message_bytes, |
|
darin (slow to review)
2011/11/01 17:40:53
in the comments, the out param for the message is
dmichael (off chromium)
2011/11/01 21:03:24
Right. The JS spec uses MessageEvent, of which we
Takashi Toyoshima
2011/11/02 09:23:42
Darin,
The only reason why I avoid to use PP_Var i
|
| + [in] int32_t message_byte_count, |
| + [out] int32_t remaining_message_byte_count, |
| + [out] PP_WebSocketMessageType_Dev message_type); |
|
dmichael (off chromium)
2011/11/01 21:03:24
I think based on how I'm reading the spec, we need
Takashi Toyoshima
2011/11/02 09:23:42
In JS API, Chrome/WebKit appends origin field to t
dmichael (off chromium)
2011/11/02 16:14:40
I suspect you're right, that it's not needed. I br
|
| + |
| + /** |
| + * SendMessage() sends a message to the WebSocket server. |
| + * |
| + * Note: This interface might be changed as follows. |
| + * int32_t SendMessage([in] PP_Resource web_socket, |
| + * [in] PP_Var message); |
| + * |
| + * @param[in] web_socket A <code>PP_Resource</code> corresponding to a |
| + * WebSocket. |
| + * |
| + * @param[in] message_bytes A message to send. The message is copied to |
| + * internal buffer. So caller can free <code>message_bytes</code> safely |
| + * after returning from the function. |
| + * |
| + * @param[in] message_byte_count The length of the message in bytes. |
| + * |
| + * @param[in] message_type A <code>PP_WebSocketMessageType_Dev</code> |
| + * representing the message type of the <code>message</code>. |
| + * |
| + * @return In case of immediate failure, returns an error code as follows. |
| + * Returns <code>PP_ERROR_FAILED</code> corresponding JavaScript |
| + * InvalidStateError and <code>PP_ERROR_BADARGUMENT</code> corresponding |
| + * JavaScript SyntaxError. Otherwise, return <code>PP_OK</code>. |
| + * <code>PP_OK</code> doesn't necessarily mean that the server received the |
| + * message. |
| + */ |
| + int32_t SendMessage([in] PP_Resource web_socket, |
| + [in,size_as=message_byte_count] void[] message_bytes, |
| + [in] int32_t message_byte_count, |
|
darin (slow to review)
2011/11/01 17:40:53
ditto. using PP_Var for the message seems like a
Takashi Toyoshima
2011/11/02 09:23:42
Yes. I'd like to use PP_Var.
Please increase the p
|
| + [in] PP_WebSocketMessageType_Dev message_type); |
| + |
| + /** |
| + * GetBufferedAmount() returns the number of bytes of text and binary |
| + * messages that have been queued for the WebSocket connection to send but |
| + * have not been transmitted to the network yet. |
| + * |
| + * Note: This interface might not be able to return exact bytes in the first |
| + * release. |
| + * |
| + * @param[in] web_socket A <code>PP_Resource</code> corresponding to a |
| + * WebSocket. |
| + * |
| + * @return Returns the number of bytes. |
| + */ |
| + uint64_t GetBufferedAmount([in] PP_Resource web_socket); |
|
darin (slow to review)
2011/11/01 17:40:53
be mindful that all of these getters will need to
cstefansen
2011/11/01 18:08:51
That doesn't seem very performant. Is there an alt
Takashi Toyoshima
2011/11/02 09:23:42
I see.
Do you have any plan to support synchronous
dmichael (off chromium)
2011/11/02 16:14:40
We try to avoid using synchronous IPC in the proxy
Takashi Toyoshima
2011/11/04 08:45:55
OK, I'll try to implement it without IPC.
I think
|
| + |
| + /** |
| + * GetCloseCode() returns the connection close code for the WebSocket |
| + * connection. |
| + * |
| + * @param[in] web_socket A <code>PP_Resource</code> corresponding to a |
| + * WebSocket. |
| + * |
| + * @return Returns 0 if called before the close code is set. |
| + */ |
| + uint16_t GetCloseCode([in] PP_Resource web_socket); |
| + |
| + /** |
| + * GetCloseReason() returns the connection close reason for the WebSocket |
| + * connection. |
| + * |
| + * @param[in] web_socket A <code>PP_Resource</code> corresponding to a |
| + * WebSocket. |
| + * |
| + * @return Returns a <code>PP_VARTYPE_NULL</code> var if called before the |
| + * close reason is set, or <code>PP_VARTYPE_UNDEFINED</code> if called on an |
| + * invalid resource. |
| + */ |
| + PP_Var GetCloseReason([in] PP_Resource web_socket); |
| + |
| + /** |
| + * GetCloseWasClean() returns if the connection was closed cleanly for the |
| + * specified WebSocket connection. |
| + * |
| + * @param[in] web_socket A <code>PP_Resource</code> corresponding to a |
| + * WebSocket. |
| + * |
| + * @return Returns <code>PP_FALSE</code> if called before the connection is |
| + * closed. Otherwise, returns <code>PP_TRUE</code> if the connection was |
| + * closed cleanly and returns <code>PP_FALSE</code> if the connection was |
| + * closed by abnormal reasons. |
| + */ |
| + PP_Bool GetCloseWasClean([in] PP_Resource web_socket); |
| + |
| + /** |
| + * GetExtensions() returns the extensions selected by the server for the |
| + * specified WebSocket connection. |
|
dmichael (off chromium)
2011/11/01 21:03:24
It would probably be good to mention that this is
Takashi Toyoshima
2011/11/02 09:23:42
Oh, I see.
That will be better.
|
| + * |
| + * @param[in] web_socket A <code>PP_Resource</code> corresponding to a |
| + * WebSocket. |
| + * |
| + * @return Returns a <code>PP_VARTYPE_NULL</code> var if called before the |
|
dmichael (off chromium)
2011/11/01 21:03:24
The spec says "must initially return the empty str
Takashi Toyoshima
2011/11/02 09:23:42
Yes.
|
| + * connection is established, or <code>PP_VARTYPE_UNDEFINED</code> if called |
| + * on an invalid resource. |
| + */ |
| + PP_Var GetExtensions([in] PP_Resource web_socket); |
| + |
| + /** |
| + * GetProtocol() returns the sub-protocol chosen by the server for the |
| + * specified WebSocket connection. |
| + * |
| + * @param[in] web_socket A <code>PP_Resource</code> corresponding to a |
| + * WebSocket. |
| + * |
| + * @return Returns a <code>PP_VARTYPE_NULL</code> var if called before the |
|
dmichael (off chromium)
2011/11/01 21:03:24
Same here, I would suggest returning the empty str
Takashi Toyoshima
2011/11/02 09:23:42
Ditto.
|
| + * connection is established, or <code>PP_VARTYPE_UNDEFINED</code> if called |
| + * on an invalid resource. |
| + */ |
| + PP_Var GetProtocol([in] PP_Resource web_socket); |
| + |
| + /** |
| + * GetReadyState() returns the ready state of the specified WebSocket |
| + * connection. |
| + * |
| + * @param[in] web_socket A <code>PP_Resource</code> corresponding to a |
| + * WebSocket. |
| + * |
| + * @return Returns <code>PP_WEBSOCKETREADYSTATE_CONNECTING</code> if called |
| + * before the connection is established. |
| + */ |
| + PP_WebSocketReadyState_Dev GetReadyState([in] PP_Resource web_socket); |
| + |
| + /** |
| + * GetUrl() returns the URL associated with specified WebSocket connection. |
| + * |
| + * @param[in] web_socket A <code>PP_Resource</code> corresponding to a |
| + * WebSocket. |
| + * |
| + * @return Returns a <code>PP_VARTYPE_NULL</code> var if called before the |
| + * connection is established, or <code>PP_VARTYPE_UNDEFINED</code> if called |
| + * on an invalid resource. |
| + */ |
| + PP_Var GetUrl([in] PP_Resource web_socket); |
|
darin (slow to review)
2011/11/01 17:40:53
nit: GetURL
Takashi Toyoshima
2011/11/02 09:23:42
Done.
|
| +}; |