diff options
author | yzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-08 16:56:34 +0000 |
---|---|---|
committer | yzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-08 16:56:34 +0000 |
commit | 18d871ff3cc3d59c58d479dbe82373a1f0a232b5 (patch) | |
tree | 30eea5317dcfea1cc965792c1e9691767b30f485 /ppapi/proxy | |
parent | 25bd71ae5f7770990ac30c5ad5ca8745a952e1c0 (diff) | |
download | chromium_src-18d871ff3cc3d59c58d479dbe82373a1f0a232b5.zip chromium_src-18d871ff3cc3d59c58d479dbe82373a1f0a232b5.tar.gz chromium_src-18d871ff3cc3d59c58d479dbe82373a1f0a232b5.tar.bz2 |
Introduce a new Pepper interface: PPB/PPP_MouseLock.
BUG=None
TEST=None
Review URL: http://codereview.chromium.org/7828019
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@100166 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/proxy')
-rw-r--r-- | ppapi/proxy/dispatcher.cc | 3 | ||||
-rw-r--r-- | ppapi/proxy/interface_id.h | 1 | ||||
-rw-r--r-- | ppapi/proxy/ppapi_messages.h | 9 | ||||
-rw-r--r-- | ppapi/proxy/ppb_instance_proxy.cc | 50 | ||||
-rw-r--r-- | ppapi/proxy/ppb_instance_proxy.h | 7 | ||||
-rwxr-xr-x | ppapi/proxy/ppp_mouse_lock_proxy.cc | 75 | ||||
-rwxr-xr-x | ppapi/proxy/ppp_mouse_lock_proxy.h | 38 |
7 files changed, 183 insertions, 0 deletions
diff --git a/ppapi/proxy/dispatcher.cc b/ppapi/proxy/dispatcher.cc index 7c099a7..d77c905 100644 --- a/ppapi/proxy/dispatcher.cc +++ b/ppapi/proxy/dispatcher.cc @@ -88,6 +88,7 @@ #include "ppapi/proxy/ppp_instance_private_proxy.h" #include "ppapi/proxy/ppp_instance_proxy.h" #include "ppapi/proxy/ppp_messaging_proxy.h" +#include "ppapi/proxy/ppp_mouse_lock_proxy.h" #include "ppapi/proxy/ppp_video_decoder_proxy.h" #include "ppapi/proxy/var_serialization_rules.h" @@ -154,6 +155,7 @@ InterfaceList::InterfaceList() { AddPPB(PPB_Instance_Proxy::GetInfo1_0()); AddPPB(PPB_Instance_Proxy::GetInfoFullscreen()); AddPPB(PPB_Instance_Proxy::GetInfoMessaging()); + AddPPB(PPB_Instance_Proxy::GetInfoMouseLock()); AddPPB(PPB_Instance_Proxy::GetInfoPrivate()); AddPPB(PPB_Memory_Proxy::GetInfo()); AddPPB(PPB_OpenGLES2_Proxy::GetInfo()); @@ -180,6 +182,7 @@ InterfaceList::InterfaceList() { AddPPP(PPP_Instance_Private_Proxy::GetInfo()); AddPPP(PPP_Instance_Proxy::GetInfo1_0()); AddPPP(PPP_Messaging_Proxy::GetInfo()); + AddPPP(PPP_MouseLock_Proxy::GetInfo()); AddPPP(PPP_VideoCapture_Proxy::GetInfo()); AddPPP(PPP_VideoDecoder_Proxy::GetInfo()); } diff --git a/ppapi/proxy/interface_id.h b/ppapi/proxy/interface_id.h index 595b2c8..277f964 100644 --- a/ppapi/proxy/interface_id.h +++ b/ppapi/proxy/interface_id.h @@ -60,6 +60,7 @@ enum InterfaceID { INTERFACE_ID_PPP_INSTANCE, INTERFACE_ID_PPP_INSTANCE_PRIVATE, INTERFACE_ID_PPP_MESSAGING, + INTERFACE_ID_PPP_MOUSE_LOCK_DEV, INTERFACE_ID_PPP_VIDEO_CAPTURE_DEV, INTERFACE_ID_PPP_VIDEO_DECODER_DEV, diff --git a/ppapi/proxy/ppapi_messages.h b/ppapi/proxy/ppapi_messages.h index f8559b3..4611a4f 100644 --- a/ppapi/proxy/ppapi_messages.h +++ b/ppapi/proxy/ppapi_messages.h @@ -374,6 +374,10 @@ IPC_MESSAGE_ROUTED2(PpapiMsg_PPPMessaging_HandleMessage, PP_Instance /* instance */, ppapi::proxy::SerializedVar /* message */) +// PPP_MouseLock_Dev. +IPC_MESSAGE_ROUTED1(PpapiMsg_PPPMouseLock_MouseLockLost, + PP_Instance /* instance */) + // PPB_URLLoader // (Messages from browser to plugin to notify it of changes in state.) IPC_MESSAGE_ROUTED1( @@ -838,6 +842,11 @@ IPC_MESSAGE_ROUTED2(PpapiHostMsg_PPBInstance_ClearInputEvents, IPC_MESSAGE_ROUTED2(PpapiHostMsg_PPBInstance_PostMessage, PP_Instance /* instance */, ppapi::proxy::SerializedVar /* message */) +IPC_MESSAGE_ROUTED2(PpapiHostMsg_PPBInstance_LockMouse, + PP_Instance /* instance */, + uint32_t /* serialized_callback */) +IPC_MESSAGE_ROUTED1(PpapiHostMsg_PPBInstance_UnlockMouse, + PP_Instance /* instance */) IPC_SYNC_MESSAGE_ROUTED3_1( PpapiHostMsg_PPBPDF_GetFontFileWithFallback, diff --git a/ppapi/proxy/ppb_instance_proxy.cc b/ppapi/proxy/ppb_instance_proxy.cc index 3c02807..10464c6 100644 --- a/ppapi/proxy/ppb_instance_proxy.cc +++ b/ppapi/proxy/ppb_instance_proxy.cc @@ -5,6 +5,8 @@ #include "ppapi/proxy/ppb_instance_proxy.h" #include "ppapi/c/dev/ppb_fullscreen_dev.h" +#include "ppapi/c/dev/ppb_mouse_lock_dev.h" +#include "ppapi/c/pp_errors.h" #include "ppapi/c/pp_var.h" #include "ppapi/c/ppb_instance.h" #include "ppapi/c/ppb_messaging.h" @@ -82,6 +84,18 @@ const InterfaceProxy::Info* PPB_Instance_Proxy::GetInfoMessaging() { } // static +const InterfaceProxy::Info* PPB_Instance_Proxy::GetInfoMouseLock() { + static const Info info = { + ppapi::thunk::GetPPB_MouseLock_Thunk(), + PPB_MOUSELOCK_DEV_INTERFACE, + INTERFACE_ID_NONE, // 1_0 is the canonical one. + false, + &CreateInstanceProxy, + }; + return &info; +} + +// static const InterfaceProxy::Info* PPB_Instance_Proxy::GetInfoPrivate() { static const Info info = { ppapi::thunk::GetPPB_Instance_Private_Thunk(), @@ -134,6 +148,10 @@ bool PPB_Instance_Proxy::OnMessageReceived(const IPC::Message& msg) { OnMsgRequestInputEvents) IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_ClearInputEvents, OnMsgClearInputEvents) + IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_LockMouse, + OnMsgLockMouse) + IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_UnlockMouse, + OnMsgUnlockMouse) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; @@ -269,6 +287,21 @@ void PPB_Instance_Proxy::PostMessage(PP_Instance instance, instance, SerializedVarSendInput(dispatcher(), message))); } +int32_t PPB_Instance_Proxy::LockMouse(PP_Instance instance, + PP_CompletionCallback callback) { + if (!callback.func) + return PP_ERROR_BADARGUMENT; + + dispatcher()->Send(new PpapiHostMsg_PPBInstance_LockMouse( + INTERFACE_ID_PPB_INSTANCE, instance, SendCallback(callback))); + return PP_OK_COMPLETIONPENDING; +} + +void PPB_Instance_Proxy::UnlockMouse(PP_Instance instance) { + dispatcher()->Send(new PpapiHostMsg_PPBInstance_UnlockMouse( + INTERFACE_ID_PPB_INSTANCE, instance)); +} + void PPB_Instance_Proxy::OnMsgGetWindowObject( PP_Instance instance, SerializedVarReturnValue result) { @@ -366,5 +399,22 @@ void PPB_Instance_Proxy::OnMsgPostMessage(PP_Instance instance, enter.functions()->PostMessage(instance, message.Get(dispatcher())); } +void PPB_Instance_Proxy::OnMsgLockMouse(PP_Instance instance, + uint32_t serialized_callback) { + EnterFunctionNoLock<PPB_Instance_FunctionAPI> enter(instance, true); + if (enter.failed()) + return; + PP_CompletionCallback callback = ReceiveCallback(serialized_callback); + int32_t result = enter.functions()->LockMouse(instance, callback); + if (result != PP_OK_COMPLETIONPENDING) + PP_RunCompletionCallback(&callback, result); +} + +void PPB_Instance_Proxy::OnMsgUnlockMouse(PP_Instance instance) { + EnterFunctionNoLock<PPB_Instance_FunctionAPI> enter(instance, true); + if (enter.succeeded()) + enter.functions()->UnlockMouse(instance); +} + } // namespace proxy } // namespace ppapi diff --git a/ppapi/proxy/ppb_instance_proxy.h b/ppapi/proxy/ppb_instance_proxy.h index a7dd6e6..d0ec32b 100644 --- a/ppapi/proxy/ppb_instance_proxy.h +++ b/ppapi/proxy/ppb_instance_proxy.h @@ -32,6 +32,7 @@ class PPB_Instance_Proxy : public InterfaceProxy, static const Info* GetInfo0_5(); static const Info* GetInfo1_0(); static const Info* GetInfoMessaging(); + static const Info* GetInfoMouseLock(); static const Info* GetInfoPrivate(); static const Info* GetInfoFullscreen(); @@ -66,6 +67,9 @@ class PPB_Instance_Proxy : public InterfaceProxy, double maximium_factor) OVERRIDE; virtual void SubscribeToPolicyUpdates(PP_Instance instance) OVERRIDE; virtual void PostMessage(PP_Instance instance, PP_Var message) OVERRIDE; + virtual int32_t LockMouse(PP_Instance instance, + PP_CompletionCallback callback) OVERRIDE; + virtual void UnlockMouse(PP_Instance instance) OVERRIDE; private: // Message handlers. @@ -94,6 +98,9 @@ class PPB_Instance_Proxy : public InterfaceProxy, uint32_t event_classes); void OnMsgPostMessage(PP_Instance instance, SerializedVarReceiveInput message); + void OnMsgLockMouse(PP_Instance instance, + uint32_t serialized_callback); + void OnMsgUnlockMouse(PP_Instance instance); }; } // namespace proxy diff --git a/ppapi/proxy/ppp_mouse_lock_proxy.cc b/ppapi/proxy/ppp_mouse_lock_proxy.cc new file mode 100755 index 0000000..8980bcf --- /dev/null +++ b/ppapi/proxy/ppp_mouse_lock_proxy.cc @@ -0,0 +1,75 @@ +// 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/proxy/ppp_mouse_lock_proxy.h" + +#include "ppapi/c/dev/ppp_mouse_lock_dev.h" +#include "ppapi/proxy/host_dispatcher.h" +#include "ppapi/proxy/ppapi_messages.h" + +namespace ppapi { +namespace proxy { + +namespace { + +void MouseLockLost(PP_Instance instance) { + HostDispatcher* dispatcher = HostDispatcher::GetForInstance(instance); + if (!dispatcher) { + // The dispatcher should always be valid. + NOTREACHED(); + return; + } + + dispatcher->Send(new PpapiMsg_PPPMouseLock_MouseLockLost( + INTERFACE_ID_PPP_MOUSE_LOCK_DEV, instance)); +} + +static const PPP_MouseLock_Dev mouse_lock_interface = { + &MouseLockLost +}; + +InterfaceProxy* CreateMouseLockProxy(Dispatcher* dispatcher, + const void* target_interface) { + return new PPP_MouseLock_Proxy(dispatcher, target_interface); +} + +} // namespace + +PPP_MouseLock_Proxy::PPP_MouseLock_Proxy(Dispatcher* dispatcher, + const void* target_interface) + : InterfaceProxy(dispatcher, target_interface) { +} + +PPP_MouseLock_Proxy::~PPP_MouseLock_Proxy() { +} + +// static +const InterfaceProxy::Info* PPP_MouseLock_Proxy::GetInfo() { + static const Info info = { + &mouse_lock_interface, + PPP_MOUSELOCK_DEV_INTERFACE, + INTERFACE_ID_PPP_MOUSE_LOCK_DEV, + false, + &CreateMouseLockProxy, + }; + return &info; +} + +bool PPP_MouseLock_Proxy::OnMessageReceived(const IPC::Message& msg) { + bool handled = true; + IPC_BEGIN_MESSAGE_MAP(PPP_MouseLock_Proxy, msg) + IPC_MESSAGE_HANDLER(PpapiMsg_PPPMouseLock_MouseLockLost, + OnMsgMouseLockLost) + IPC_MESSAGE_UNHANDLED(handled = false) + IPC_END_MESSAGE_MAP() + return handled; +} + +void PPP_MouseLock_Proxy::OnMsgMouseLockLost(PP_Instance instance) { + if (ppp_mouse_lock_target()) + ppp_mouse_lock_target()->MouseLockLost(instance); +} + +} // namespace proxy +} // namespace ppapi diff --git a/ppapi/proxy/ppp_mouse_lock_proxy.h b/ppapi/proxy/ppp_mouse_lock_proxy.h new file mode 100755 index 0000000..cfd451c --- /dev/null +++ b/ppapi/proxy/ppp_mouse_lock_proxy.h @@ -0,0 +1,38 @@ +// 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_PROXY_PPP_MOUSE_LOCK_PROXY_H_ +#define PPAPI_PROXY_PPP_MOUSE_LOCK_PROXY_H_ + +#include "ppapi/c/pp_instance.h" +#include "ppapi/proxy/interface_proxy.h" + +struct PPP_MouseLock_Dev; + +namespace ppapi { +namespace proxy { + +class PPP_MouseLock_Proxy : public InterfaceProxy { + public: + PPP_MouseLock_Proxy(Dispatcher* dispatcher, const void* target_interface); + virtual ~PPP_MouseLock_Proxy(); + + static const Info* GetInfo(); + + const PPP_MouseLock_Dev* ppp_mouse_lock_target() const { + return static_cast<const PPP_MouseLock_Dev*>(target_interface()); + } + + // InterfaceProxy implementation. + virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE; + + private: + // Message handlers. + void OnMsgMouseLockLost(PP_Instance instance); +}; + +} // namespace proxy +} // namespace ppapi + +#endif // PPAPI_PROXY_PPP_MOUSE_LOCK_PROXY_H_ |