Chromium Code Reviews| 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..fcf4afb02e1881321c5bb111552d3bf6ba22245e 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 ? opt_args : {}); |
|
not at google - send to devlin
2014/04/03 18:57:13
indent += 1
you could also write "opt_args || {}"
David Tseng
2014/04/03 23:05:19
Done (made into opt_args || {}).
The indent is fi
|
| + }, |
| +}; |
| 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; |