| Index: chrome/browser/resources/chromeos/chromevox/cvox2/background/background.js
|
| diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/background.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/background.js
|
| index 70d4c926b718e8164eef0ff5a4741d555616e643..c9e84ed3cdcb7b61527fd6c7ddea5cea161a4837 100644
|
| --- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/background.js
|
| +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/background.js
|
| @@ -483,19 +483,24 @@ Background.prototype = {
|
|
|
| var node = evt.target;
|
|
|
| +
|
| + // Discard focus events on embeddedObject nodes.
|
| + if (node.role == RoleType.embeddedObject)
|
| + return;
|
| +
|
| // It almost never makes sense to place focus directly on a rootWebArea.
|
| if (node.role == RoleType.rootWebArea) {
|
| + // Discard focus events for root web areas when focus was previously
|
| + // placed on a descendant.
|
| + if (this.currentRange_.start.node.root == node)
|
| + return;
|
| +
|
| + // Discard focused root nodes without focused state set.
|
| + if (!node.state.focused)
|
| + return;
|
| +
|
| // Try to find a focusable descendant.
|
| - node = AutomationUtil.findNodePost(node,
|
| - Dir.FORWARD,
|
| - AutomationPredicate.focused) || node;
|
| -
|
| - // Fall back to the first leaf node in the document.
|
| - if (node.role == RoleType.rootWebArea) {
|
| - node = AutomationUtil.findNodePost(node,
|
| - Dir.FORWARD,
|
| - AutomationPredicate.leaf);
|
| - }
|
| + node = node.find({state: {focused: true}}) || node;
|
| }
|
|
|
| if (evt.target.role == RoleType.textField)
|
| @@ -558,6 +563,9 @@ Background.prototype = {
|
| if (!evt.target.state.focused)
|
| return;
|
|
|
| + if (evt.target.role != RoleType.textField)
|
| + return;
|
| +
|
| if (!this.currentRange_) {
|
| this.onEventDefault(evt);
|
| this.currentRange_ = cursors.Range.fromNode(evt.target);
|
|
|