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

Unified Diff: remoting/tools/javascript_key_tester/event_listeners.js

Issue 900983003: Clean-up key tester. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Reviewer 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 side-by-side diff with in-line comments
Download patch
Index: remoting/tools/javascript_key_tester/event_listeners.js
diff --git a/remoting/tools/javascript_key_tester/event_listeners.js b/remoting/tools/javascript_key_tester/event_listeners.js
new file mode 100644
index 0000000000000000000000000000000000000000..73c67e997cafea5a9a59bf75870949270f9c3448
--- /dev/null
+++ b/remoting/tools/javascript_key_tester/event_listeners.js
@@ -0,0 +1,153 @@
+/* Copyright 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.
+ */
+
+/** @constructor */
+var PNaClEvent = function() {
+ /** @type {string} */
+ this.type = "";
+ /** @type {number} */
+ this.modifiers = 0;
+ /** @type {number} */
+ this.keyCode = 0;
+ /** @type {string} */
+ this.characterText = '';
+ /** @type {string} */
+ this.code = '';
+};
+
+
+/**
+ * @param {HTMLElement} jsLog
+ * @param {HTMLElement} pnaclLog
+ * @param {HTMLElement} textLog
+ * @param {HTMLElement} pnaclPlugin
+ * @param {HTMLElement} pnaclListener
+ * @constructor
+ */
+var EventListeners = function(jsLog, pnaclLog, textLog,
+ pnaclPlugin, pnaclListener) {
+ this.pnaclPlugin_ = pnaclPlugin;
+ this.pnaclListener_ = pnaclListener;
+ this.textLog_ = textLog;
+
+ this.onKeyDownHandler_ = this.onKeyDown_.bind(this);
+ this.onKeyUpHandler_ = this.onKeyUp_.bind(this);
+ this.onMessageHandler_ = this.onMessage_.bind(this);
+ this.onBlurHandler_ = this.onBlur_.bind(this);
+
+ this.jsChordTracker_ = new ChordTracker(jsLog);
+ this.pnaclChordTracker_ = new ChordTracker(pnaclLog);
+
+ this.startTime_ = new Date();
+};
+
+/**
+ * Start listening for keyboard events.
+ */
+EventListeners.prototype.activate = function() {
+ document.body.addEventListener('keydown', this.onKeyDownHandler_, false);
+ document.body.addEventListener('keyup', this.onKeyUpHandler_, false);
+ this.pnaclListener_.addEventListener('message', this.onMessageHandler_, true);
+ this.pnaclPlugin_.addEventListener('blur', this.onBlurHandler_, false);
+ this.onBlur_();
+};
+
+/**
+ * Stop listening for keyboard events.
+ */
+EventListeners.prototype.deactivate = function() {
+ document.body.removeEventListener('keydown', this.onKeyDownHandler_, false);
+ document.body.removeEventListener('keyup', this.onKeyUpHandler_, false);
+ this.pnaclListener_.removeEventListener(
+ 'message', this.onMessageHandler_, true);
+ this.pnaclPlugin_.removeEventListener('blur', this.onBlurHandler_, false);
+};
+
+/**
+ * @param {Event} event
+ * @private
+ */
+EventListeners.prototype.onKeyDown_ = function(event) {
+ this.appendToTextLog_(this.jsonifyJavascriptKeyEvent_(event, 'keydown'));
+ this.jsChordTracker_.addKeyDownEvent(
+ event.keyCode, this.jsonifyJavascriptKeyEvent_(event, 'keydown', 2));
+};
+
+/**
+ * @param {Event} event
+ * @return {void}
+ */
+EventListeners.prototype.onKeyUp_ = function(event) {
+ this.appendToTextLog_(this.jsonifyJavascriptKeyEvent_(event, 'keyup'));
+ this.jsChordTracker_.addKeyUpEvent(
+ event.keyCode, this.jsonifyJavascriptKeyEvent_(event, 'keyup', 2));
+}
+
+/**
+ * @param {Event} event
+ * @return {void}
+ */
+EventListeners.prototype.onMessage_ = function (event) {
+ var pnaclEvent = /** @type {PNaClEvent} */ (event['data']);
+
+ this.appendToTextLog_(this.jsonifyPnaclKeyboardInputEvent_(pnaclEvent));
+ var title = this.jsonifyPnaclKeyboardInputEvent_(pnaclEvent, 2);
+ if (pnaclEvent.type == "KEYDOWN") {
+ this.pnaclChordTracker_.addKeyDownEvent(pnaclEvent.code, title);
+ }
+ if (pnaclEvent.type == "KEYUP") {
+ this.pnaclChordTracker_.addKeyUpEvent(pnaclEvent.code, title);
+ }
+ if (pnaclEvent.type == "CHAR") {
+ this.pnaclChordTracker_.addCharEvent(pnaclEvent.characterText, title);
+ }
+}
+
+/**
+ * @return {void}
+ */
+EventListeners.prototype.onBlur_ = function() {
+ this.pnaclPlugin_.focus();
+};
+
+/**
+ * @param {string} str
+ * @private
+ */
+EventListeners.prototype.appendToTextLog_ = function(str) {
+ var div = document.createElement('div');
+ div.innerText = (new Date() - this.startTime_) + ':' + str;
+ this.textLog_.appendChild(div);
+};
+
+/**
+ * @param {Event} event
+ * @param {string} eventName
+ * @param {number=} opt_space
+ * @return {string}
+ * @private
+ */
+EventListeners.prototype.jsonifyJavascriptKeyEvent_ =
+ function(event, eventName, opt_space) {
+ return "JavaScript '" + eventName + "' event = " + JSON.stringify(
+ event,
+ ['type', 'alt', 'shift', 'control', 'meta', 'charCode', 'keyCode',
+ 'keyIdentifier', 'repeat'],
+ opt_space);
+};
+
+/**
+ * @param {PNaClEvent} event
+ * @param {number=} opt_space
+ * @return {string}
+ * @private
+ */
+EventListeners.prototype.jsonifyPnaclKeyboardInputEvent_ =
+ function(event, opt_space) {
+ return "PNaCl KeyboardInputEvent = " + JSON.stringify(
+ event,
+ ['type', 'modifiers', 'keyCode', 'characterText', 'code'],
+ opt_space);
+};
« no previous file with comments | « remoting/tools/javascript_key_tester/chord_tracker.js ('k') | remoting/tools/javascript_key_tester/main.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698