summaryrefslogtreecommitdiffstats
path: root/ppapi/proxy
diff options
context:
space:
mode:
authoryzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-08 16:56:34 +0000
committeryzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-08 16:56:34 +0000
commit18d871ff3cc3d59c58d479dbe82373a1f0a232b5 (patch)
tree30eea5317dcfea1cc965792c1e9691767b30f485 /ppapi/proxy
parent25bd71ae5f7770990ac30c5ad5ca8745a952e1c0 (diff)
downloadchromium_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.cc3
-rw-r--r--ppapi/proxy/interface_id.h1
-rw-r--r--ppapi/proxy/ppapi_messages.h9
-rw-r--r--ppapi/proxy/ppb_instance_proxy.cc50
-rw-r--r--ppapi/proxy/ppb_instance_proxy.h7
-rwxr-xr-xppapi/proxy/ppp_mouse_lock_proxy.cc75
-rwxr-xr-xppapi/proxy/ppp_mouse_lock_proxy.h38
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_