Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / renderer / resources / extensions / automation_custom_bindings.js
index 596032d..a23cdca 100644 (file)
@@ -12,23 +12,36 @@ var eventBindings = require('event_bindings');
 var Event = eventBindings.Event;
 var forEach = require('utils').forEach;
 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;
@@ -36,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);
@@ -75,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;
         }
@@ -90,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))
@@ -128,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();