Index: chrome/renderer/resources/extensions/automation_custom_bindings.js |
diff --git a/chrome/renderer/resources/extensions/automation_custom_bindings.js b/chrome/renderer/resources/extensions/automation_custom_bindings.js |
index 7a7878dcd1de51510d7e756abb7627c28ff3ec52..a23cdca5b4d95d63abf88370c75e6eccb5ddb0fb 100644 |
--- a/chrome/renderer/resources/extensions/automation_custom_bindings.js |
+++ b/chrome/renderer/resources/extensions/automation_custom_bindings.js |
@@ -15,21 +15,33 @@ var lastError = require('lastError'); |
var logging = requireNative('logging'); |
var schema = requireNative('automationInternal').GetSchemaAdditions(); |
+/** |
+ * A namespace to export utility functions to other files in automation. |
+ */ |
+window.automationUtil = function() {}; |
+ |
// TODO(aboxhall): Look into using WeakMap |
var idToAutomationRootNode = {}; |
var idToCallback = {}; |
-// TODO(dtseng): Move out to automation/automation_util.js or as a static member |
-// of AutomationRootNode to keep this file clean. |
-/* |
- * Creates an id associated with a particular AutomationRootNode based upon a |
- * renderer/renderer host pair's process and routing id. |
- */ |
-var createAutomationRootNodeID = function(pid, rid) { |
- return pid + '_' + rid; |
-}; |
+var DESKTOP_TREE_ID = 0; |
-var DESKTOP_TREE_ID = createAutomationRootNodeID(0, 0); |
+automationUtil.storeTreeCallback = function(id, callback) { |
+ if (!callback) |
+ return; |
+ |
+ var targetTree = idToAutomationRootNode[id]; |
+ if (!targetTree) { |
+ // If we haven't cached the tree, hold the callback until the tree is |
+ // populated by the initial onAccessibilityEvent call. |
+ if (id in idToCallback) |
+ idToCallback[id].push(callback); |
+ else |
+ idToCallback[id] = [callback]; |
+ } else { |
+ callback(targetTree); |
+ } |
+}; |
automation.registerCustomHook(function(bindingsAPI) { |
var apiFunctions = bindingsAPI.apiFunctions; |
@@ -37,35 +49,25 @@ automation.registerCustomHook(function(bindingsAPI) { |
// TODO(aboxhall, dtseng): Make this return the speced AutomationRootNode obj. |
apiFunctions.setHandleRequest('getTree', function getTree(tabId, callback) { |
// enableTab() ensures the renderer for the active or specified tab has |
- // accessibility enabled, and fetches its process and routing ids to use as |
- // a key in the idToAutomationRootNode map. The callback to enableTab is is |
- // bound to the callback passed in to getTree(), so that once the tree is |
- // available (either due to having been cached earlier, or after an |
- // accessibility event occurs which causes the tree to be populated), the |
+ // accessibility enabled, and fetches its ax tree id to use as |
+ // a key in the idToAutomationRootNode map. The callback to |
+ // enableTab is bound to the callback passed in to getTree(), so that once |
+ // the tree is available (either due to having been cached earlier, or after |
+ // an accessibility event occurs which causes the tree to be populated), the |
// callback can be called. |
- automationInternal.enableTab(tabId, function onEnable(pid, rid) { |
+ automationInternal.enableTab(tabId, function onEnable(id) { |
if (lastError.hasError(chrome)) { |
callback(); |
return; |
} |
- var id = createAutomationRootNodeID(pid, rid); |
- var targetTree = idToAutomationRootNode[id]; |
- if (!targetTree) { |
- // If we haven't cached the tree, hold the callback until the tree is |
- // populated by the initial onAccessibilityEvent call. |
- if (id in idToCallback) |
- idToCallback[id].push(callback); |
- else |
- idToCallback[id] = [callback]; |
- } else { |
- callback(targetTree); |
- } |
+ automationUtil.storeTreeCallback(id, callback); |
}); |
}); |
var desktopTree = null; |
apiFunctions.setHandleRequest('getDesktop', function(callback) { |
- desktopTree = idToAutomationRootNode[DESKTOP_TREE_ID]; |
+ desktopTree = |
+ idToAutomationRootNode[DESKTOP_TREE_ID]; |
if (!desktopTree) { |
if (DESKTOP_TREE_ID in idToCallback) |
idToCallback[DESKTOP_TREE_ID].push(callback); |
@@ -76,7 +78,8 @@ automation.registerCustomHook(function(bindingsAPI) { |
// scope. |
automationInternal.enableDesktop(function() { |
if (lastError.hasError(chrome)) { |
- delete idToAutomationRootNode[DESKTOP_TREE_ID]; |
+ delete idToAutomationRootNode[ |
+ DESKTOP_TREE_ID]; |
callback(); |
return; |
} |
@@ -91,15 +94,13 @@ automation.registerCustomHook(function(bindingsAPI) { |
// essentially a proxy for the AccessibilityHostMsg_Events IPC from the |
// renderer. |
automationInternal.onAccessibilityEvent.addListener(function(data) { |
- var pid = data.processID; |
- var rid = data.routingID; |
- var id = createAutomationRootNodeID(pid, rid); |
+ var id = data.treeID; |
var targetTree = idToAutomationRootNode[id]; |
if (!targetTree) { |
// If this is the first time we've gotten data for this tree, it will |
// contain all of the tree's data, so create a new tree which will be |
// bootstrapped from |data|. |
- targetTree = new AutomationRootNode(pid, rid); |
+ targetTree = new AutomationRootNode(id); |
idToAutomationRootNode[id] = targetTree; |
} |
if (!privates(targetTree).impl.onAccessibilityEvent(data)) |
@@ -129,8 +130,7 @@ automationInternal.onAccessibilityEvent.addListener(function(data) { |
delete idToCallback[id]; |
}); |
-automationInternal.onAccessibilityTreeDestroyed.addListener(function(pid, rid) { |
- var id = createAutomationRootNodeID(pid, rid); |
+automationInternal.onAccessibilityTreeDestroyed.addListener(function(id) { |
var targetTree = idToAutomationRootNode[id]; |
if (targetTree) { |
privates(targetTree).impl.destroy(); |