diff options
Diffstat (limited to 'testing/web-platform/tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest.html')
-rw-r--r-- | testing/web-platform/tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest.html | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest.html b/testing/web-platform/tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest.html new file mode 100644 index 0000000000..579aca7775 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/interactive-elements/the-dialog-element/inert-svg-hittest.html @@ -0,0 +1,68 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Hit-testing with SVG made inert by modal dialog</title> +<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/interaction.html#inert"> +<meta assert="assert" content="SVG made inert by modal dialog should be unreachable with hit-testing"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/resources/testdriver-actions.js"></script> + +<div id="wrapper"> + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500"> + <rect width="500" height="500" id="target" fill="red"> + </svg> +</div> + +<dialog id="dialog">Content behind the open modal dialog should not be clickable</dialog> + +<style> +dialog::backdrop { + display: none; +} +</style> + +<script> +const dialog = document.getElementById("dialog"); +const wrapper = document.getElementById("wrapper"); +const target = document.getElementById("target"); + +promise_test(async function() { + dialog.showModal(); + this.add_cleanup(() => dialog.close()); + + let reachedTarget = false; + target.addEventListener("mousedown", () => { + reachedTarget = true; + }, { once: true }); + + let wrapperRect = wrapper.getBoundingClientRect(); + await new test_driver.Actions() + .pointerMove(wrapperRect.x + 1, wrapperRect.y + 1, { origin: "viewport" }) + .pointerDown() + .send(); + + assert_false(target.matches(":active"), "target is not active"); + assert_false(target.matches(":hover"), "target is not hovered"); + assert_false(reachedTarget, "target didn't get event"); +}, "Hit-testing doesn't reach contents of an inert SVG"); + +promise_test(async function() { + assert_false(dialog.open, "dialog is closed"); + + let reachedTarget = false; + target.addEventListener("mousedown", () => { + reachedTarget = true; + }, { once: true }); + + await new test_driver.Actions() + .pointerMove(0, 0, { origin: wrapper }) + .pointerDown() + .send(); + + assert_true(target.matches(":active"), "target is active"); + assert_true(reachedTarget, "target got event"); +}, "Hit-testing can reach contents of a no longer inert SVG"); +</script> |