diff options
author | toyoshim@chromium.org <toyoshim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-18 05:51:54 +0000 |
---|---|---|
committer | toyoshim@chromium.org <toyoshim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-18 05:51:54 +0000 |
commit | 081d147b55170f80e74d4172a784e7fe19b063be (patch) | |
tree | b123331bca55cc16f16cf6cf8260ea8a6b3c7bf7 /ppapi/thunk | |
parent | 8bc0cd5093b498df67db690be98e37fa2d00c26a (diff) | |
download | chromium_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.h | 3 | ||||
-rw-r--r-- | ppapi/thunk/ppb_websocket_api.h | 41 | ||||
-rw-r--r-- | ppapi/thunk/ppb_websocket_thunk.cc | 147 | ||||
-rw-r--r-- | ppapi/thunk/resource_creation_api.h | 2 |
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, |