| Index: chrome/browser/resources/chromeos/chromevox/cvox2/background/i_search.js
|
| diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/i_search.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/i_search.js
|
| index 74e9871a8bca4cbabf95e44f0fa93a2c8643bbb4..070ba0d68729ab99641e8a23ce740c2def35343a 100644
|
| --- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/i_search.js
|
| +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/i_search.js
|
| @@ -45,15 +45,18 @@ ISearchHandler.prototype = {
|
|
|
| /**
|
| * Controls an incremental search.
|
| - * @param {!AutomationNode} initialNode
|
| + * @param {!cursors.Cursor} cursor
|
| * @constructor
|
| */
|
| -ISearch = function(initialNode) {
|
| +ISearch = function(cursor) {
|
| + if (!cursor.node)
|
| + throw 'Incremental search started from invalid range.';
|
| +
|
| var leaf = AutomationUtil.findNodePre(
|
| - initialNode, Dir.FORWARD, AutomationPredicate.leaf) || initialNode;
|
| + cursor.node, Dir.FORWARD, AutomationPredicate.leaf) || cursor.node;
|
|
|
| - /** @type {!AutomationNode} @private */
|
| - this.node_ = leaf;
|
| + /** @type {!cursors.Cursor} */
|
| + this.cursor = cursors.Cursor.fromNode(leaf);
|
|
|
| /**
|
| * This tracks the id of a search that is in progress.
|
| @@ -90,19 +93,19 @@ ISearch.prototype = {
|
| cur =
|
| cur.move(cursors.Unit.NODE, cursors.Movement.DIRECTIONAL, dir);
|
| if (prev.equals(cur)) {
|
| - this.handler_.onSearchReachedBoundary(this.node_);
|
| + this.handler_.onSearchReachedBoundary(this.cursor.node);
|
| return;
|
| }
|
|
|
| if (cur.getText().toLocaleLowerCase().indexOf(searchStr) != -1) {
|
| - this.node_ = cur.node;
|
| - this.handler_.onSearchResultChanged(this.node_);
|
| + this.cursor = cur;
|
| + this.handler_.onSearchResultChanged(this.cursor.node);
|
| return;
|
| }
|
| if (this.pendingSearchId_ == currentSearchId)
|
| window.setTimeout(move.bind(this, cur.node), 0);
|
| };
|
| - window.setTimeout(move.bind(this, this.node_), 0);
|
| + window.setTimeout(move.bind(this, this.cursor.node), 0);
|
| }
|
| };
|
|
|
| @@ -115,7 +118,7 @@ ISearchUI = function(input) {
|
| /** @type {ChromeVoxState} @private */
|
| this.background_ =
|
| chrome.extension.getBackgroundPage()['ChromeVoxState']['instance'];
|
| - this.iSearch_ = new ISearch(this.background_.currentRange.start.node);
|
| + this.iSearch_ = new ISearch(this.background_.currentRange.start);
|
| this.input_ = input;
|
| this.dir_ = Dir.FORWARD;
|
| this.iSearch_.handler = this;
|
| @@ -131,11 +134,16 @@ ISearchUI = function(input) {
|
| * @param {Element} input
|
| * @return {ISearchUI}
|
| */
|
| -ISearchUI.get = function(input) {
|
| +ISearchUI.init = function(input) {
|
| if (ISearchUI.instance_)
|
| ISearchUI.instance_.destroy();
|
| +
|
| + if (!input)
|
| + return null;
|
| +
|
| ISearchUI.instance_ = new ISearchUI(input);
|
| input.focus();
|
| + input.select();
|
| return ISearchUI.instance_;
|
| };
|
|
|
| @@ -159,6 +167,14 @@ ISearchUI.prototype = {
|
| return false;
|
| case 'Enter':
|
| this.pendingSearchId_ = 0;
|
| + Panel.setPendingCallback(function() {
|
| + var node = this.iSearch_.cursor.node;
|
| + if (!node)
|
| + return;
|
| + chrome.extension.getBackgroundPage().ChromeVoxState.instance[
|
| + 'navigateToRange'](
|
| + cursors.Range.fromNode(node));
|
| + }.bind(this));
|
| Panel.closeMenusAndRestoreFocus();
|
| return false;
|
| default:
|
|
|