53 lines
1.9 KiB
HTML
53 lines
1.9 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta name='author' title='weizman' href='https://www.weizmangal.com'>
|
|
<meta name='assert' content='Shadow DOM should not leak via Selection API'>
|
|
<link rel='help' href='https://w3c.github.io/webcomponents/spec/shadow/'>
|
|
<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>
|
|
</head>
|
|
<body>
|
|
<div id='log'></div>
|
|
<div id='container'></div>
|
|
</body>
|
|
<script>
|
|
'use strict';
|
|
|
|
const container = document.getElementById('container');
|
|
|
|
function reset(text) {
|
|
const host = container.appendChild(document.createElement('div'));
|
|
const shadow = host.attachShadow({mode: 'closed'});
|
|
const child = shadow.appendChild(document.createElement('span'));
|
|
child.textContent = text;
|
|
return host;
|
|
}
|
|
|
|
async function select(t, target) {
|
|
const event_watcher = new EventWatcher(t, target, ["mouseup"]);
|
|
const actions_promise = new test_driver.Actions()
|
|
.pointerMove(0, 0, {origin: target})
|
|
.pointerDown()
|
|
.pointerMove(100, 0, {origin: target})
|
|
.pointerUp()
|
|
.send();
|
|
t.add_cleanup(() => actions_promise);
|
|
const event = await event_watcher.wait_for(["mouseup"]);
|
|
assert_equals(event.type, "mouseup");
|
|
assert_equals(event.target, target);
|
|
}
|
|
|
|
promise_test(async (t) => {
|
|
const text = 'text_inside_shadow';
|
|
const host = reset(text);
|
|
await select(t, host);
|
|
const node = getSelection().anchorNode;
|
|
assert_equals(node, container, 'getSelection().anchorNode should return the host of the shadow');
|
|
assert_not_equals(node.textContent, text, 'getSelection().anchorNode textContent should not be the text contents of an element inside the shadow root');
|
|
}, 'selection API should not leak nodes in Shadow DOM.');
|
|
</script>
|
|
</html>
|