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

Side by Side Diff: remoting/tools/javascript_key_tester/main.js

Issue 884703006: Handling PNaCl KeyboardInputEvent(s) in the key tester app. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed Jamie's design feedback. Created 5 years, 10 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 unified diff | Download patch
OLDNEW
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);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698