|
7 | 7 | <script src="/resources/testdriver-vendor.js"></script>
|
8 | 8 |
|
9 | 9 | <button>button</button>
|
10 |
| -<dialog>hello world</dialog> |
| 10 | +<dialog> |
| 11 | + <button>button in dialog</button> |
| 12 | +</dialog> |
11 | 13 |
|
12 | 14 | <script>
|
13 | 15 | const dialog = document.querySelector('dialog');
|
14 | 16 | const button = document.querySelector('button');
|
| 17 | +const dialogbutton = document.querySelector('dialog > button'); |
15 | 18 |
|
16 | 19 | promise_test(async t => {
|
| 20 | + button.focus(); |
17 | 21 | dialog.showModal();
|
| 22 | + assert_equals(document.activeElement, dialogbutton, |
| 23 | + '<button> in <dialog> should be focused after opening.'); |
18 | 24 |
|
19 | 25 | let closeFired = false;
|
20 | 26 | let cancelFired = false;
|
21 | 27 | dialog.addEventListener('close', () => closeFired = true);
|
22 | 28 | dialog.addEventListener('cancel', () => cancelFired = true);
|
23 | 29 |
|
24 | 30 | dialog.removeAttribute('open');
|
| 31 | + assert_equals(document.activeElement, dialogbutton, |
| 32 | + '<button> in <dialog> should still be focused immediately after removing open.'); |
25 | 33 | await new Promise(resolve => t.step_timeout(resolve, 0));
|
26 | 34 | await new Promise(requestAnimationFrame);
|
27 | 35 |
|
| 36 | + assert_equals(document.activeElement, button, |
| 37 | + 'Previously focused element should be focused after waiting for a task.'); |
28 | 38 | assert_false(dialog.matches(':modal'),
|
29 | 39 | 'The dialog should not match :modal after closing.');
|
30 | 40 | assert_false(cancelFired,
|
|
40 | 50 | }, 'Removing the open attribute from an open modal dialog should run the closing algorithm.');
|
41 | 51 |
|
42 | 52 | promise_test(async t => {
|
| 53 | + button.focus(); |
43 | 54 | dialog.show();
|
| 55 | + assert_equals(document.activeElement, dialogbutton, |
| 56 | + '<button> in <dialog> should be focused after opening.'); |
44 | 57 |
|
45 | 58 | let closeFired = false;
|
46 | 59 | let cancelFired = false;
|
47 | 60 | dialog.addEventListener('close', () => closeFired = true);
|
48 | 61 | dialog.addEventListener('cancel', () => cancelFired = true);
|
49 | 62 |
|
50 | 63 | dialog.removeAttribute('open');
|
| 64 | + assert_equals(document.activeElement, dialogbutton, |
| 65 | + '<button> in <dialog> should still be focused immediately after removing open.'); |
51 | 66 | await new Promise(resolve => t.step_timeout(resolve, 0));
|
52 | 67 | await new Promise(requestAnimationFrame);
|
53 | 68 |
|
| 69 | + assert_equals(document.activeElement, button, |
| 70 | + 'Previously focused element should be focused after waiting for a task.'); |
54 | 71 | assert_false(cancelFired,
|
55 | 72 | 'The cancel event should not fire when removing the open attribute.');
|
56 | 73 | assert_true(closeFired,
|
|
0 commit comments