Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* Copyright (c) 2014 The Chromium Authors. All rights reserved. | 1 /* Copyright (c) 2014 The Chromium Authors. All rights reserved. |
| 2 * Use of this source code is governed by a BSD-style license that can be | 2 * Use of this source code is governed by a BSD-style license that can be |
| 3 * found in the LICENSE file. | 3 * found in the LICENSE file. |
| 4 */ | 4 */ |
| 5 | 5 |
| 6 /** | |
| 7 * @param {string} eventName | |
| 8 * @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
| |
| 9 * @return {string} | |
| 10 */ | |
| 11 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.
| |
| 12 return "JavaScript '" + eventName + "' event = " + JSON.stringify( | |
| 13 event, | |
| 14 ['type', 'alt', 'shift', 'control', 'meta', 'charCode', 'keyCode', | |
| 15 'keyIdentifier', 'repeat'], | |
| 16 space); | |
| 17 }; | |
| 18 | |
| 19 /** | |
| 20 * @param {ChordTracker} jsChordTracker | |
| 21 * @param {Event} event | |
| 22 * @return {void} | |
| 23 */ | |
| 24 function HandleJavascriptKeyDownEvent(jsChordTracker, event) { | |
| 25 AppendToTextLog(JsonifyJavascriptKeyEvent(event, 'keydown', undefined)); | |
| 26 jsChordTracker.addKeyDownEvent( | |
| 27 event.keyCode, JsonifyJavascriptKeyEvent(event, 'keydown', 2)); | |
| 28 } | |
| 29 | |
| 30 /** | |
| 31 * @param {ChordTracker} jsChordTracker | |
| 32 * @param {Event} event | |
| 33 * @return {void} | |
| 34 */ | |
| 35 function HandleJavascriptKeyUpEvent(jsChordTracker, event) { | |
| 36 AppendToTextLog(JsonifyJavascriptKeyEvent(event, 'keyup', undefined)); | |
| 37 jsChordTracker.addKeyUpEvent( | |
| 38 event.keyCode, JsonifyJavascriptKeyEvent(event, 'keyup', 2)); | |
| 39 } | |
| 40 | |
| 41 /** @constructor */ | |
| 42 var PNaClEvent = function(){ | |
|
Jamie
2015/01/30 23:25:09
Nit: Space after ()
Łukasz Anforowicz
2015/01/31 00:44:49
Done.
| |
| 43 /** @type {string} */ | |
| 44 this.type = ""; | |
| 45 /** @type {number} */ | |
| 46 this.modifiers = 0; | |
| 47 /** @type {number} */ | |
| 48 this.keyCode = 0; | |
| 49 /** @type {string|undefined} */ | |
| 50 this.characterText = undefined; | |
| 51 /** @type {string} */ | |
| 52 this.code = ""; | |
| 53 }; | |
| 54 | |
| 55 /** | |
| 56 * @param {PNaClEvent} event | |
| 57 * @param {number|undefined} space | |
| 58 * @return {string} | |
| 59 */ | |
| 60 function JsonifyPnaclKeyboardInputEvent(event, space) { | |
| 61 return "PNaCl KeyboardInputEvent = " + JSON.stringify( | |
| 62 event, | |
| 63 ['type', 'modifiers', 'keyCode', 'characterText', 'code'], | |
| 64 space); | |
| 65 }; | |
| 66 | |
| 67 /** | |
| 68 * @param {ChordTracker} pnaclChordTracker | |
| 69 * @param {Event} event | |
| 70 * @return {void} | |
| 71 */ | |
| 72 function HandlePNaclMessage(pnaclChordTracker, event) { | |
| 73 /** @type {PNaClEvent} */ | |
| 74 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.
| |
| 75 | |
| 76 AppendToTextLog(JsonifyPnaclKeyboardInputEvent(pnaclEvent, undefined)); | |
| 77 var title = JsonifyPnaclKeyboardInputEvent(pnaclEvent, 2); | |
| 78 if (pnaclEvent.type == "KEYDOWN") { | |
| 79 pnaclChordTracker.addKeyDownEvent(pnaclEvent.keyCode, title); | |
| 80 } | |
| 81 if (pnaclEvent.type == "KEYUP") { | |
| 82 pnaclChordTracker.addKeyUpEvent(pnaclEvent.keyCode, title); | |
| 83 } | |
| 84 if (pnaclEvent.type == "CHAR") { | |
| 85 pnaclChordTracker.addCharEvent(pnaclEvent.characterText, title); | |
| 86 } | |
| 87 } | |
| 88 | |
| 89 /** | |
| 90 * @param {string} str | |
| 91 * @return {void} | |
| 92 */ | |
| 93 function AppendToTextLog(str) { | |
| 94 var textLog = document.getElementById('text-log'); | |
| 95 var div = document.createElement('div'); | |
| 96 div.innerText = str; | |
| 97 textLog.appendChild(div); | |
| 98 } | |
| 99 | |
| 6 function onLoad() { | 100 function onLoad() { |
| 7 var parentDiv = document.getElementById('key-log'); | 101 // Start listening to Javascript keyup/keydown events. |
| 8 var chordTracker = new ChordTracker(parentDiv); | 102 var jsLog = document.getElementById('javascript-log'); |
| 103 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
| |
| 9 document.body.addEventListener( | 104 document.body.addEventListener( |
| 10 'keydown', chordTracker.addKeyEvent.bind(chordTracker), false); | 105 'keydown', |
| 106 function (event) { | |
| 107 HandleJavascriptKeyDownEvent(jsChordTracker, event); | |
| 108 }, | |
| 109 false); | |
| 11 document.body.addEventListener( | 110 document.body.addEventListener( |
| 12 'keyup', chordTracker.addKeyEvent.bind(chordTracker), false); | 111 'keyup', |
| 112 function (event) { | |
| 113 HandleJavascriptKeyUpEvent(jsChordTracker, event); | |
| 114 }, | |
| 115 false); | |
| 116 | |
| 117 // Start listening to PNaCl keyboard input events. | |
| 118 var pnaclLog = document.getElementById('pnacl-log'); | |
| 119 var pnaclChordTracker = new ChordTracker(pnaclLog); | |
| 120 document.getElementById('pnacl-listener').addEventListener( | |
| 121 'message', | |
| 122 function (message) { | |
| 123 HandlePNaclMessage(pnaclChordTracker, message); | |
| 124 }, | |
| 125 true); | |
| 126 | |
| 127 // Start listening to generic, source-agnostic events. | |
| 13 window.addEventListener( | 128 window.addEventListener( |
| 14 'blur', chordTracker.releaseAllKeys.bind(chordTracker), false); | 129 'blur', |
| 130 function () { | |
| 131 jsChordTracker.releaseAllKeys(); | |
| 132 pnaclChordTracker.releaseAllKeys(); | |
| 133 }, | |
| 134 false); | |
| 15 document.getElementById('clear-log').addEventListener( | 135 document.getElementById('clear-log').addEventListener( |
| 16 'click', function() { parentDiv.innerText = ''; }, false); | 136 'click', |
| 137 function() { | |
| 138 jsLog.innerText = ''; | |
| 139 pnaclLog.innerText = ''; | |
| 140 document.getElementById('text-log').innerText = ''; | |
| 141 }, | |
| 142 false); | |
| 17 } | 143 } |
| 18 | 144 |
| 19 window.addEventListener('load', onLoad, false); | 145 window.addEventListener('load', onLoad, false); |
| OLD | NEW |