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

Unified Diff: chrome/renderer/resources/extensions/automation/automation_node.js

Issue 203753002: Implement actions for Automation API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Disable test on Mac. Created 6 years, 9 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: chrome/renderer/resources/extensions/automation/automation_node.js
diff --git a/chrome/renderer/resources/extensions/automation/automation_node.js b/chrome/renderer/resources/extensions/automation/automation_node.js
index 19e4cb815f870e475db45e672f9f85481b2944dc..7ff36ced0dfd37ccd87f0241b6f7b609b0ab3745 100644
--- a/chrome/renderer/resources/extensions/automation/automation_node.js
+++ b/chrome/renderer/resources/extensions/automation/automation_node.js
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+var automationInternal =
+ require('binding').Binding.create('automationInternal').generate();
var utils = require('utils');
/**
@@ -11,49 +13,105 @@ var utils = require('utils');
*/
var AutomationNodeImpl = function(owner) {
this.owner = owner;
- this.child_ids = [];
-
+ this.childIDs = [];
this.attributes = {};
+ this.listeners = {};
};
AutomationNodeImpl.prototype = {
parent: function() {
- return this.owner.get(this.parent_id);
+ return this.owner.get(this.parentID);
},
firstChild: function() {
- var node = this.owner.get(this.child_ids[0]);
+ var node = this.owner.get(this.childIDs[0]);
return node;
},
lastChild: function() {
- var child_ids = this.child_ids;
- var node = this.owner.get(child_ids[child_ids.length - 1]);
+ var childIDs = this.childIDs;
+ var node = this.owner.get(childIDs[childIDs.length - 1]);
return node;
},
children: function() {
var children = [];
- for (var i = 0, child_id; child_id = this.child_ids[i]; i++)
- children.push(this.owner.get(child_id));
+ for (var i = 0, childID; childID = this.childIDs[i]; i++)
+ children.push(this.owner.get(childID));
return children;
},
previousSibling: function() {
var parent = this.parent();
- if (parent && this.index_in_parent > 0)
- return parent.children()[this.index_in_parent - 1];
+ if (parent && this.indexInParent > 0)
+ return parent.children()[this.indexInParent - 1];
return undefined;
},
nextSibling: function() {
var parent = this.parent();
- if (parent && this.index_in_parent < parent.children().length)
- return parent.children()[this.index_in_parent + 1];
+ if (parent && this.indexInParent < parent.children().length)
+ return parent.children()[this.indexInParent + 1];
return undefined;
},
-};
+ doDefault: function() {
+ this.performAction_('doDefault');
+ },
+
+ focus: function() {
+ this.performAction_('focus');
+ },
+
+ makeVisible: function() {
+ this.performAction_('makeVisible');
+ },
+
+ setSelection: function(startIndex, endIndex) {
+ this.performAction_('setSelection',
+ {startIndex: startIndex, endIndex: endIndex});
+ },
+
+ addEventListener: function(eventType, callback, capture) {
+ this.removeEventListener(eventType, callback);
+ if (!this.listeners[eventType])
+ this.listeners[eventType] = [];
+ this.listeners[eventType].push([callback, capture]);
+ },
+
+ // TODO(dtseng/aboxhall): Check this impl against spec.
+ removeEventListener: function(eventType, callback) {
+ if (this.listeners[eventType]) {
+ var listeners = this.listeners[eventType];
+ for (var i = 0; i < listeners.length; i++) {
+ if (callback === listeners[i][0])
+ listeners.splice(i, 1);
+ }
+ }
+ },
+
+ notifyEventListeners: function(eventType) {
+ var listeners = this.listeners[eventType];
+ if (!listeners)
+ return;
+ // TODO(dtseng/aboxhall): Implement capture/bubble.
+ for (var i = 0; i < listeners.length; i++)
+ listeners[i][0]();
+ },
+
+ performAction_: function(actionType, opt_args) {
+ // Not yet initialized.
+ if (!this.owner.processID ||
+ !this.owner.routingID ||
+ !this.wrapper.id)
+ return;
+ automationInternal.performAction({processID: this.owner.processID,
+ routingID: this.owner.routingID,
+ automationNodeID: this.wrapper.id,
+ actionType: actionType},
+ opt_args || {});
+ },
+};
var AutomationNode = utils.expose('AutomationNode',
AutomationNodeImpl,
@@ -62,5 +120,11 @@ var AutomationNode = utils.expose('AutomationNode',
'lastChild',
'children',
'previousSibling',
- 'nextSibling']);
+ 'nextSibling',
+ 'doDefault',
+ 'focus',
+ 'makeVisible',
+ 'setSelection',
+ 'addEventListener',
+ 'removeEventListener']);
exports.AutomationNode = AutomationNode;

Powered by Google App Engine
This is Rietveld 408576698