Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /shadow-dom/touch-event-retargeting-leak.html - WPT Dashboard Interop Dashboard
<!DOCTYPE html>
<link rel=author href="mailto:jarhar@chromium.org">
<title>TouchEvent retargeting does not leak closed shadow root nodes to window</title>
<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>
<style>
#host {
width: 100px;
height: 100px;
background: red;
}
</style>
<div id="host">
<template shadowrootmode="closed">
<div id="closed-inner" style="width: 100%; height: 100%; background: blue;"></div>
</template>
</div>
<script>
promise_test(async () => {
const host = document.getElementById('host');
let windowCaptureTarget = null;
let windowCaptureTouchTarget = null;
const listener = function(e) {
windowCaptureTarget = e.target;
if (e.changedTouches.length > 0) {
windowCaptureTouchTarget = e.changedTouches[0].target;
}
};
window.addEventListener('touchstart', listener, { capture: true });
// Use test_driver to touch the center of the host element
await new test_driver.Actions()
.addPointer("touch_pointer", "touch")
.pointerMove(0, 0, {origin: host})
.pointerDown()
.pointerUp()
.send();
window.removeEventListener('touchstart', listener, { capture: true });
assert_equals(windowCaptureTarget, host, "Event target should be retargeted to host");
assert_equals(windowCaptureTouchTarget, host, "Touch target should be retargeted to host");
}, "TouchEvent retargeting does not leak closed shadow root nodes to window during capture phase");
</script>