Skip to content

Commit 7f670ab

Browse files
josepharharmoz-wptsync-bot
authored andcommitted
Bug 1940129 [wpt PR 49929] - Make dialog focus async when removing open attribute, a=testonly
Automatic update from web-platform-tests Make dialog focus async when removing open attribute When the dialog's open attribute is removed which closes the dialog, we should make the focus async in order to prevent more script from running inside attribute removal. Context: whatwg/html#10124 (comment) Bug: 341935362 Change-Id: I1b76f003e04b802b1868b427a0faddf5f19a3c5e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6085725 Reviewed-by: Di Zhang <[email protected]> Commit-Queue: Joey Arhar <[email protected]> Cr-Commit-Position: refs/heads/main@{#1402551} -- wpt-commits: 58fd4f845204b88a3ae42b72b613a66e84cbb9f8 wpt-pr: 49929
1 parent 2e4bb04 commit 7f670ab

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

testing/web-platform/tests/html/semantics/interactive-elements/the-dialog-element/dialog-close-via-attribute.tentative.html

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,34 @@
77
<script src="/resources/testdriver-vendor.js"></script>
88

99
<button>button</button>
10-
<dialog>hello world</dialog>
10+
<dialog>
11+
<button>button in dialog</button>
12+
</dialog>
1113

1214
<script>
1315
const dialog = document.querySelector('dialog');
1416
const button = document.querySelector('button');
17+
const dialogbutton = document.querySelector('dialog > button');
1518

1619
promise_test(async t => {
20+
button.focus();
1721
dialog.showModal();
22+
assert_equals(document.activeElement, dialogbutton,
23+
'<button> in <dialog> should be focused after opening.');
1824

1925
let closeFired = false;
2026
let cancelFired = false;
2127
dialog.addEventListener('close', () => closeFired = true);
2228
dialog.addEventListener('cancel', () => cancelFired = true);
2329

2430
dialog.removeAttribute('open');
31+
assert_equals(document.activeElement, dialogbutton,
32+
'<button> in <dialog> should still be focused immediately after removing open.');
2533
await new Promise(resolve => t.step_timeout(resolve, 0));
2634
await new Promise(requestAnimationFrame);
2735

36+
assert_equals(document.activeElement, button,
37+
'Previously focused element should be focused after waiting for a task.');
2838
assert_false(dialog.matches(':modal'),
2939
'The dialog should not match :modal after closing.');
3040
assert_false(cancelFired,
@@ -40,17 +50,24 @@
4050
}, 'Removing the open attribute from an open modal dialog should run the closing algorithm.');
4151

4252
promise_test(async t => {
53+
button.focus();
4354
dialog.show();
55+
assert_equals(document.activeElement, dialogbutton,
56+
'<button> in <dialog> should be focused after opening.');
4457

4558
let closeFired = false;
4659
let cancelFired = false;
4760
dialog.addEventListener('close', () => closeFired = true);
4861
dialog.addEventListener('cancel', () => cancelFired = true);
4962

5063
dialog.removeAttribute('open');
64+
assert_equals(document.activeElement, dialogbutton,
65+
'<button> in <dialog> should still be focused immediately after removing open.');
5166
await new Promise(resolve => t.step_timeout(resolve, 0));
5267
await new Promise(requestAnimationFrame);
5368

69+
assert_equals(document.activeElement, button,
70+
'Previously focused element should be focused after waiting for a task.');
5471
assert_false(cancelFired,
5572
'The cancel event should not fire when removing the open attribute.');
5673
assert_true(closeFired,

0 commit comments

Comments
 (0)