Index: remoting/tools/javascript_key_tester/pnacl/remoting_key_tester.cc |
diff --git a/remoting/tools/javascript_key_tester/pnacl/remoting_key_tester.cc b/remoting/tools/javascript_key_tester/pnacl/remoting_key_tester.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8bcaa2834089211a247ebaa1f53c697bcf7fb81d |
--- /dev/null |
+++ b/remoting/tools/javascript_key_tester/pnacl/remoting_key_tester.cc |
@@ -0,0 +1,115 @@ |
+// Copyright (c) 2015 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 <sstream> |
+ |
+#include "ppapi/cpp/input_event.h" |
+#include "ppapi/cpp/instance.h" |
+#include "ppapi/cpp/module.h" |
+#include "ppapi/cpp/var.h" |
+#include "ppapi/cpp/var_dictionary.h" |
+ |
+namespace remoting { |
+ |
+class KeyTesterInstance : public pp::Instance { |
+ public: |
+ explicit KeyTesterInstance(PP_Instance instance) : pp::Instance(instance) { |
+ RequestInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD | |
+ PP_INPUTEVENT_CLASS_MOUSE); |
Jamie
2015/01/30 23:25:09
Don't need MOUSE for the time being.
Łukasz Anforowicz
2015/01/31 00:44:49
Done.
|
+ } |
+ |
+ virtual ~KeyTesterInstance() {} |
+ |
+ virtual bool HandleInputEvent(const pp::InputEvent& event) { |
+ switch (event.GetType()) { |
+ case PP_INPUTEVENT_TYPE_KEYDOWN: |
+ case PP_INPUTEVENT_TYPE_KEYUP: |
+ case PP_INPUTEVENT_TYPE_CHAR: { |
+ HandleKeyboardEvent(pp::KeyboardInputEvent(event)); |
+ break; |
+ } |
+ default: |
+ break; |
+ } |
+ return true; |
+ } |
+ |
+ private: |
+ void HandleKeyboardEvent(const pp::KeyboardInputEvent& event) { |
+ pp::VarDictionary out; |
+ out.Set("type", EventTypeToString(event.GetType())); |
+ out.Set("modifiers", (double)event.GetModifiers()); |
+ out.Set("keyCode", (double)event.GetKeyCode()); |
+ out.Set("characterText", event.GetCharacterText()); |
+ out.Set("code", event.GetCode()); |
+ PostMessage(out); |
+ } |
+ |
+ std::string EventTypeToString(PP_InputEvent_Type t) { |
+ switch (t) { |
+ case PP_INPUTEVENT_TYPE_UNDEFINED: |
+ return "UNDEFINED"; |
+ case PP_INPUTEVENT_TYPE_MOUSEDOWN: |
+ return "MOUSEDOWN"; |
+ case PP_INPUTEVENT_TYPE_MOUSEUP: |
+ return "MOUSEUP"; |
+ case PP_INPUTEVENT_TYPE_MOUSEMOVE: |
+ return "MOUSEMOVE"; |
+ case PP_INPUTEVENT_TYPE_MOUSEENTER: |
+ return "MOUSEENTER"; |
+ case PP_INPUTEVENT_TYPE_MOUSELEAVE: |
+ return "MOUSELEAVE"; |
+ case PP_INPUTEVENT_TYPE_WHEEL: |
+ return "WHEEL"; |
+ case PP_INPUTEVENT_TYPE_RAWKEYDOWN: |
+ return "RAWKEYDOWN"; |
+ case PP_INPUTEVENT_TYPE_KEYDOWN: |
+ return "KEYDOWN"; |
+ case PP_INPUTEVENT_TYPE_KEYUP: |
+ return "KEYUP"; |
+ case PP_INPUTEVENT_TYPE_CHAR: |
+ return "CHAR"; |
+ case PP_INPUTEVENT_TYPE_CONTEXTMENU: |
+ return "CONTEXTMENU"; |
+ case PP_INPUTEVENT_TYPE_IME_COMPOSITION_START: |
+ return "IME_COMPOSITION_START"; |
+ case PP_INPUTEVENT_TYPE_IME_COMPOSITION_UPDATE: |
+ return "IME_COMPOSITION_UPDATE"; |
+ case PP_INPUTEVENT_TYPE_IME_COMPOSITION_END: |
+ return "IME_COMPOSITION_END"; |
+ case PP_INPUTEVENT_TYPE_IME_TEXT: |
+ return "IME_TEXT"; |
+ case PP_INPUTEVENT_TYPE_TOUCHSTART: |
+ return "TOUCHSTART"; |
+ case PP_INPUTEVENT_TYPE_TOUCHMOVE: |
+ return "TOUCHMOVE"; |
+ case PP_INPUTEVENT_TYPE_TOUCHEND: |
+ return "TOUCHEND"; |
+ case PP_INPUTEVENT_TYPE_TOUCHCANCEL: |
+ return "TOUCHCANCEL"; |
+ default: |
+ return "[UNRECOGNIZED]"; |
+ } |
+ } |
+}; |
+ |
+class KeyTesterModule : public pp::Module { |
+ public: |
+ KeyTesterModule() : pp::Module() {} |
+ virtual ~KeyTesterModule() {} |
+ |
+ virtual pp::Instance* CreateInstance(PP_Instance instance) { |
+ return new KeyTesterInstance(instance); |
+ } |
+}; |
+ |
+} // namespace remoting |
+ |
+namespace pp { |
+ |
+Module* CreateModule() { |
+ return new remoting::KeyTesterModule(); |
+} |
+ |
+} // namespace pp |