- From: Dominic Farolino <notifications@github.com>
- Date: Tue, 11 Mar 2025 07:52:37 -0700
- To: w3c/selection-api <selection-api@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/selection-api/pull/345/review/2674913743@github.com>
@domfarolino commented on this pull request. > @@ -546,24 +566,18 @@ <h2> <var>newFocus</var> be the <a>boundary point</a> (<var>node</var>, <var>offset</var>). </li> - <li>Let <var>newRange</var> be a new <a>range</a>. - </li> - <li>If <var>node</var>'s [=tree/root=] is not the same as the - [=this=]'s <a>range</a>'s [=tree/root=], [=Range/set the start=] - <var>newRange</var>'s [=range/start=] and [=range/end=] to - <var>newFocus</var>. + <li>If <var>node</var>'s [=tree/root=] is not the same as + [=this=]'s <a>range</a>'s [=tree/root=], <a>reset the range</a> with + <var>newFocus</var> and <var>newFocus</var>. </li> <li>Otherwise, if <var>oldAnchor</var> is [=boundary point/before=] > For composed selection range, we determinate the anchor/focus based on the direction. It is the directionality check that I believe we're still breaking in this PR. Right now, steps 4 and steps 5 might be broken. Imagine the following scenario: ```html <html> <div id=shadowHost> <p id=anchor></p> <!-- In the shadow DOM --> </div> <p id=focus>...</p> </html> getSelection().setBaseAndExtent(anchor, focus); ``` Because your **step 4** condition checks both same-root-ness _and_ "before"-ness, we will fail the same-root condition and call "set the composed selection range" with focus and anchor, which I think is out of order. Then, **step 5** will unconditionally check the "before"-ness, which blows up because DOM's "before"-ness asserts that the two endpoints share the same root: https://dom.spec.whatwg.org/#concept-range-bp-position. Consider the exact opposite scenario: ```html <html> <p id=focus>...</p> <div id=shadowHost> <p id=anchor>...</p> <!-- In the shadow DOM--> </div> </html> getSelection().setBaseAndExtent(anchor, focus); ``` This also fails your **step 4** condition of `setBaseAndExtent()`, because they are not same-root. This accidentally results in "set the composed selection range" being called with focus/anchor in the right order this time, but the directionality check in **step 5** still blows up. -- Reply to this email directly or view it on GitHub: https://github.com/w3c/selection-api/pull/345#discussion_r1989473998 You are receiving this because you are subscribed to this thread. Message ID: <w3c/selection-api/pull/345/review/2674913743@github.com>
Received on Tuesday, 11 March 2025 14:52:41 UTC