Skip to content

Commit 239fdb9

Browse files
[OpaqueRange] Introduce NodeRange interface
Add NodeRange between AbstractRange and Range/StaticRange. Under the OpaqueRange flag, startContainer/endContainer move from AbstractRange to NodeRange, allowing OpaqueRange to inherit from AbstractRange without exposing internal DOM containers. Keep startContainer/endContainer on AbstractRange behind the inverse LegacyAbstractRange flag until OpaqueRange ships. Add the C++ NodeRange parent unconditionally so the inheritance chain stays stable. Relevant discussions: whatwg/dom#1470 whatwg/html#11478 (comment) Signoff from Blink API Owners on change: https://groups.google.com/a/chromium.org/g/blink-dev/c/otEJ9AacRg4 Low-Coverage-Reason: COVERAGE_UNDERREPORTED Bug: 421421332 Change-Id: Ica8f37cc536044269f1e252b63c38e7c8b55e758 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7904930 Reviewed-by: Mason Freed <masonf@chromium.org> Reviewed-by: Dan Clark <daniec@microsoft.com> Commit-Queue: Stephanie Zhang <stephanie.zhang@microsoft.com> Cr-Commit-Position: refs/heads/main@{#1663534}
1 parent 3be4046 commit 239fdb9

4 files changed

Lines changed: 12 additions & 14 deletions

File tree

dom/ranges/tentative/OpaqueRange-basic.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
const textarea = document.body.firstElementChild;
1919
const range = textarea.createValueRange(1, 4);
2020

21-
assert_equals(range.startContainer, null, "startContainer should be null.");
22-
assert_equals(range.endContainer, null, "endContainer should be null.");
21+
assert_equals(range.startContainer, undefined, "startContainer should be undefined.");
22+
assert_equals(range.endContainer, undefined, "endContainer should be undefined.");
2323
assert_equals(range.startOffset, 1);
2424
assert_equals(range.endOffset, 4);
2525
assert_false(range.collapsed);

dom/ranges/tentative/OpaqueRange-disconnect.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
assert_equals(range.startOffset, 0, "startOffset resets to 0");
1414
assert_equals(range.endOffset, 0, "endOffset resets to 0");
1515
assert_true(range.collapsed, "range is collapsed");
16-
assert_equals(range.startContainer, null, "startContainer remains null");
17-
assert_equals(range.endContainer, null, "endContainer remains null");
16+
assert_equals(range.startContainer, undefined, "startContainer remains undefined");
17+
assert_equals(range.endContainer, undefined, "endContainer remains undefined");
1818
assert_equals(range.getClientRects().length, 0, "no client rects");
1919
assert_equals(range.getBoundingClientRect().width, 0, "bounding rect width is 0");
2020
assert_equals(range.getBoundingClientRect().height, 0, "bounding rect height is 0");

dom/ranges/tentative/OpaqueRange-range-updates.html

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,15 @@
2323

2424
// Get range on <input>.
2525
const inputRange = input.createValueRange(0, 4);
26-
// Opaque range: containers are null.
27-
assert_equals(inputRange.startContainer, null);
28-
assert_equals(inputRange.endContainer, null);
26+
assert_equals(inputRange.startContainer, undefined);
27+
assert_equals(inputRange.endContainer, undefined);
2928
assert_equals(inputRange.startOffset, 0);
3029
assert_equals(inputRange.endOffset, 4);
3130

3231
// Get range on <textarea>.
3332
const textareaRange = textarea.createValueRange(0, 5);
34-
assert_equals(textareaRange.startContainer, null);
35-
assert_equals(textareaRange.endContainer, null);
33+
assert_equals(textareaRange.startContainer, undefined);
34+
assert_equals(textareaRange.endContainer, undefined);
3635
assert_equals(textareaRange.startOffset, 0);
3736
assert_equals(textareaRange.endOffset, 5);
3837
}, "createValueRange works on different form controls.");
@@ -46,8 +45,8 @@
4645

4746
// Verify disconnected <input>.
4847
const inputRange = input.createValueRange(0, 12);
49-
assert_equals(inputRange.startContainer, null);
50-
assert_equals(inputRange.endContainer, null);
48+
assert_equals(inputRange.startContainer, undefined);
49+
assert_equals(inputRange.endContainer, undefined);
5150
assert_equals(inputRange.startOffset, 0);
5251
assert_equals(inputRange.endOffset, 12);
5352

dom/ranges/tentative/OpaqueRange-supported-elements.html

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@
1818

1919
const range = element.createValueRange(0, value.length);
2020

21-
// Opaque range: containers are null.
22-
assert_equals(range.startContainer, null, 'startContainer should be null');
23-
assert_equals(range.endContainer, null, 'endContainer should be null');
21+
assert_equals(range.startContainer, undefined, 'startContainer should be undefined');
22+
assert_equals(range.endContainer, undefined, 'endContainer should be undefined');
2423
assert_equals(range.startOffset, 0);
2524
assert_equals(range.endOffset, value.length);
2625
assert_false(range.collapsed);

0 commit comments

Comments
 (0)