Chromium Code Reviews| 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); |