summaryrefslogtreecommitdiffstats
path: root/ppapi/proxy
diff options
context:
space:
mode:
authordmichael@chromium.org <dmichael@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-20 18:53:59 +0000
committerdmichael@chromium.org <dmichael@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-20 18:53:59 +0000
commit38d035e33fc2fac4f5c23819c6974afe2caff47b (patch)
tree82ecf8f419fbc6aafda5a068c03af0b1dd5acc75 /ppapi/proxy
parente43145482ea2623ef59ff8c4cc5c10ccad8302a9 (diff)
downloadchromium_src-38d035e33fc2fac4f5c23819c6974afe2caff47b.zip
chromium_src-38d035e33fc2fac4f5c23819c6974afe2caff47b.tar.gz
chromium_src-38d035e33fc2fac4f5c23819c6974afe2caff47b.tar.bz2
Revert 93223 - Reland http://codereview.chromium.org/7452002/
Update chromoting input events. (Clang caught this. Thanks, Clang!) Note I'm leaving in temporary backwards-compatibility. brettw, just need a rubber-stamp. This is the same as the last CL. awong/garykac/sergeyu, looking for someone on chromoting team to glance at my changes and make sure I didn't do anything you don't like. This is a high priority for 14, so please look if you can. BUG=None TEST=ppapi tests Review URL: http://codereview.chromium.org/7466002 TBR=dmichael@chromium.org Review URL: http://codereview.chromium.org/7471006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@93229 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/proxy')
-rw-r--r--ppapi/proxy/dispatcher.cc2
-rw-r--r--ppapi/proxy/ppapi_messages.h4
-rw-r--r--ppapi/proxy/ppapi_param_traits.cc24
-rw-r--r--ppapi/proxy/ppapi_param_traits.h9
-rw-r--r--ppapi/proxy/ppp_instance_proxy.cc34
-rw-r--r--ppapi/proxy/ppp_instance_proxy.h8
-rw-r--r--ppapi/proxy/ppp_instance_proxy_test.cc35
7 files changed, 102 insertions, 14 deletions
diff --git a/ppapi/proxy/dispatcher.cc b/ppapi/proxy/dispatcher.cc
index 5de70c0..69e16ac 100644
--- a/ppapi/proxy/dispatcher.cc
+++ b/ppapi/proxy/dispatcher.cc
@@ -165,7 +165,7 @@ InterfaceList::InterfaceList() {
AddPPP(PPP_Graphics3D_Proxy::GetInfo());
AddPPP(PPP_InputEvent_Proxy::GetInfo());
AddPPP(PPP_Instance_Private_Proxy::GetInfo());
- AddPPP(PPP_Instance_Proxy::GetInfo1_0());
+ AddPPP(PPP_Instance_Proxy::GetInfo0_5());
}
void InterfaceList::AddPPP(const InterfaceProxy::Info* info) {
diff --git a/ppapi/proxy/ppapi_messages.h b/ppapi/proxy/ppapi_messages.h
index f4739e8..41853ae 100644
--- a/ppapi/proxy/ppapi_messages.h
+++ b/ppapi/proxy/ppapi_messages.h
@@ -293,6 +293,10 @@ IPC_MESSAGE_ROUTED4(PpapiMsg_PPPInstance_DidChangeView,
IPC_MESSAGE_ROUTED2(PpapiMsg_PPPInstance_DidChangeFocus,
PP_Instance /* instance */,
PP_Bool /* has_focus */)
+IPC_SYNC_MESSAGE_ROUTED2_1(PpapiMsg_PPPInstance_HandleInputEvent,
+ PP_Instance /* instance */,
+ PP_InputEvent /* event */,
+ PP_Bool /* result */)
IPC_SYNC_MESSAGE_ROUTED2_1(PpapiMsg_PPPInstance_HandleDocumentLoad,
PP_Instance /* instance */,
pp::proxy::HostResource /* url_loader */,
diff --git a/ppapi/proxy/ppapi_param_traits.cc b/ppapi/proxy/ppapi_param_traits.cc
index 29e51bb..87c253b 100644
--- a/ppapi/proxy/ppapi_param_traits.cc
+++ b/ppapi/proxy/ppapi_param_traits.cc
@@ -171,6 +171,30 @@ void ParamTraits<PP_Flash_NetAddress>::Log(const param_type& p,
l->append(" bytes)>");
}
+// PP_InputEvent ---------------------------------------------------------------
+
+// static
+void ParamTraits<PP_InputEvent>::Write(Message* m, const param_type& p) {
+ // PP_InputEvent is just POD so we can just memcpy it.
+ m->WriteData(reinterpret_cast<const char*>(&p), sizeof(PP_InputEvent));
+}
+
+// static
+bool ParamTraits<PP_InputEvent>::Read(const Message* m,
+ void** iter,
+ param_type* r) {
+ const char* data;
+ int data_size;
+ if (!m->ReadData(iter, &data, &data_size))
+ return false;
+ memcpy(r, data, sizeof(PP_InputEvent));
+ return true;
+}
+
+// static
+void ParamTraits<PP_InputEvent>::Log(const param_type& p, std::string* l) {
+}
+
// PP_ObjectProperty -----------------------------------------------------------
// static
diff --git a/ppapi/proxy/ppapi_param_traits.h b/ppapi/proxy/ppapi_param_traits.h
index 736120f..0db47cd 100644
--- a/ppapi/proxy/ppapi_param_traits.h
+++ b/ppapi/proxy/ppapi_param_traits.h
@@ -11,6 +11,7 @@
#include "ipc/ipc_message_utils.h"
#include "ipc/ipc_platform_file.h"
#include "ppapi/c/pp_completion_callback.h"
+#include "ppapi/c/pp_input_event.h"
#include "ppapi/c/pp_rect.h"
#include "ppapi/c/pp_var.h"
@@ -61,6 +62,14 @@ struct ParamTraits<PP_Flash_NetAddress> {
};
template<>
+struct ParamTraits<PP_InputEvent> {
+ typedef PP_InputEvent param_type;
+ static void Write(Message* m, const param_type& p);
+ static bool Read(const Message* m, void** iter, param_type* r);
+ static void Log(const param_type& p, std::string* l);
+};
+
+template<>
struct ParamTraits<PP_ObjectProperty> {
typedef PP_ObjectProperty param_type;
static void Write(Message* m, const param_type& p);
diff --git a/ppapi/proxy/ppp_instance_proxy.cc b/ppapi/proxy/ppp_instance_proxy.cc
index cc2f9db..99dcaab 100644
--- a/ppapi/proxy/ppp_instance_proxy.cc
+++ b/ppapi/proxy/ppp_instance_proxy.cc
@@ -65,6 +65,21 @@ void DidChangeFocus(PP_Instance instance, PP_Bool has_focus) {
instance, has_focus));
}
+PP_Bool HandleInputEvent(PP_Instance instance,
+ const PP_InputEvent* event) {
+ PP_Bool result = PP_FALSE;
+ IPC::Message* msg = new PpapiMsg_PPPInstance_HandleInputEvent(
+ INTERFACE_ID_PPP_INSTANCE, instance, *event, &result);
+ // Make this message not unblock, to avoid re-entrancy problems when the
+ // plugin does a synchronous call to the renderer. This will force any
+ // synchronous calls from the plugin to complete before processing this
+ // message. We avoid deadlock by never un-setting the unblock flag on messages
+ // from the plugin to the renderer.
+ msg->set_unblock(false);
+ HostDispatcher::GetForInstance(instance)->Send(msg);
+ return result;
+}
+
PP_Bool HandleDocumentLoad(PP_Instance instance,
PP_Resource url_loader) {
PP_Bool result = PP_FALSE;
@@ -97,11 +112,12 @@ PP_Bool HandleDocumentLoad(PP_Instance instance,
return result;
}
-static const PPP_Instance_1_0 instance_interface_1_0 = {
+static const PPP_Instance_0_5 instance_interface_0_5 = {
&DidCreate,
&DidDestroy,
&DidChangeView,
&DidChangeFocus,
+ &HandleInputEvent,
&HandleDocumentLoad
};
@@ -119,13 +135,13 @@ PPP_Instance_Proxy::~PPP_Instance_Proxy() {
}
// static
-const InterfaceProxy::Info* PPP_Instance_Proxy::GetInfo1_0() {
+const InterfaceProxy::Info* PPP_Instance_Proxy::GetInfo0_5() {
static const Info info = {
- &instance_interface_1_0,
- PPP_INSTANCE_INTERFACE_1_0,
+ &instance_interface_0_5,
+ PPP_INSTANCE_INTERFACE_0_5,
INTERFACE_ID_PPP_INSTANCE,
false,
- &CreateInstanceProxy<PPP_Instance_1_0>,
+ &CreateInstanceProxy<PPP_Instance_0_5>,
};
return &info;
}
@@ -141,6 +157,8 @@ bool PPP_Instance_Proxy::OnMessageReceived(const IPC::Message& msg) {
OnMsgDidChangeView)
IPC_MESSAGE_HANDLER(PpapiMsg_PPPInstance_DidChangeFocus,
OnMsgDidChangeFocus)
+ IPC_MESSAGE_HANDLER(PpapiMsg_PPPInstance_HandleInputEvent,
+ OnMsgHandleInputEvent)
IPC_MESSAGE_HANDLER(PpapiMsg_PPPInstance_HandleDocumentLoad,
OnMsgHandleDocumentLoad)
IPC_MESSAGE_UNHANDLED(handled = false)
@@ -206,6 +224,12 @@ void PPP_Instance_Proxy::OnMsgDidChangeFocus(PP_Instance instance,
combined_interface_->DidChangeFocus(instance, has_focus);
}
+void PPP_Instance_Proxy::OnMsgHandleInputEvent(PP_Instance instance,
+ const PP_InputEvent& event,
+ PP_Bool* result) {
+ *result = combined_interface_->HandleInputEvent(instance, &event);
+}
+
void PPP_Instance_Proxy::OnMsgHandleDocumentLoad(PP_Instance instance,
const HostResource& url_loader,
PP_Bool* result) {
diff --git a/ppapi/proxy/ppp_instance_proxy.h b/ppapi/proxy/ppp_instance_proxy.h
index b246c5c..9448332 100644
--- a/ppapi/proxy/ppp_instance_proxy.h
+++ b/ppapi/proxy/ppp_instance_proxy.h
@@ -16,6 +16,7 @@
#include "ppapi/proxy/interface_proxy.h"
#include "ppapi/shared_impl/ppp_instance_combined.h"
+struct PP_InputEvent;
struct PP_Rect;
namespace pp {
@@ -34,8 +35,8 @@ class PPP_Instance_Proxy : public InterfaceProxy {
}
virtual ~PPP_Instance_Proxy();
- // Return the info for the 1.0 (latest, canonical) version of the interface.
- static const Info* GetInfo1_0();
+ // Return the info for the 0.5 (latest, canonical) version of the interface.
+ static const Info* GetInfo0_5();
::ppapi::PPP_Instance_Combined* ppp_instance_target() const {
return combined_interface_.get();
@@ -56,6 +57,9 @@ class PPP_Instance_Proxy : public InterfaceProxy {
const PP_Rect& clip,
PP_Bool fullscreen);
void OnMsgDidChangeFocus(PP_Instance instance, PP_Bool has_focus);
+ void OnMsgHandleInputEvent(PP_Instance instance,
+ const PP_InputEvent& event,
+ PP_Bool* result);
void OnMsgHandleDocumentLoad(PP_Instance instance,
const HostResource& url_loader,
PP_Bool* result);
diff --git a/ppapi/proxy/ppp_instance_proxy_test.cc b/ppapi/proxy/ppp_instance_proxy_test.cc
index c49f1a2..00d776b 100644
--- a/ppapi/proxy/ppp_instance_proxy_test.cc
+++ b/ppapi/proxy/ppp_instance_proxy_test.cc
@@ -60,6 +60,13 @@ void DidChangeFocus(PP_Instance instance, PP_Bool has_focus) {
did_change_focus_called.Signal();
}
+PP_InputEvent received_event;
+PP_Bool HandleInputEvent(PP_Instance instance, const PP_InputEvent* event) {
+ received_instance = instance;
+ memcpy(&received_event, event, sizeof(*event));;
+ return bool_to_return;
+}
+
PP_Bool HandleDocumentLoad(PP_Instance instance, PP_Resource url_loader) {
// This one requires use of the PPB_URLLoader proxy and PPB_Core, plus a
// resource tracker for the url_loader resource.
@@ -85,13 +92,15 @@ void ResetReceived() {
memset(&received_position, 0, sizeof(received_position));
memset(&received_clip, 0, sizeof(received_clip));
received_has_focus = PP_FALSE;
+ memset(&received_event, 0, sizeof(received_event));
}
-PPP_Instance_1_0 ppp_instance_1_0 = {
+PPP_Instance_0_5 ppp_instance_0_5 = {
&DidCreate,
&DidDestroy,
&DidChangeView,
&DidChangeFocus,
+ &HandleInputEvent,
&HandleDocumentLoad
};
@@ -111,15 +120,15 @@ class PPP_Instance_ProxyTest : public TwoWayTest {
}
};
-TEST_F(PPP_Instance_ProxyTest, PPPInstance1_0) {
- plugin().RegisterTestInterface(PPP_INSTANCE_INTERFACE_1_0, &ppp_instance_1_0);
+TEST_F(PPP_Instance_ProxyTest, PPPInstance0_5) {
+ plugin().RegisterTestInterface(PPP_INSTANCE_INTERFACE_0_5, &ppp_instance_0_5);
host().RegisterTestInterface(PPB_FULLSCREEN_DEV_INTERFACE,
&ppb_fullscreen_dev);
- // Grab the host-side proxy for the 1.0 interface.
- const PPP_Instance_1_0* ppp_instance = static_cast<const PPP_Instance_1_0*>(
+ // Grab the host-side proxy for the 0.5 interface.
+ const PPP_Instance_0_5* ppp_instance = static_cast<const PPP_Instance_0_5*>(
host().host_dispatcher()->GetProxiedInterface(
- PPP_INSTANCE_INTERFACE_1_0));
+ PPP_INSTANCE_INTERFACE_0_5));
// Call each function in turn, make sure we get the expected values and
// returns.
@@ -174,6 +183,20 @@ TEST_F(PPP_Instance_ProxyTest, PPPInstance1_0) {
EXPECT_EQ(received_instance, expected_instance);
EXPECT_EQ(received_has_focus, expected_has_focus);
+ PP_InputEvent expected_event = { PP_INPUTEVENT_TYPE_KEYDOWN, // type
+ 0, // padding
+ 1.0, // time_stamp
+ { { 2, 3 } } }; // u (as PP_InputEvent_Key)
+ ResetReceived();
+ EXPECT_EQ(bool_to_return,
+ ppp_instance->HandleInputEvent(expected_instance, &expected_event));
+ EXPECT_EQ(received_instance, expected_instance);
+ ASSERT_EQ(received_event.type, expected_event.type);
+ // Ignore padding; it's okay if it's not serialized.
+ EXPECT_EQ(received_event.time_stamp, expected_event.time_stamp);
+ EXPECT_EQ(received_event.u.key.modifier, expected_event.u.key.modifier);
+ EXPECT_EQ(received_event.u.key.key_code, expected_event.u.key.key_code);
+
// TODO(dmichael): Need to mock out a resource Tracker to be able to test
// HandleResourceLoad. It also requires
// PPB_Core.AddRefResource and for PPB_URLLoader to be