diff --git a/html/semantics/interactive-elements/the-dialog-element/dialog-closedby.tentative.html b/html/semantics/interactive-elements/the-dialog-element/dialog-closedby.tentative.html index 046ee324a8a266..8b365073b9c2b2 100644 --- a/html/semantics/interactive-elements/the-dialog-element/dialog-closedby.tentative.html +++ b/html/semantics/interactive-elements/the-dialog-element/dialog-closedby.tentative.html @@ -15,14 +15,14 @@ <dialog closedby="closerequest" data-behavior="closerequest"></dialog> <dialog closedby="none" data-behavior="none"></dialog> -<dialog closedby data-behavior="closerequest"></dialog> -<dialog closedby="invalid" data-behavior="closerequest"></dialog> -<dialog data-behavior="closerequest"></dialog> - <dialog closedby="AnY" data-behavior="any"></dialog> <dialog closedby="ClOsErEqUeSt" data-behavior="closerequest"></dialog> <dialog closedby="NoNe" data-behavior="none"></dialog> +<dialog closedby="invalid" data-behavior="auto"></dialog> +<dialog closedby data-behavior="auto"></dialog> +<dialog data-behavior="auto"></dialog> + <script> function openDialog(dialog,modal) { assert_false(dialog.open); @@ -41,6 +41,7 @@ t.add_cleanup(() => dialog.close()); // Try hitting ESC openDialog(dialog,modal); + const closedByReflectionWhileOpen = dialog.closedBy; const ESC = '\uE00C'; await new test_driver.send_keys(document.documentElement,ESC); const respondsToEsc = !dialog.open; @@ -51,6 +52,8 @@ const respondsToLightDismiss = !dialog.open; dialog.close(); // See if expectations match + let expectedReflectionWhileOpen = dialog.dataset.behavior; + let expectedReflectionWhileClosed = dialog.dataset.behavior; switch (dialog.dataset.behavior) { case 'any': assert_true(respondsToEsc,'Dialog should respond to ESC'); @@ -64,11 +67,24 @@ assert_false(respondsToEsc,'Dialog should NOT respond to ESC'); assert_false(respondsToLightDismiss,'Dialog should NOT respond to light dismiss'); break; + case 'auto': + if (modal) { + assert_true(respondsToEsc,'Modal dialog in auto state should respond to ESC'); + assert_false(respondsToLightDismiss,'Modal dialog in auto state should NOT respond to light dismiss'); + expectedReflectionWhileOpen = 'closerequest'; + } else { + assert_false(respondsToEsc,'Non-modal dialog in auto state should NOT respond to ESC'); + assert_false(respondsToLightDismiss,'Non-modal dialog in auto state should NOT respond to light dismiss'); + expectedReflectionWhileOpen = 'none'; + } + expectedReflectionWhileClosed = 'none'; + break; default: assert_notreached('Invalid expectation'); } // Check reflection - assert_equals(dialog.closedBy,dialog.dataset.behavior,'Reflection should be limited to known values'); + assert_equals(closedByReflectionWhileOpen,expectedReflectionWhileOpen,'Reflection should be limited to known values (open)'); + assert_equals(dialog.closedBy,expectedReflectionWhileClosed,'Reflection should be limited to known values (closed)'); }, `closedby=${dialog.getAttribute('closedby')}, ${modal ? 'Modal' : 'Non-modal'}`); } } diff --git a/html/semantics/interactive-elements/the-dialog-element/non-modal-canceling.html b/html/semantics/interactive-elements/the-dialog-element/non-modal-canceling.html new file mode 100644 index 00000000000000..0cab2d9626e860 --- /dev/null +++ b/html/semantics/interactive-elements/the-dialog-element/non-modal-canceling.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<link rel=author href="mailto:masonf@chromium.org"> +<link rel=help href="https://html.spec.whatwg.org/multipage/interactive-elements.html#the-dialog-element"> +<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="/close-watcher/resources/helpers.js"></script> + +<dialog>Dialog</dialog> + +<script> +promise_test(async () => { + const dialog = document.querySelector('dialog'); + assert_false(dialog.open); + dialog.show(); + assert_true(dialog.open); + await sendEscKey(); + assert_true(dialog.open,'Escape does not close a non-modal dialog'); + dialog.close(); + dialog.showModal(); + assert_true(dialog.open); + await sendEscKey(); + assert_false(dialog.open,'Escape does close a modal dialog'); +},'Non-modal dialogs should not be cancelable via ESC'); +</script>