Index: chrome/browser/resources/chromeos/chromevox2/cvox2/background/background.js |
diff --git a/chrome/browser/resources/chromeos/chromevox2/cvox2/background/background.js b/chrome/browser/resources/chromeos/chromevox2/cvox2/background/background.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..dcd93fbbd7323d1252a0189f7752b44bb2b6d013 |
--- /dev/null |
+++ b/chrome/browser/resources/chromeos/chromevox2/cvox2/background/background.js |
@@ -0,0 +1,93 @@ |
+// Copyright 2014 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. |
+ |
+/** |
+ * @fileoverview The entry point for all ChromeVox2 related code for the |
+ * background page. |
+ */ |
+ |
+/** ChromeVox2 namespace */ |
+var cvox2 = function() {}; |
+ |
+/** Namespace for global objects in the background page. */ |
+cvox2.global = function() {}; |
+ |
+/** Classic Chrome accessibility API. */ |
+cvox2.global.accessibility = |
+ chrome.accessibilityPrivate || chrome.experimental.accessibility; |
+ |
+/** |
+ * ChromeVox2 background page. |
+ */ |
+cvox2.Background = function() { |
+ // Only needed with unmerged ChromeVox classic loaded before. |
+ cvox2.global.accessibility.setAccessibilityEnabled(false); |
+ chrome.automation.getDesktop(this.onGotDesktop.bind(this)); |
+}; |
+ |
+cvox2.Background.prototype = { |
+ /** |
+ * ID of the port used to communicate between content script and background |
+ * page. |
+ * @const {string} |
+ */ |
+ PORT_ID: 'chromevox2', |
+ |
+ /** |
+ * Waits until a desktop automation tree becomes available. |
+ * Thereafter, registers a simple exploration mode for the desktop tree. |
+ * @param {AutomationTree} tree The desktop automation tree. |
+ */ |
+ onGotDesktop: function(tree) { |
+ if (!tree.root) { |
+ window.setTimeout(this.onGotDesktop, 500); |
+ return; |
+ } |
+ chrome.extension.onConnect.addListener(function(port) { |
+ if (port.name != this.PORT_ID) |
+ return; |
+ var cur = tree.root; |
+ port.onMessage.addListener(function(message) { |
+ switch (message.keydown) { |
+ case 37: |
+ cur = cur.previousSibling() || cur; |
+ break; |
+ case 38: |
+ cur = cur.parent() || cur; |
+ break; |
+ case 39: |
+ cur = cur.nextSibling() || cur; |
+ break; |
+ case 40: |
+ cur = cur.firstChild() || cur; |
+ break; |
+ } |
+ var index = 1; |
+ if (cur.parent()) |
+ index = cur.parent().children().indexOf(cur) + 1; |
+ var name = ''; |
+ if (cur.attributes && cur.attributes['ax_attr_name']) |
+ name = cur.attributes['ax_attr_name']; |
+ var utterance = index + ' ' + name + cur.role; |
+ chrome.tts.speak(String(utterance), {lang: 'en-US'}); |
+ }); |
+ }.bind(this)); |
+ |
+ // Register all automation event listeners. |
+ tree.root.addEventListener('focus', this.onDesktopEvent.bind(this), true); |
+ }, |
+ |
+ /** |
+ * A generic handler for all desktop automation events. |
+ * @param {AutomationEvent} evt The event. |
+ */ |
+ onDesktopEvent: function(evt) { |
+ var output = evt.target.attributes.name + ' ' + evt.target.role; |
+ cvox.ChromeVox.tts.speak(output); |
+ cvox.ChromeVox.braille.write(cvox.NavBraille.fromText(output)); |
+ } |
+}; |
+ |
+/** @type {cvox2.Background} */ |
+cvox2.global.backgroundObj = new cvox2.Background(); |