Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(168)

Unified Diff: ppapi/api/dev/ppb_websocket_dev.idl

Issue 8395037: IDL for WebSocket Pepper API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: handler registration model as Christian said Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | ppapi/c/dev/ppb_websocket_dev.h » ('j') | ppapi/c/dev/ppb_websocket_dev.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.
+};
« no previous file with comments | « no previous file | ppapi/c/dev/ppb_websocket_dev.h » ('j') | ppapi/c/dev/ppb_websocket_dev.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698