commit 283b9dbbe873f39f5468099254b42664f083ee18
parent 18b47cd2f2143ffa86ab7c2b1e20be0911c3b696
Author: Rakesh Goulikar <ragoulik@microsoft.com>
Date: Fri, 31 Oct 2025 08:55:00 +0000
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
Diffstat:
1 file changed, 54 insertions(+), 0 deletions(-)
diff --git a/testing/web-platform/tests/selection/toString-user-select-none.html b/testing/web-platform/tests/selection/toString-user-select-none.html
@@ -0,0 +1,54 @@
+<!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>