Files
sousa-gecko/testing/web-platform/tests/selection/toString-user-select-none.html
T
Rakesh Goulikar 283b9dbbe8 Bug 1996820 [wpt PR 55705] - [Editing] Skip user-select:none in Selection.toString(), a=testonly
Automatic update from web-platform-tests
[Editing] Skip user-select:none in Selection.toString()

This fix adds SetSkipsUnselectableContent(true) to the
TextIteratorBehavior used in DOMSelection::toString(). This ensures
unselectable content is excluded from the string representation of
selection.

Bug: 446539520
Change-Id: Ic86c2bb87bd01b70ba5c950ed992cfc375ccb7e2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7087649
Reviewed-by: Koji Ishii <kojii@chromium.org>
Reviewed-by: Ashish Kumar <ashishkum@microsoft.com>
Commit-Queue: Rakesh Goulikar <ragoulik@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#1536538}

--

wpt-commits: ce6e185b538e03aad63da2b36778aab13c121759
wpt-pr: 55705
2025-11-06 10:24:00 +00:00

55 lines
1.9 KiB
HTML

<!DOCTYPE html>
<meta charset="utf-8">
<title>Selection.toString() with user-select: none elements</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="test-content">
<!-- Test case 1: Basic user-select: none -->
<div id="basic">
a<span style="user-select: none;">b</span>c
</div>
<!-- Test case 2: Nested user-select: none -->
<div id="nested">
start <span style="user-select: none;">unselectable <strong>nested</strong>
text</span> end
</div>
<!-- Test case 3: Selectable children inside unselectable container -->
<div id="container" style="user-select: none;">
<span style="user-select: text;">selectable</span> unselectable
<span style="user-select: text;">text</span>
</div>
</div>
<script>
function selectAllAndGetSelectionTextInElement(element) {
const selection = getSelection();
selection.removeAllRanges();
const range = document.createRange();
range.selectNodeContents(element);
selection.addRange(range);
return selection.toString();
}
test(() => {
const result = selectAllAndGetSelectionTextInElement(document.getElementById('basic'));
assert_equals(result, 'ac',
'Basic user-select: none content should be excluded');
}, 'Selection.toString() excludes basic user-select: none content');
test(() => {
const result = selectAllAndGetSelectionTextInElement(document.getElementById('nested'));
assert_equals(result, 'start end',
'Nested user-select: none content should be excluded');
}, 'Selection.toString() excludes nested user-select: none content');
test(() => {
const result = selectAllAndGetSelectionTextInElement(document.getElementById('container'));
assert_equals(result, 'selectabletext',
'Selectable children should be included even in unselectable container');
}, 'Selection.toString() includes selectable children in unselectable ' +
'container');
</script>