<!
DOCTYPE html>
<
meta charset=
"utf-8">
<
title>Hit-testing with inert SVG</
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 inside element with inert attribute 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">
<
div inert id=
"svg-container">
<svg xmlns=
"http://www.w3.org/2000/svg" viewBox=
"0 0 500 500">
<rect width=
"500" height=
"500" id=
"target" fill=
"red">
</svg>
</
div>
</
div>
<
script>
const wrapper = document.getElementById(
"wrapper");
const target = document.getElementById(
"target");
promise_test(async function() {
let reachedTarget = false;
target.addEventListener(
"mousedown", () => {
reachedTarget = true;
}, { once: true });
let reachedWrapper = false;
wrapper.addEventListener(
"mousedown", () => {
reachedWrapper = true;
}, { once: true });
await new test_driver.Actions()
.pointerMove(0, 0, { origin: wrapper })
.pointerDown()
.send();
this.add_cleanup(() => test_driver.click(document.
body));
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");
assert_true(wrapper.matches(
":hover"),
"wrapper is hovered");
assert_true(reachedWrapper,
"wrapper got event");
},
"Hit-testing doesn't reach contents of an inert SVG");
promise_test(async function() {
document.querySelector(
"#svg-container").inert = false;
let reachedTarget = false;
target.addEventListener(
"mousedown", () => {
reachedTarget = true;
}, { once: true });
await new test_driver.Actions()
.pointerMove(0, 0, { origin: wrapper })
.pointerDown()
.send();
this.add_cleanup(() => test_driver.click(document.
body));
assert_true(target.matches(
":active"),
"target is active");
assert_true(target.matches(
":hover"),
"target is hovered");
assert_true(reachedTarget,
"target got event");
assert_true(wrapper.matches(
":hover"),
"wrapper is hovered");
},
"Hit-testing can reach contents of a no longer inert SVG");
</
script>