Index: remoting/tools/javascript_key_tester/main.js |
diff --git a/remoting/tools/javascript_key_tester/main.js b/remoting/tools/javascript_key_tester/main.js |
index e777b48166945762201a344cdff73988519586bb..93ed809b3514a2716a3a5da728eef7e878422d91 100644 |
--- a/remoting/tools/javascript_key_tester/main.js |
+++ b/remoting/tools/javascript_key_tester/main.js |
@@ -3,17 +3,143 @@ |
* found in the LICENSE file. |
*/ |
+/** |
+ * @param {string} eventName |
+ * @param {number|undefined} space |
Jamie
2015/01/30 23:25:09
{number=} is a simpler annotation, though you shou
Łukasz Anforowicz
2015/01/31 00:44:49
Done. Renamed to "opt_space" as well. (are you s
Jamie
2015/01/31 01:01:56
opt_ as a prefix for optional parameters is a comm
|
+ * @return {string} |
+ */ |
+function JsonifyJavascriptKeyEvent(event, eventName, space) { |
Jamie
2015/01/30 23:25:09
Function names in JS don't start with a capital le
Łukasz Anforowicz
2015/01/31 00:44:49
Done.
|
+ return "JavaScript '" + eventName + "' event = " + JSON.stringify( |
+ event, |
+ ['type', 'alt', 'shift', 'control', 'meta', 'charCode', 'keyCode', |
+ 'keyIdentifier', 'repeat'], |
+ space); |
+}; |
+ |
+/** |
+ * @param {ChordTracker} jsChordTracker |
+ * @param {Event} event |
+ * @return {void} |
+ */ |
+function HandleJavascriptKeyDownEvent(jsChordTracker, event) { |
+ AppendToTextLog(JsonifyJavascriptKeyEvent(event, 'keydown', undefined)); |
+ jsChordTracker.addKeyDownEvent( |
+ event.keyCode, JsonifyJavascriptKeyEvent(event, 'keydown', 2)); |
+} |
+ |
+/** |
+ * @param {ChordTracker} jsChordTracker |
+ * @param {Event} event |
+ * @return {void} |
+ */ |
+function HandleJavascriptKeyUpEvent(jsChordTracker, event) { |
+ AppendToTextLog(JsonifyJavascriptKeyEvent(event, 'keyup', undefined)); |
+ jsChordTracker.addKeyUpEvent( |
+ event.keyCode, JsonifyJavascriptKeyEvent(event, 'keyup', 2)); |
+} |
+ |
+/** @constructor */ |
+var PNaClEvent = function(){ |
Jamie
2015/01/30 23:25:09
Nit: Space after ()
Łukasz Anforowicz
2015/01/31 00:44:49
Done.
|
+ /** @type {string} */ |
+ this.type = ""; |
+ /** @type {number} */ |
+ this.modifiers = 0; |
+ /** @type {number} */ |
+ this.keyCode = 0; |
+ /** @type {string|undefined} */ |
+ this.characterText = undefined; |
+ /** @type {string} */ |
+ this.code = ""; |
+}; |
+ |
+/** |
+ * @param {PNaClEvent} event |
+ * @param {number|undefined} space |
+ * @return {string} |
+ */ |
+function JsonifyPnaclKeyboardInputEvent(event, space) { |
+ return "PNaCl KeyboardInputEvent = " + JSON.stringify( |
+ event, |
+ ['type', 'modifiers', 'keyCode', 'characterText', 'code'], |
+ space); |
+}; |
+ |
+/** |
+ * @param {ChordTracker} pnaclChordTracker |
+ * @param {Event} event |
+ * @return {void} |
+ */ |
+function HandlePNaclMessage(pnaclChordTracker, event) { |
+ /** @type {PNaClEvent} */ |
+ var pnaclEvent = event.data; |
Jamie
2015/01/30 23:25:09
Nit: Since this is effectively a cast (insofar as
Łukasz Anforowicz
2015/01/31 00:44:49
Done.
|
+ |
+ AppendToTextLog(JsonifyPnaclKeyboardInputEvent(pnaclEvent, undefined)); |
+ var title = JsonifyPnaclKeyboardInputEvent(pnaclEvent, 2); |
+ if (pnaclEvent.type == "KEYDOWN") { |
+ pnaclChordTracker.addKeyDownEvent(pnaclEvent.keyCode, title); |
+ } |
+ if (pnaclEvent.type == "KEYUP") { |
+ pnaclChordTracker.addKeyUpEvent(pnaclEvent.keyCode, title); |
+ } |
+ if (pnaclEvent.type == "CHAR") { |
+ pnaclChordTracker.addCharEvent(pnaclEvent.characterText, title); |
+ } |
+} |
+ |
+/** |
+ * @param {string} str |
+ * @return {void} |
+ */ |
+function AppendToTextLog(str) { |
+ var textLog = document.getElementById('text-log'); |
+ var div = document.createElement('div'); |
+ div.innerText = str; |
+ textLog.appendChild(div); |
+} |
+ |
function onLoad() { |
- var parentDiv = document.getElementById('key-log'); |
- var chordTracker = new ChordTracker(parentDiv); |
+ // Start listening to Javascript keyup/keydown events. |
+ var jsLog = document.getElementById('javascript-log'); |
+ var jsChordTracker = new ChordTracker(jsLog); |
Jamie
2015/01/30 23:25:09
I think two chord trackers is probably overkill. B
Łukasz Anforowicz
2015/01/31 00:44:49
I switched to using RequestFilteringInputEvents, b
Jamie
2015/01/31 01:01:56
I just tested with the Chromoting app and see the
|
document.body.addEventListener( |
- 'keydown', chordTracker.addKeyEvent.bind(chordTracker), false); |
+ 'keydown', |
+ function (event) { |
+ HandleJavascriptKeyDownEvent(jsChordTracker, event); |
+ }, |
+ false); |
document.body.addEventListener( |
- 'keyup', chordTracker.addKeyEvent.bind(chordTracker), false); |
+ 'keyup', |
+ function (event) { |
+ HandleJavascriptKeyUpEvent(jsChordTracker, event); |
+ }, |
+ false); |
+ |
+ // Start listening to PNaCl keyboard input events. |
+ var pnaclLog = document.getElementById('pnacl-log'); |
+ var pnaclChordTracker = new ChordTracker(pnaclLog); |
+ document.getElementById('pnacl-listener').addEventListener( |
+ 'message', |
+ function (message) { |
+ HandlePNaclMessage(pnaclChordTracker, message); |
+ }, |
+ true); |
+ |
+ // Start listening to generic, source-agnostic events. |
window.addEventListener( |
- 'blur', chordTracker.releaseAllKeys.bind(chordTracker), false); |
+ 'blur', |
+ function () { |
+ jsChordTracker.releaseAllKeys(); |
+ pnaclChordTracker.releaseAllKeys(); |
+ }, |
+ false); |
document.getElementById('clear-log').addEventListener( |
- 'click', function() { parentDiv.innerText = ''; }, false); |
+ 'click', |
+ function() { |
+ jsLog.innerText = ''; |
+ pnaclLog.innerText = ''; |
+ document.getElementById('text-log').innerText = ''; |
+ }, |
+ false); |
} |
window.addEventListener('load', onLoad, false); |