Skip to content

Commit

Permalink
[Selection API] Implement selection.direction
Browse files Browse the repository at this point in the history
Add selection.direction [1] which returns "none", "forward" or
"backward".

We also update the WPT test selection-direction.tentative.html
to remove the selection click-based tests as this behavior is not
standardized across browsers [2] [3].

[1] https://w3c.github.io/selection-api/#dom-selection-direction
[2] w3c/selection-api#70 (comment)
[3] w3c/selection-api#177 (comment)

Change-Id: I2aad4f8efc4f3d700437501929af274116f7910a
Bug: 40286116
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5677331
Commit-Queue: Di Zhang <[email protected]>
Reviewed-by: Kent Tamura <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1324573}
  • Loading branch information
dizhang168 authored and chromium-wpt-export-bot committed Jul 9, 2024
1 parent c6d660e commit 15c5ae8
Showing 1 changed file with 1 addition and 58 deletions.
59 changes: 1 addition & 58 deletions shadow-dom/selection-direction.tentative.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<body>
<meta name="author" title="Ryosuke Niwa" href="mailto:[email protected]">
<meta name="assert" content="Selection's direction should return none, forwad, or backward">
<link rel="help" href="https://w3c.github.io/selection-api/#dom-selection-getcomposedrange">
<link rel="help" href="https://w3c.github.io/selection-api/#dom-selection-direction">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
Expand Down Expand Up @@ -61,63 +61,6 @@
assert_equals(getSelection().direction, 'backward');
}, 'direction returns "backward" when there is a forward selection that crosses shadow boundaries');

promise_test(async () => {
container.innerHTML = 'hello, world';
const doubleClick = new test_driver.Actions()
.pointerMove(0, 0, container.firstChild)
.pointerDown()
.pointerUp()
.pointerDown()
.pointerUp()
.send();
await doubleClick;

const sel = getSelection();
assert_equals(sel.anchorNode, container.firstChild);
assert_equals(sel.anchorOffset, 0);
assert_equals(sel.focusNode, container.firstChild);
assert_equals(sel.focusOffset, 5); // hello
assert_equals(sel.direction, 'none');
}, 'direction returns "none" when there is a double click selection(directionless)');

promise_test(async () => {
container.innerHTML = 'hello, world';
const tripleClick = new test_driver.Actions()
.pointerMove(0, 0, container.firstChild)
.pointerDown()
.pointerUp()
.pointerDown()
.pointerUp()
.pointerDown()
.pointerUp()
.send();
await tripleClick;

const sel = getSelection();
assert_equals(sel.anchorNode, container);
assert_equals(sel.anchorOffset, 0);
assert_equals(sel.focusNode, container);
assert_equals(sel.focusOffset, 1);
assert_equals(sel.direction, 'none');
}, 'direction returns "none" when there is a triple click selection(directionless)');

promise_test(async () => {
container.innerHTML = 'hello, world';
const click = new test_driver.Actions()
.pointerMove(0, 0, container.firstChild)
.pointerDown()
.pointerUp()
.send();
await click;

const sel = getSelection();
assert_equals(sel.anchorNode, container.firstChild);
assert_equals(sel.anchorOffset, 0);
assert_equals(sel.focusNode, container.firstChild);
assert_equals(sel.focusOffset, 0);
assert_true(sel.isCollapsed);
assert_equals(sel.direction, 'none');
}, 'direction returns "none" when the selection is collapsed');
</script>
</body>
</html>

0 comments on commit 15c5ae8

Please sign in to comment.