Skip to content

Commit 2f84b9f

Browse files
domfarolinomoz-wptsync-bot
authored andcommitted
Bug 1931932 [wpt PR 49230] - DOM: Capture apparent getSelection() getter side effects, a=testonly
Automatic update from web-platform-tests DOM: Capture apparent getSelection() getter side effects This CL adds tests (and unfortunately, expectations) for a bug that has to do with getters on `getSelection()` having side effects on the internal range maintained by `blink::DOMSelection`, when a selection's anchor node is removed from the DOM. R=masonf Bug: 379275917 Change-Id: Ic69f910b5d070a55a6f0c3992f45c0ad939124d0 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6026810 Reviewed-by: Mason Freed <[email protected]> Commit-Queue: Dominic Farolino <[email protected]> Cr-Commit-Position: refs/heads/main@{#1384416} -- wpt-commits: e60ae5825b9f69af2581e0ae8955f2dbe5e0ebd1 wpt-pr: 49230
1 parent d830a75 commit 2f84b9f

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<script src='/resources/testharness.js'></script>
5+
<script src='/resources/testharnessreport.js'></script>
6+
<script src="/resources/testdriver.js"></script>
7+
<script src="/resources/testdriver-actions.js"></script>
8+
<script src="/resources/testdriver-vendor.js"></script>
9+
</head>
10+
11+
<body>
12+
</body>
13+
14+
<script>
15+
async function select_range(t, anchorNode, focusNode) {
16+
await new test_driver.Actions()
17+
.pointerMove(0, 0, {origin: anchorNode})
18+
.pointerDown()
19+
.pointerMove(focusNode.clientWidth, focusNode.clientHeight, {origin: focusNode})
20+
.pointerUp()
21+
.send();
22+
}
23+
24+
const kHTML = `
25+
<div id=parentDiv>
26+
<span id=parentParagraph>Parent paragraph</span>
27+
<div id=childDiv>
28+
<span id=childParagraph1>Child paragraph one</span>
29+
<span id=childParagraph2>Paragraph two</span>
30+
</div>
31+
</div>
32+
`;
33+
34+
// The two tests below are semantically identical, however after the selection
35+
// is made but before `remove()`:
36+
// - The first test does nothing
37+
// - The second test runs asserts on `getSelection()` (before `remove()` is
38+
// run).
39+
//
40+
// The existence of the `getSelection()` asserts before `remove()` appears to
41+
// have a side-effect in Chromium browsers. See https://crbug.com/379275917.
42+
promise_test(async t => {
43+
document.body.innerHTML = kHTML;
44+
getSelection().removeAllRanges();
45+
await select_range(t, parentParagraph, childParagraph1);
46+
47+
parentParagraph.remove();
48+
assert_equals(getSelection().anchorNode, parentDiv, "anchorNode snaps up to parent");
49+
}, "anchorNode snaps up to parent when removed (no asserts)");
50+
51+
promise_test(async t => {
52+
document.body.innerHTML = kHTML;
53+
getSelection().removeAllRanges();
54+
await select_range(t, parentParagraph, childParagraph1);
55+
56+
assert_equals(getSelection().anchorNode, parentParagraph.firstChild, "anchorNode before move");
57+
parentParagraph.remove();
58+
assert_equals(getSelection().anchorNode, parentDiv, "anchorNode snaps up to parent");
59+
}, "anchorNode snaps up to parent when removed (with asserts)");
60+
</script>

0 commit comments

Comments
 (0)