Commit ec2785d5 authored by David Tseng's avatar David Tseng Committed by Commit Bot

Do not scope navigation within non-modal dialogs

Bug: b:141606892
Change-Id: Ia67acf9d6218f5da33649561da4fed8a60298081
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1845234
Commit-Queue: David Tseng <dtseng@chromium.org>
Reviewed-by: default avatarDominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#706143}
parent 741449bb
...@@ -385,13 +385,15 @@ AutomationPredicate.root = function(node) { ...@@ -385,13 +385,15 @@ AutomationPredicate.root = function(node) {
case Role.WINDOW: case Role.WINDOW:
return true; return true;
case Role.DIALOG: case Role.DIALOG:
if (node.root.role != Role.DESKTOP)
return !!node.modal;
// The below logic handles nested dialogs properly in the desktop tree // The below logic handles nested dialogs properly in the desktop tree
// like that found in a bubble view. // like that found in a bubble view.
return node.root.role != Role.DESKTOP || return !!node.parent && node.parent.role == Role.WINDOW &&
(!!node.parent && node.parent.role == Role.WINDOW && node.parent.children.every(function(child) {
node.parent.children.every(function(child) { return node.role == Role.WINDOW || node.role == Role.DIALOG;
return node.role == Role.WINDOW || node.role == Role.DIALOG; });
}));
case Role.TOOLBAR: case Role.TOOLBAR:
return node.root.role == Role.DESKTOP && return node.root.role == Role.DESKTOP &&
!(node.nextFocus || !node.previousFocus); !(node.nextFocus || !node.previousFocus);
......
...@@ -2103,3 +2103,19 @@ TEST_F('ChromeVoxBackgroundTest', 'TableWithAriaRowCol', function() { ...@@ -2103,3 +2103,19 @@ TEST_F('ChromeVoxBackgroundTest', 'TableWithAriaRowCol', function() {
.replay(); .replay();
}); });
}); });
TEST_F('ChromeVoxBackgroundTest', 'NonModalDialogHeadingJump', function() {
var mockFeedback = this.createMockFeedback();
this.runWithLoadedTree(function() {/*!
<h2>Heading outside dialog</h2>
<div role="dialog">
<h2>Heading inside dialog</h2>
</div>
*/}, function(root) {
mockFeedback.call(doCmd('nextHeading'))
.expectSpeech('Heading inside dialog')
.call(doCmd('previousHeading'))
.expectSpeech('Heading outside dialog')
.replay();
});
});
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment