| 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..b637720a4c333de3b4afb089c10f9ded609b8c80 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');
|
|
|
| /**
|
| @@ -12,8 +14,8 @@ var utils = require('utils');
|
| var AutomationNodeImpl = function(owner) {
|
| this.owner = owner;
|
| this.child_ids = [];
|
| -
|
| this.attributes = {};
|
| + this.listeners = {};
|
| };
|
|
|
| AutomationNodeImpl.prototype = {
|
| @@ -52,8 +54,64 @@ AutomationNodeImpl.prototype = {
|
| return parent.children()[this.index_in_parent + 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',
|
| + {start_index: startIndex, end_index: 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(this.owner.processId,
|
| + this.owner.routingId,
|
| + this.wrapper.id,
|
| + actionType,
|
| + opt_args ? 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;
|
|
|