Files
sousa-gecko/dom/webidl/Range.webidl
T
Masayuki Nakano deec723b5a Bug 2052026 - Treat the UA shadow for SVG <use> as a part of the flat tree for selection r=smaug,webidl
Currently, we allow extending selection range into a shadow of `<use>`
even though it's our own closed shadow. Therefore, we need to be
consistent about this in the each DOM API. I.e., we should treat the
shadow for SVG `<use>` as a part of the flat tree for selection.

Additionally, this makes `AbstractRange::RegisterSelection` fallible.
When the range boundaries are judged as disconnected, it's our bug,
but the crash report does not provide the enough information to us, and
it seems that not working selection may make users complain about that.
So, we could expect some tests would report the bug.

Differential Revision: https://phabricator.services.mozilla.com/D309988
2026-07-05 23:40:44 +00:00

116 lines
3.9 KiB
Plaintext

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*
* The origin of this IDL file is
* http://dom.spec.whatwg.org/#range
* http://domparsing.spec.whatwg.org/#dom-range-createcontextualfragment
* http://dvcs.w3.org/hg/csswg/raw-file/tip/cssom-view/Overview.html#extensions-to-the-range-interface
*
* Copyright © 2012 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C
* liability, trademark and document use rules apply.
*/
// Use ProbablyShortLivingWrapper so that the Range object could be deleted
// as soon as possible, and thus slow down DOM operations less.
[Exposed=Window, ProbablyShortLivingWrapper]
interface Range : AbstractRange {
[Throws]
constructor();
[Throws]
readonly attribute Node commonAncestorContainer;
[Throws, BinaryName="setStartJS"]
undefined setStart(Node refNode, unsigned long offset);
[Throws, BinaryName="setEndJS"]
undefined setEnd(Node refNode, unsigned long offset);
[Throws, BinaryName="setStartBeforeJS"]
undefined setStartBefore(Node refNode);
[Throws, BinaryName="setStartAfterJS"]
undefined setStartAfter(Node refNode);
[Throws, BinaryName="setEndBeforeJS"]
undefined setEndBefore(Node refNode);
[Throws, BinaryName="setEndAfterJS"]
undefined setEndAfter(Node refNode);
[BinaryName="collapseJS"]
undefined collapse(optional boolean toStart = false);
[Throws, BinaryName="selectNodeJS"]
undefined selectNode(Node refNode);
[Throws, BinaryName="selectNodeContentsJS"]
undefined selectNodeContents(Node refNode);
const unsigned short START_TO_START = 0;
const unsigned short START_TO_END = 1;
const unsigned short END_TO_END = 2;
const unsigned short END_TO_START = 3;
[Throws]
short compareBoundaryPoints(unsigned short how, Range sourceRange);
[CEReactions, Throws]
undefined deleteContents();
[CEReactions, Throws]
DocumentFragment extractContents();
[CEReactions, Throws]
DocumentFragment cloneContents();
[CEReactions, Throws]
undefined insertNode(Node node);
[CEReactions, Throws]
undefined surroundContents(Node newParent);
Range cloneRange();
undefined detach();
[Throws]
boolean isPointInRange(Node node, unsigned long offset);
[Throws]
short comparePoint(Node node, unsigned long offset);
[Throws]
boolean intersectsNode(Node node);
[Throws, BinaryName="ToString"]
stringifier;
};
// http://domparsing.spec.whatwg.org/#dom-range-createcontextualfragment
partial interface Range {
[CEReactions, NeedsSubjectPrincipal=NonSystem, Throws, UseCounter]
DocumentFragment createContextualFragment((TrustedHTML or DOMString) fragment);
};
// http://dvcs.w3.org/hg/csswg/raw-file/tip/cssom-view/Overview.html#extensions-to-the-range-interface
partial interface Range {
DOMRectList? getClientRects();
[ChromeOnly] DOMRectList? getAllowCrossShadowBoundaryClientRects();
DOMRect getBoundingClientRect();
};
dictionary ClientRectsAndTexts {
required DOMRectList rectList;
required sequence<DOMString> textList;
};
partial interface Range {
[ChromeOnly, Throws]
ClientRectsAndTexts getClientRectsAndTexts();
};
// ChromeOnly methods that allow setting Range boundaries to cross
// shadow boundary.
partial interface Range {
[ChromeOnly, Throws]
undefined setStartAllowCrossShadowBoundary(Node refNode, unsigned long offset);
[ChromeOnly, Throws]
undefined setEndAllowCrossShadowBoundary(Node refNode, unsigned long offset);
[ChromeOnly, BinaryName="GetMayCrossShadowBoundaryStartContainer"]
readonly attribute Node mayCrossShadowBoundaryStartContainer;
[ChromeOnly]
readonly attribute unsigned long mayCrossShadowBoundaryStartOffset;
[ChromeOnly, BinaryName="GetMayCrossShadowBoundaryEndContainer"]
readonly attribute Node mayCrossShadowBoundaryEndContainer;
[ChromeOnly]
readonly attribute unsigned long mayCrossShadowBoundaryEndOffset;
};