Automatic update from web-platform-tests Remove requestIdleCallback from a dialog test (#59279) As far as I can tell, it just wants to make sure we've had time to process the close before then calling it again: we don't need to wait for as long as requestIdleCallback would. -- wpt-commits: bc3f573143039309b30f6bd715d124ea701ecf53 wpt-pr: 59279
75 lines
2.8 KiB
HTML
75 lines
2.8 KiB
HTML
<!doctype html>
|
|
<meta charset="utf-8">
|
|
<meta name="timeout" content="long">
|
|
<link rel=help href="https://html.spec.whatwg.org/multipage/interactive-elements.html#dialog-light-dismiss">
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="/resources/testdriver.js"></script>
|
|
<script src="/resources/testdriver-actions.js"></script>
|
|
<script src="/resources/testdriver-vendor.js"></script>
|
|
<script src="../../popovers/resources/popover-utils.js"></script>
|
|
|
|
<dialog id=test1 open closedby="any"></dialog>
|
|
|
|
<script>
|
|
const ESC = '\uE00C';
|
|
promise_test(async (t) => {
|
|
const dialog = document.querySelector('dialog#test1');
|
|
assert_true(dialog.open);
|
|
assert_true(dialog.matches('[open]'));
|
|
await new test_driver.send_keys(document.documentElement,ESC);
|
|
assert_false(dialog.open);
|
|
assert_false(dialog.matches('[open]'));
|
|
dialog.showModal();
|
|
assert_true(dialog.open);
|
|
assert_true(dialog.matches('[open]'));
|
|
await new test_driver.send_keys(document.documentElement,ESC);
|
|
assert_false(dialog.open);
|
|
assert_false(dialog.matches('[open]'));
|
|
}, `Dialogs that start open and have closedby should still function`);
|
|
</script>
|
|
|
|
<dl>
|
|
<dt contenteditable></dt>
|
|
<dialog id=test2></dialog>
|
|
</dl>
|
|
|
|
<script>
|
|
promise_test(async (t) => {
|
|
// This test case is pulled from `dialog-closewatcher-crash.html`. It is
|
|
// constructed such that this happens:
|
|
// 1. close() is called.
|
|
// 2. the last step of close() is to restore focus to the previously-focused
|
|
// element.
|
|
// 3. Changing focus triggers the `focusin` event, which calls `showModal()`.
|
|
// 4. In showModal(), the dialog is again made modal, re-constructing the
|
|
// close watcher and re-setting the `open` attribute.
|
|
// 5. The call to close() ends.
|
|
// After all of this, if things are working, the ESC key should still cause
|
|
// the dialog to be closed.
|
|
const dialog = document.querySelector('dialog#test2');
|
|
const controller = new AbortController();
|
|
document.querySelector('dt').focus();
|
|
document.querySelector('dl').addEventListener("focusin", () => {
|
|
dialog.showModal();
|
|
},{signal:controller.signal});
|
|
dialog.showModal();
|
|
// This will trigger the focus-the-previous-element behavior, which will fire
|
|
// the `focusin` event.
|
|
dialog.close();
|
|
await new Promise(resolve => {
|
|
requestAnimationFrame(() => {
|
|
dialog.close();
|
|
resolve();
|
|
});
|
|
});
|
|
assert_true(dialog.open);
|
|
assert_true(dialog.matches('[open]'));
|
|
// Stop re-running showModal(), so we can check that the dialog closes with ESC:
|
|
controller.abort();
|
|
await test_driver.send_keys(document.documentElement,ESC);
|
|
assert_false(dialog.open,'ESC should still work');
|
|
assert_false(dialog.matches('[open]'));
|
|
}, `Opening and closing a dialog during the dialog focus fixup should still leave closedby functional`);
|
|
</script>
|