Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1294)

Unified Diff: src/shared/ppapi_proxy/plugin_ppb_input_event.cc

Issue 7395005: Proxy PPB_Input_Event, PPP_Input_Event, and associated IFs. (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client
Patch Set: copyright headers Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/shared/ppapi_proxy/plugin_ppb_input_event.cc
diff --git a/src/shared/ppapi_proxy/plugin_ppb_input_event.cc b/src/shared/ppapi_proxy/plugin_ppb_input_event.cc
new file mode 100644
index 0000000000000000000000000000000000000000..64985e8a6feced2c3f4200c323cbc07e1c0dd450
--- /dev/null
+++ b/src/shared/ppapi_proxy/plugin_ppb_input_event.cc
@@ -0,0 +1,303 @@
+// Copyright (c) 2011 The Native Client 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 "native_client/src/shared/ppapi_proxy/plugin_ppb_input_event.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include "native_client/src/include/portability.h"
+#include "native_client/src/shared/ppapi_proxy/plugin_globals.h"
+#include "native_client/src/shared/ppapi_proxy/plugin_resource.h"
+#include "native_client/src/shared/ppapi_proxy/untrusted/srpcgen/ppb_rpc.h"
+#include "native_client/src/shared/ppapi_proxy/utility.h"
+#include "native_client/src/shared/srpc/nacl_srpc.h"
+#include "native_client/src/third_party/ppapi/c/pp_errors.h"
+#include "native_client/src/third_party/ppapi/c/ppb_input_event.h"
+
+namespace {
+
+using ppapi_proxy::DebugPrintf;
+using ppapi_proxy::GetMainSrpcChannel;
+using ppapi_proxy::PluginInputEvent;
+using ppapi_proxy::PluginResource;
+
+// InputEvent ------------------------------------------------------------------
+
+int32_t RequestInputEvents(PP_Instance instance, uint32_t event_classes) {
+ DebugPrintf("PPB_InputEvent::RequestInputEvents: instance=%"NACL_PRIu32", "
+ "event_classes=%"NACL_PRIu32"\n",
+ instance, event_classes);
+ uint32_t success = 0;
+ NaClSrpcError srpc_result =
+ PpbInputEventRpcClient::PPB_InputEvent_RequestInputEvents(
+ GetMainSrpcChannel(),
+ instance,
+ static_cast<int32_t>(event_classes),
+ false, // false -> Don't filter.
+ reinterpret_cast<int32_t*>(&success));
+ if (srpc_result == NACL_SRPC_RESULT_OK) {
+ return success;
+ }
+ return PP_ERROR_FAILED;
+}
+
+int32_t RequestFilteringInputEvents(PP_Instance instance,
+ uint32_t event_classes) {
+ DebugPrintf("PPB_InputEvent::RequestFilteringInputEvents: instance="
+ "%"NACL_PRIu32", event_classes=%"NACL_PRIu32"\n",
+ instance, event_classes);
+ uint32_t success = 0;
+ NaClSrpcError srpc_result =
+ PpbInputEventRpcClient::PPB_InputEvent_RequestInputEvents(
+ GetMainSrpcChannel(),
+ instance,
+ static_cast<int32_t>(event_classes),
+ true, // true -> Filter.
+ reinterpret_cast<int32_t*>(&success));
+ if (srpc_result == NACL_SRPC_RESULT_OK) {
+ return success;
+ }
+ return PP_ERROR_FAILED;
+}
+
+void ClearInputEventRequest(PP_Instance instance,
+ uint32_t event_classes) {
+ DebugPrintf("PPB_InputEvent::ClearInputEventRequest: instance=%"NACL_PRIu32
+ ", event_classes=%"NACL_PRIu32"\n",
+ instance, event_classes);
+ PpbInputEventRpcClient::PPB_InputEvent_ClearInputEventRequest(
+ GetMainSrpcChannel(),
+ instance,
+ static_cast<int32_t>(event_classes));
+}
+
+// Helper RAII class to get the PluginInputEvent from the PP_Resource and hold
+// it with a scoped_refptr. Also does a DebugPrintf.
+class InputEventGetter {
+ public:
+ InputEventGetter(PP_Resource resource, const char* function_name) {
+ DebugPrintf("PPB_InputEvent::%s: resource=%"NACL_PRIu32"\n",
+ function_name,
+ resource);
+ input_event_ =
+ PluginResource::GetAs<PluginInputEvent>(resource);
+ }
+
+ PluginInputEvent* get() {
+ return input_event_.get();
+ }
+
+ private:
+ NACL_DISALLOW_COPY_AND_ASSIGN(InputEventGetter);
+ scoped_refptr<PluginInputEvent> input_event_;
+};
+// This macro is for starting a resource function. It makes sure resource_arg
+// is of type PluginInputEvent, and returns error_return if it's not.
+#define BEGIN_RESOURCE_THUNK(function_name, resource_arg, error_return) \
+ InputEventGetter input_event(resource_arg, function_name); \
+ if (!input_event.get()) { \
+ return error_return; \
+ } \
+ do {} while(0)
+
+PP_Bool IsInputEvent(PP_Resource resource) {
+ BEGIN_RESOURCE_THUNK("IsInputEvent", resource, PP_FALSE);
+ return PP_TRUE;
+}
+
+#define IMPLEMENT_RESOURCE_THUNK(function, resource_arg, error_return) \
+ BEGIN_RESOURCE_THUNK(#function, resource_arg, error_return); \
+ return input_event.get()->function()
+
+PP_InputEvent_Type GetType(PP_Resource event) {
+ IMPLEMENT_RESOURCE_THUNK(GetType, event, PP_INPUTEVENT_TYPE_UNDEFINED);
+}
+
+PP_TimeTicks GetTimeStamp(PP_Resource event) {
+ IMPLEMENT_RESOURCE_THUNK(GetTimeStamp, event, 0.0);
+}
+
+uint32_t GetModifiers(PP_Resource event) {
+ IMPLEMENT_RESOURCE_THUNK(GetModifiers, event, 0);
+}
+
+// Mouse -----------------------------------------------------------------------
+
+PP_Bool IsMouseInputEvent(PP_Resource resource) {
+ if (!IsInputEvent(resource))
+ return PP_FALSE;
+ PP_InputEvent_Type type = GetType(resource);
+ return PP_FromBool(type == PP_INPUTEVENT_TYPE_MOUSEDOWN ||
+ type == PP_INPUTEVENT_TYPE_MOUSEUP ||
+ type == PP_INPUTEVENT_TYPE_MOUSEMOVE ||
+ type == PP_INPUTEVENT_TYPE_MOUSEENTER ||
+ type == PP_INPUTEVENT_TYPE_MOUSELEAVE ||
+ type == PP_INPUTEVENT_TYPE_CONTEXTMENU);
+}
+
+PP_InputEvent_MouseButton GetMouseButton(PP_Resource mouse_event) {
+ IMPLEMENT_RESOURCE_THUNK(GetMouseButton, mouse_event,
+ PP_INPUTEVENT_MOUSEBUTTON_NONE);
+}
+
+PP_Point GetMousePosition(PP_Resource mouse_event) {
+ IMPLEMENT_RESOURCE_THUNK(GetMousePosition, mouse_event, PP_MakePoint(0, 0));
+}
+
+int32_t GetMouseClickCount(PP_Resource mouse_event) {
+ IMPLEMENT_RESOURCE_THUNK(GetMouseClickCount, mouse_event, 0);
+}
+
+// Wheel -----------------------------------------------------------------------
+
+PP_Bool IsWheelInputEvent(PP_Resource resource) {
+ if (!IsInputEvent(resource))
+ return PP_FALSE;
+ PP_InputEvent_Type type = GetType(resource);
+ return PP_FromBool(type == PP_INPUTEVENT_TYPE_MOUSEWHEEL);
+}
+
+PP_FloatPoint GetWheelDelta(PP_Resource wheel_event) {
+ IMPLEMENT_RESOURCE_THUNK(GetWheelDelta, wheel_event, PP_MakeFloatPoint(0, 0));
+}
+
+PP_FloatPoint GetWheelTicks(PP_Resource wheel_event) {
+ IMPLEMENT_RESOURCE_THUNK(GetWheelTicks, wheel_event, PP_MakeFloatPoint(0, 0));
+}
+
+PP_Bool GetWheelScrollByPage(PP_Resource wheel_event) {
+ IMPLEMENT_RESOURCE_THUNK(GetWheelScrollByPage, wheel_event, PP_FALSE);
+}
+
+PP_Bool IsKeyboardInputEvent(PP_Resource resource) {
+ if (!IsInputEvent(resource))
+ return PP_FALSE;
+ PP_InputEvent_Type type = GetType(resource);
+ return PP_FromBool(type == PP_INPUTEVENT_TYPE_KEYDOWN ||
+ type == PP_INPUTEVENT_TYPE_KEYUP ||
+ type == PP_INPUTEVENT_TYPE_CHAR);
+}
+
+uint32_t GetKeyCode(PP_Resource key_event) {
+ IMPLEMENT_RESOURCE_THUNK(GetKeyCode, key_event, 0);
+}
+
+PP_Var GetCharacterText(PP_Resource character_event) {
+ IMPLEMENT_RESOURCE_THUNK(GetCharacterText, character_event,
+ PP_MakeUndefined());
+}
+
+} // namespace
+
+namespace ppapi_proxy {
+
+// static
+const PPB_InputEvent* PluginInputEvent::GetInterface() {
+ static const PPB_InputEvent input_event_interface = {
+ RequestInputEvents,
+ RequestFilteringInputEvents,
+ ClearInputEventRequest,
+ IsInputEvent,
+ ::GetType,
+ ::GetTimeStamp,
+ ::GetModifiers
+ };
+ return &input_event_interface;
+}
+
+// static
+const PPB_MouseInputEvent* PluginInputEvent::GetMouseInterface() {
+ static const PPB_MouseInputEvent mouse_input_event_interface = {
+ IsMouseInputEvent,
+ ::GetMouseButton,
+ ::GetMousePosition,
+ ::GetMouseClickCount
+ };
+ return &mouse_input_event_interface;
+}
+
+// static
+const PPB_WheelInputEvent* PluginInputEvent::GetWheelInterface() {
+ static const PPB_WheelInputEvent wheel_input_event_interface = {
+ IsWheelInputEvent,
+ ::GetWheelDelta,
+ ::GetWheelTicks,
+ ::GetWheelScrollByPage
+ };
+ return &wheel_input_event_interface;
+}
+
+// static
+const PPB_KeyboardInputEvent* PluginInputEvent::GetKeyboardInterface() {
+ static const PPB_KeyboardInputEvent keyboard_input_event_interface = {
+ IsKeyboardInputEvent,
+ ::GetKeyCode,
+ ::GetCharacterText
+ };
+ return &keyboard_input_event_interface;
+}
+
+PluginInputEvent::PluginInputEvent()
+ : character_text_(PP_MakeUndefined()) {
+}
+
+void PluginInputEvent::Init(const InputEventData& input_event_data,
+ PP_Var character_text) {
+ input_event_data_ = input_event_data;
+ character_text_ = character_text;
+}
+
+PluginInputEvent::~PluginInputEvent() {
+ // Release the character text. This is a no-op if it's not a string.
+ PPBVarInterface()->Release(character_text_);
+}
+
+PP_InputEvent_Type PluginInputEvent::GetType() const {
+ return input_event_data_.event_type;
+}
+
+PP_TimeTicks PluginInputEvent::GetTimeStamp() const {
+ return input_event_data_.event_time_stamp;
+}
+
+uint32_t PluginInputEvent::GetModifiers() const {
+ return input_event_data_.event_modifiers;
+}
+
+PP_InputEvent_MouseButton PluginInputEvent::GetMouseButton() const {
+ return input_event_data_.mouse_button;
+}
+
+PP_Point PluginInputEvent::GetMousePosition() const {
+ return input_event_data_.mouse_position;
+}
+
+int32_t PluginInputEvent::GetMouseClickCount() const {
+ return input_event_data_.mouse_click_count;
+}
+
+PP_FloatPoint PluginInputEvent::GetWheelDelta() const {
+ return input_event_data_.wheel_delta;
+}
+
+PP_FloatPoint PluginInputEvent::GetWheelTicks() const {
+ return input_event_data_.wheel_ticks;
+}
+
+PP_Bool PluginInputEvent::GetWheelScrollByPage() const {
+ return input_event_data_.wheel_scroll_by_page;
+}
+
+uint32_t PluginInputEvent::GetKeyCode() const {
+ return input_event_data_.key_code;
+}
+
+PP_Var PluginInputEvent::GetCharacterText() const {
+ PPBVarInterface()->AddRef(character_text_);
+ return character_text_;
+}
+
+} // namespace ppapi_proxy
+
« no previous file with comments | « src/shared/ppapi_proxy/plugin_ppb_input_event.h ('k') | src/shared/ppapi_proxy/plugin_ppp_input_event_rpc_server.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698