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 |
index 6d1c6979367dd51b475362b974c967a55d40f8ee..f9eb112c87d4f8187eb8d32b1f18693a68f86f3d 100644 |
--- a/chrome/browser/resources/chromeos/chromevox2/cvox2/background/background.js |
+++ b/chrome/browser/resources/chromeos/chromevox2/cvox2/background/background.js |
@@ -20,7 +20,16 @@ cvox2.global.accessibility = |
cvox2.Background = function() { |
// Only needed with unmerged ChromeVox classic loaded before. |
cvox2.global.accessibility.setAccessibilityEnabled(false); |
- chrome.automation.getDesktop(this.onGotDesktop.bind(this)); |
+ |
+ // Register listeners for ... |
Peter Lundblad
2014/06/19 20:54:10
How would you feel about breaking the registration
David Tseng
2014/06/19 22:30:38
I think there actually should only be three (deskt
|
+ // Desktop. |
+ chrome.automation.getDesktop(this.onGotTree.bind(this)); |
+ |
+// Tabs. |
Peter Lundblad
2014/06/19 20:54:10
nit: indentation.
David Tseng
2014/06/19 22:30:37
Done.
|
+ chrome.tabs.onUpdated.addListener(this.onTabUpdated.bind(this)); |
+ |
+ // Keyboard events (currently Messages from content script). |
+ chrome.extension.onConnect.addListener(this.onConnect.bind(this)); |
}; |
cvox2.Background.prototype = { |
@@ -32,54 +41,57 @@ cvox2.Background.prototype = { |
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. |
+ * Handles chrome.extension.onConnect. |
+ * @param {Object} port The port. |
*/ |
- onGotDesktop: function(tree) { |
- if (!tree.root) { |
- window.setTimeout(this.onGotDesktop, 500); |
+ onConnect: function(port) { |
+ if (port.name != this.PORT_ID) |
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)); |
+ port.onMessage.addListener(this.onMessage.bind(this)); |
+ }, |
+ |
+ /** |
+ * Dispatches messages to specific handlers. |
+ * @param {Object} message The message. |
+ */ |
+ onMessage: function(message) { |
+ if (message.keyDown) |
+ this.onKeyDown(message); |
+ }, |
+ |
+ /** |
+ * Handles key down messages from the content script. |
+ * @param {Object} message The key down message. |
+ */ |
+ onKeyDown: function(message) { |
+ // TODO(dtseng): Implement. |
+ }, |
+ /** |
+ * Handles chrome.tabs.onUpdate. |
+ * @param {number} tabId The tab id. |
+ * @param {Object} changeInfo Information about the updated tab. |
Peter Lundblad
2014/06/19 20:54:10
Is there a better type for this, or should we have
David Tseng
2014/06/19 22:30:37
Check out
chrome/common/extensions/api/tabs.json
|
+ */ |
+ onTabUpdated: function(tabId, changeInfo) { |
+ chrome.automation.getTree(this.onGotTree.bind(this)); |
+ }, |
+ |
+ /** |
+ * Handles all setup once a new automation tree appears. |
+ * @param {AutomationTree} tree The new automation tree. |
+ */ |
+ onGotTree: function(root) { |
// Register all automation event listeners. |
- tree.root.addEventListener('focus', this.onDesktopEvent.bind(this), true); |
+ root.addEventListener(chrome.automation.EventType.focus, |
+ this.onAutomationEvent.bind(this), |
+ true); |
}, |
/** |
* A generic handler for all desktop automation events. |
* @param {AutomationEvent} evt The event. |
*/ |
- onDesktopEvent: function(evt) { |
+ onAutomationEvent: function(evt) { |
var output = evt.target.attributes.name + ' ' + evt.target.role; |
cvox.ChromeVox.tts.speak(output); |
cvox.ChromeVox.braille.write(cvox.NavBraille.fromText(output)); |