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

Unified Diff: ppapi/native_client/tests/ppapi_browser/ppp_input_event/ppapi_ppp_input_event.cc

Issue 7740013: Cloning a bunch of stuff from the native_client repository at r6528 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 4 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: ppapi/native_client/tests/ppapi_browser/ppp_input_event/ppapi_ppp_input_event.cc
===================================================================
--- ppapi/native_client/tests/ppapi_browser/ppp_input_event/ppapi_ppp_input_event.cc (revision 0)
+++ ppapi/native_client/tests/ppapi_browser/ppp_input_event/ppapi_ppp_input_event.cc (revision 0)
@@ -0,0 +1,214 @@
+// 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 <string.h>
+
+#include <vector>
+
+#include "native_client/src/include/nacl/nacl_inttypes.h"
+#include "native_client/src/include/nacl_macros.h"
+#include "native_client/src/shared/platform/nacl_check.h"
+#include "native_client/tests/ppapi_test_lib/get_browser_interface.h"
+#include "native_client/tests/ppapi_test_lib/test_interface.h"
+
+#include "ppapi/c/pp_bool.h"
+#include "ppapi/c/pp_errors.h"
+#include "ppapi/c/pp_input_event.h"
+#include "ppapi/c/ppb_input_event.h"
+#include "ppapi/c/ppp_input_event.h"
+
+namespace {
+
+// These define whether we want an input event to bubble up to the browser
+static enum {
+ BUBBLE_UNDEFINED,
+ BUBBLE_YES,
+ BUBBLE_NO
+} bubbleInputEvent;
+
+PP_TimeTicks last_time_tick;
+
+std::string InputEventTypeToString(PP_InputEvent_Type type) {
+ switch (type) {
+ case PP_INPUTEVENT_TYPE_UNDEFINED:
+ return "PP_INPUTEVENT_TYPE_UNDEFINED";
+ case PP_INPUTEVENT_TYPE_MOUSEDOWN:
+ return "PP_INPUTEVENT_TYPE_MOUSEDOWN";
+ case PP_INPUTEVENT_TYPE_MOUSEUP:
+ return "PP_INPUTEVENT_TYPE_MOUSEUP";
+ case PP_INPUTEVENT_TYPE_MOUSEMOVE:
+ return "PP_INPUTEVENT_TYPE_MOUSEMOVE";
+ case PP_INPUTEVENT_TYPE_MOUSEENTER:
+ return "PP_INPUTEVENT_TYPE_MOUSEENTER";
+ case PP_INPUTEVENT_TYPE_MOUSELEAVE:
+ return "PP_INPUTEVENT_TYPE_MOUSELEAVE";
+ case PP_INPUTEVENT_TYPE_WHEEL:
+ return "PP_INPUTEVENT_TYPE_WHEEL";
+ case PP_INPUTEVENT_TYPE_RAWKEYDOWN:
+ return "PP_INPUTEVENT_TYPE_RAWKEYDOWN";
+ case PP_INPUTEVENT_TYPE_KEYDOWN:
+ return "PP_INPUTEVENT_TYPE_KEYDOWN";
+ case PP_INPUTEVENT_TYPE_KEYUP:
+ return "PP_INPUTEVENT_TYPE_KEYUP";
+ case PP_INPUTEVENT_TYPE_CHAR:
+ return "PP_INPUTEVENT_TYPE_CHAR";
+ case PP_INPUTEVENT_TYPE_CONTEXTMENU:
+ return "PP_INPUTEVENT_TYPE_CONTEXTMENU";
+ default:
+ std::ostringstream stream;
+ stream << "Unknown Input Event: " << type;
+ return stream.str();
+ }
+}
+
+std::string InputEventModifierToString(uint32_t modifier) {
+ struct ModifierStringMap {
+ PP_InputEvent_Modifier modifier;
+ const char* name;
+ };
+ static const ModifierStringMap table[] = {
+ { PP_INPUTEVENT_MODIFIER_SHIFTKEY, "PP_INPUTEVENT_MODIFIER_SHIFTKEY" },
+ { PP_INPUTEVENT_MODIFIER_CONTROLKEY, "PP_INPUTEVENT_MODIFIER_CONTROLKEY" },
+ { PP_INPUTEVENT_MODIFIER_ALTKEY, "PP_INPUTEVENT_MODIFIER_ALTKEY" },
+ { PP_INPUTEVENT_MODIFIER_METAKEY, "PP_INPUTEVENT_MODIFIER_METAKEY" },
+ { PP_INPUTEVENT_MODIFIER_ISKEYPAD, "PP_INPUTEVENT_MODIFIER_ISKEYPAD" },
+ { PP_INPUTEVENT_MODIFIER_ISAUTOREPEAT,
+ "PP_INPUTEVENT_MODIFIER_ISAUTOREPEAT" },
+ { PP_INPUTEVENT_MODIFIER_LEFTBUTTONDOWN,
+ "PP_INPUTEVENT_MODIFIER_LEFTBUTTONDOWN" },
+ { PP_INPUTEVENT_MODIFIER_MIDDLEBUTTONDOWN,
+ "PP_INPUTEVENT_MODIFIER_MIDDLEBUTTONDOWN" },
+ { PP_INPUTEVENT_MODIFIER_RIGHTBUTTONDOWN,
+ "PP_INPUTEVENT_MODIFIER_RIGHTBUTTONDOWN" },
+ { PP_INPUTEVENT_MODIFIER_CAPSLOCKKEY,
+ "PP_INPUTEVENT_MODIFIER_CAPSLOCKKEY" },
+ { PP_INPUTEVENT_MODIFIER_NUMLOCKKEY, "PP_INPUTEVENT_MODIFIER_NUMLOCKKEY" },
+ };
+
+ std::ostringstream stream;
+ for (int i = 0; i < int(sizeof(table) / sizeof(*table)); ++i) {
+ if (table[i].modifier & modifier) {
+ if (stream.str().size() != 0) {
+ stream << ",";
+ }
+ stream << table[i].name;
+ modifier &= ~table[i].modifier;
+ }
+ }
+
+ if (modifier != 0) {
+ if (stream.str().size() != 0) {
+ stream << ",";
+ }
+ stream << "Unknown Modifier Bits:" << modifier;
+ }
+ return stream.str();
+}
+
+std::string MouseButtonToString(PP_InputEvent_MouseButton button) {
+ switch (button) {
+ case PP_INPUTEVENT_MOUSEBUTTON_NONE:
+ return "PP_INPUTEVENT_MOUSEBUTTON_NONE";
+ case PP_INPUTEVENT_MOUSEBUTTON_LEFT:
+ return "PP_INPUTEVENT_MOUSEBUTTON_LEFT";
+ case PP_INPUTEVENT_MOUSEBUTTON_MIDDLE:
+ return "PP_INPUTEVENT_MOUSEBUTTON_MIDDLE";
+ case PP_INPUTEVENT_MOUSEBUTTON_RIGHT:
+ return "PP_INPUTEVENT_MOUSEBUTTON_RIGHT";
+ default:
+ std::ostringstream stream;
+ stream << "Unrecognized ("
+ << static_cast<int32_t>(button)
+ << ")";
+ return stream.str();
+ }
+}
+
+PP_Bool HandleInputEvent(PP_Instance instance, PP_Resource event) {
+ EXPECT(instance == pp_instance());
+ EXPECT(PPBInputEvent()->IsInputEvent(event));
+ PP_InputEvent_Type type = PPBInputEvent()->GetType(event);
+ PP_TimeTicks ticks = PPBInputEvent()->GetTimeStamp(event);
+ EXPECT(ticks >= last_time_tick);
+ last_time_tick = ticks;
+ uint32_t modifiers = PPBInputEvent()->GetModifiers(event);
+ printf("--- PPP_InputEvent::HandleInputEvent "
+ "type=%d, ticks=%f, modifiers=%"NACL_PRIu32"\n",
+ static_cast<int>(type), ticks, modifiers);
+ std::ostringstream message;
+ message << InputEventTypeToString(type) << ":" <<
+ InputEventModifierToString(modifiers);
+ if (PPBMouseInputEvent()->IsMouseInputEvent(event)) {
+ PP_Point point = PPBMouseInputEvent()->GetPosition(event);
+ message << ":" << MouseButtonToString(
+ PPBMouseInputEvent()->GetButton(event));
+ message << ":Position=" << point.x << "," << point.y;
+ message << ":ClickCount=" << PPBMouseInputEvent()->GetClickCount(event);
+ }
+ // Here's a example of what a complete response would look like for a mouse
+ // click (broken into multiple lines for readability):
+ // HandleInputEvent:PP_INPUTEVENT_TYPE_MOUSEDOWN
+ // :PP_INPUTEVENT_MODIFIER_LEFTBUTTONDOWN
+ // :PP_INPUTEVENT_MOUSEBUTTON_LEFT
+ // :Position=0,0:ClickCount=1
+ // TODO(mball) Add output for WheelInputEvent and KeyboardInputEvent
+
+ PostTestMessage("HandleInputEvent", message.str());
+ EXPECT(bubbleInputEvent == BUBBLE_YES || bubbleInputEvent == BUBBLE_NO);
+ return (bubbleInputEvent == BUBBLE_NO) ? PP_TRUE : PP_FALSE;
+}
+
+void TestUnfilteredMouseEvents() {
+ EXPECT(PPBInputEvent()->RequestInputEvents(
+ pp_instance(),
+ PP_INPUTEVENT_CLASS_MOUSE) == PP_OK);
+ bubbleInputEvent = BUBBLE_NO;
+ TEST_PASSED;
+}
+
+void TestBubbledMouseEvents() {
+ EXPECT(PPBInputEvent()->RequestFilteringInputEvents(
+ pp_instance(),
+ PP_INPUTEVENT_CLASS_MOUSE) == PP_OK);
+ bubbleInputEvent = BUBBLE_YES;
+ TEST_PASSED;
+}
+
+void TestUnbubbledMouseEvents() {
+ EXPECT(PPBInputEvent()->RequestFilteringInputEvents(
+ pp_instance(),
+ PP_INPUTEVENT_CLASS_MOUSE) == PP_OK);
+ bubbleInputEvent = BUBBLE_NO;
+ TEST_PASSED;
+}
+
+void Cleanup() {
+ PPBInputEvent()->ClearInputEventRequest(
+ pp_instance(),
+ PP_INPUTEVENT_CLASS_MOUSE |
+ PP_INPUTEVENT_CLASS_WHEEL |
+ PP_INPUTEVENT_CLASS_KEYBOARD);
+ bubbleInputEvent = BUBBLE_UNDEFINED;
+ TEST_PASSED;
+}
+
+const PPP_InputEvent ppp_input_event_interface = {
+ &HandleInputEvent
+};
+
+} // namespace
+
+void SetupTests() {
+ bubbleInputEvent = BUBBLE_UNDEFINED;
+ last_time_tick = 0.0;
+ RegisterTest("TestUnfilteredMouseEvents", TestUnfilteredMouseEvents);
+ RegisterTest("TestBubbledMouseEvents", TestBubbledMouseEvents);
+ RegisterTest("TestUnbubbledMouseEvents", TestUnbubbledMouseEvents);
+ RegisterTest("Cleanup", Cleanup);
+}
+
+void SetupPluginInterfaces() {
+ RegisterPluginInterface(PPP_INPUT_EVENT_INTERFACE,
+ &ppp_input_event_interface);
+}

Powered by Google App Engine
This is Rietveld 408576698