summaryrefslogtreecommitdiffstats
path: root/ppapi/thunk
diff options
context:
space:
mode:
authortoyoshim@chromium.org <toyoshim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-18 05:51:54 +0000
committertoyoshim@chromium.org <toyoshim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-18 05:51:54 +0000
commit081d147b55170f80e74d4172a784e7fe19b063be (patch)
treeb123331bca55cc16f16cf6cf8260ea8a6b3c7bf7 /ppapi/thunk
parent8bc0cd5093b498df67db690be98e37fa2d00c26a (diff)
downloadchromium_src-081d147b55170f80e74d4172a784e7fe19b063be.zip
chromium_src-081d147b55170f80e74d4172a784e7fe19b063be.tar.gz
chromium_src-081d147b55170f80e74d4172a784e7fe19b063be.tar.bz2
- Implement internal API and thunk
- Implement base frame for in process API - Add basic unit tests for in process API BUG=87310 TEST=ui_tests --gtest_filter="PPAPITest.WebSocket*" Review URL: http://codereview.chromium.org/8571002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@110664 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/thunk')
-rw-r--r--ppapi/thunk/interfaces_ppb_public_dev.h3
-rw-r--r--ppapi/thunk/ppb_websocket_api.h41
-rw-r--r--ppapi/thunk/ppb_websocket_thunk.cc147
-rw-r--r--ppapi/thunk/resource_creation_api.h2
4 files changed, 193 insertions, 0 deletions
diff --git a/ppapi/thunk/interfaces_ppb_public_dev.h b/ppapi/thunk/interfaces_ppb_public_dev.h
index 7ef9f30..32dcb1d 100644
--- a/ppapi/thunk/interfaces_ppb_public_dev.h
+++ b/ppapi/thunk/interfaces_ppb_public_dev.h
@@ -22,6 +22,7 @@ PROXIED_API(PPB_TextInput)
UNPROXIED_API(PPB_Transport)
PROXIED_API(PPB_VideoCapture)
PROXIED_API(PPB_VideoDecoder)
+UNPROXIED_API(PPB_WebSocket)
UNPROXIED_API(PPB_Widget)
PROXIED_IFACE(PPB_AudioInput, PPB_AUDIO_INPUT_DEV_INTERFACE_0_1,
@@ -63,6 +64,8 @@ PROXIED_IFACE(PPB_VideoDecoder, PPB_VIDEODECODER_DEV_INTERFACE_0_16,
PPB_VideoDecoder_Dev)
UNPROXIED_IFACE(PPB_VideoLayer, PPB_VIDEOLAYER_DEV_INTERFACE,
PPB_VideoLayer_Dev)
+UNPROXIED_IFACE(PPB_WebSocket, PPB_WEBSOCKET_DEV_INTERFACE_0_1,
+ PPB_WebSocket_Dev)
UNPROXIED_IFACE(PPB_Widget, PPB_WIDGET_DEV_INTERFACE_0_3, PPB_Widget_Dev)
#include "ppapi/thunk/interfaces_postamble.h"
diff --git a/ppapi/thunk/ppb_websocket_api.h b/ppapi/thunk/ppb_websocket_api.h
new file mode 100644
index 0000000..ba49a0f
--- /dev/null
+++ b/ppapi/thunk/ppb_websocket_api.h
@@ -0,0 +1,41 @@
+// 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.
+
+#ifndef PPAPI_THUNK_WEBSOCKET_API_H_
+#define PPAPI_THUNK_WEBSOCKET_API_H_
+
+#include "ppapi/c/pp_completion_callback.h"
+#include "ppapi/c/dev/ppb_websocket_dev.h"
+
+namespace ppapi {
+namespace thunk {
+
+class PPB_WebSocket_API {
+ public:
+ virtual ~PPB_WebSocket_API() {}
+
+ virtual int32_t Connect(PP_Var url,
+ const PP_Var protocols[],
+ uint32_t protocol_count,
+ PP_CompletionCallback callback) = 0;
+ virtual int32_t Close(uint16_t code,
+ PP_Var reason,
+ PP_CompletionCallback callback) = 0;
+ virtual int32_t ReceiveMessage(PP_Var* message,
+ PP_CompletionCallback callback) = 0;
+ virtual int32_t SendMessage(PP_Var message) = 0;
+ virtual uint64_t GetBufferedAmount() = 0;
+ virtual uint16_t GetCloseCode() = 0;
+ virtual PP_Var GetCloseReason() = 0;
+ virtual PP_Bool GetCloseWasClean() = 0;
+ virtual PP_Var GetExtensions() = 0;
+ virtual PP_Var GetProtocol() = 0;
+ virtual PP_WebSocketReadyState_Dev GetReadyState() = 0;
+ virtual PP_Var GetURL() = 0;
+};
+
+} // namespace thunk
+} // namespace ppapi
+
+#endif // PPAPI_THUNK_WEBSOCKET_API_H_
diff --git a/ppapi/thunk/ppb_websocket_thunk.cc b/ppapi/thunk/ppb_websocket_thunk.cc
new file mode 100644
index 0000000..d1de127
--- /dev/null
+++ b/ppapi/thunk/ppb_websocket_thunk.cc
@@ -0,0 +1,147 @@
+// 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.
+
+#include "ppapi/c/pp_errors.h"
+#include "ppapi/c/pp_var.h"
+#include "ppapi/thunk/thunk.h"
+#include "ppapi/thunk/enter.h"
+#include "ppapi/thunk/ppb_websocket_api.h"
+#include "ppapi/thunk/resource_creation_api.h"
+
+namespace ppapi {
+namespace thunk {
+
+namespace {
+
+PP_Resource Create(PP_Instance instance) {
+ EnterFunction<ResourceCreationAPI> enter(instance, true);
+ if (enter.failed())
+ return 0;
+ return enter.functions()->CreateWebSocket(instance);
+}
+
+PP_Bool IsWebSocket(PP_Resource resource) {
+ EnterResource<PPB_WebSocket_API> enter(resource, false);
+ return PP_FromBool(enter.succeeded());
+}
+
+int32_t Connect(PP_Resource resource,
+ PP_Var url,
+ const PP_Var protocols[],
+ uint32_t protocol_count,
+ PP_CompletionCallback callback) {
+ EnterResource<PPB_WebSocket_API> enter(resource, false);
+ if (enter.failed())
+ return PP_ERROR_BADRESOURCE;
+ return enter.object()->Connect(url, protocols, protocol_count, callback);
+}
+
+int32_t Close(PP_Resource resource,
+ uint16_t code,
+ PP_Var reason,
+ PP_CompletionCallback callback) {
+ EnterResource<PPB_WebSocket_API> enter(resource, false);
+ if (enter.failed())
+ return PP_ERROR_BADRESOURCE;
+ return enter.object()->Close(code, reason, callback);
+}
+
+int32_t ReceiveMessage(PP_Resource resource,
+ PP_Var* message,
+ PP_CompletionCallback callback) {
+ EnterResource<PPB_WebSocket_API> enter(resource, false);
+ if (enter.failed())
+ return PP_ERROR_BADRESOURCE;
+ return enter.object()->ReceiveMessage(message, callback);
+}
+
+int32_t SendMessage(PP_Resource resource, PP_Var message) {
+ EnterResource<PPB_WebSocket_API> enter(resource, false);
+ if (enter.failed())
+ return PP_ERROR_BADRESOURCE;
+ return enter.object()->SendMessage(message);
+}
+
+uint64_t GetBufferedAmount(PP_Resource resource) {
+ EnterResource<PPB_WebSocket_API> enter(resource, false);
+ if (enter.failed())
+ return PP_ERROR_BADRESOURCE;
+ return enter.object()->GetBufferedAmount();
+}
+
+uint16_t GetCloseCode(PP_Resource resource) {
+ EnterResource<PPB_WebSocket_API> enter(resource, false);
+ if (enter.failed())
+ return PP_ERROR_BADRESOURCE;
+ return enter.object()->GetCloseCode();
+}
+
+PP_Var GetCloseReason(PP_Resource resource) {
+ EnterResource<PPB_WebSocket_API> enter(resource, false);
+ if (enter.failed())
+ return PP_MakeUndefined();
+ return enter.object()->GetCloseReason();
+}
+
+PP_Bool GetCloseWasClean(PP_Resource resource) {
+ EnterResource<PPB_WebSocket_API> enter(resource, false);
+ if (enter.failed())
+ return PP_FALSE;
+ return enter.object()->GetCloseWasClean();
+}
+
+PP_Var GetExtensions(PP_Resource resource) {
+ EnterResource<PPB_WebSocket_API> enter(resource, false);
+ if (enter.failed())
+ return PP_MakeUndefined();
+ return enter.object()->GetExtensions();
+}
+
+PP_Var GetProtocol(PP_Resource resource) {
+ EnterResource<PPB_WebSocket_API> enter(resource, false);
+ if (enter.failed())
+ return PP_MakeUndefined();
+ return enter.object()->GetProtocol();
+}
+
+PP_WebSocketReadyState_Dev GetReadyState(PP_Resource resource) {
+ EnterResource<PPB_WebSocket_API> enter(resource, false);
+ if (enter.failed())
+ return PP_WEBSOCKETREADYSTATE_INVALID_DEV;
+ return enter.object()->GetReadyState();
+}
+
+PP_Var GetURL(PP_Resource resource) {
+ EnterResource<PPB_WebSocket_API> enter(resource, false);
+ if (enter.failed())
+ return PP_MakeUndefined();
+ return enter.object()->GetURL();
+}
+
+
+const PPB_WebSocket_Dev g_ppb_websocket_thunk = {
+ &Create,
+ &IsWebSocket,
+ &Connect,
+ &Close,
+ &ReceiveMessage,
+ &SendMessage,
+ &GetBufferedAmount,
+ &GetCloseCode,
+ &GetCloseReason,
+ &GetCloseWasClean,
+ &GetExtensions,
+ &GetProtocol,
+ &GetReadyState,
+ &GetURL
+};
+
+} // namespace
+
+const PPB_WebSocket_Dev* GetPPB_WebSocket_Dev_Thunk() {
+ return &g_ppb_websocket_thunk;
+}
+
+} // namespace thunk
+} // namespace ppapi
diff --git a/ppapi/thunk/resource_creation_api.h b/ppapi/thunk/resource_creation_api.h
index b9e26d5..24a58c6 100644
--- a/ppapi/thunk/resource_creation_api.h
+++ b/ppapi/thunk/resource_creation_api.h
@@ -19,6 +19,7 @@
#include "ppapi/c/ppb_input_event.h"
#include "ppapi/c/dev/pp_video_dev.h"
#include "ppapi/c/dev/ppb_transport_dev.h"
+#include "ppapi/c/dev/ppb_websocket_dev.h"
#include "ppapi/shared_impl/api_id.h"
struct PP_Flash_Menu;
@@ -131,6 +132,7 @@ class ResourceCreationAPI {
PP_VideoDecoder_Profile profile) = 0;
virtual PP_Resource CreateVideoLayer(PP_Instance instance,
PP_VideoLayerMode_Dev mode) = 0;
+ virtual PP_Resource CreateWebSocket(PP_Instance instance) = 0;
virtual PP_Resource CreateWheelInputEvent(
PP_Instance instance,
PP_TimeTicks time_stamp,