Bug 1359157 - Support Selection.type from spec; r?smaug
All other browsers already support it, more or less interoperably.
MozReview-Commit-ID: 4VoOeqBoKI0
--- a/dom/base/Selection.cpp
+++ b/dom/base/Selection.cpp
@@ -2727,16 +2727,28 @@ Selection::GetIsCollapsed(bool* aIsColla
NS_IMETHODIMP
Selection::GetRangeCount(int32_t* aRangeCount)
{
*aRangeCount = (int32_t)RangeCount();
return NS_OK;
}
+void
+Selection::GetType(nsAString& aOutType) const
+{
+ if (!RangeCount()) {
+ aOutType.AssignLiteral("None");
+ } else if (IsCollapsed()) {
+ aOutType.AssignLiteral("Caret");
+ } else {
+ aOutType.AssignLiteral("Range");
+ }
+}
+
NS_IMETHODIMP
Selection::GetRangeAt(int32_t aIndex, nsIDOMRange** aReturn)
{
ErrorResult result;
*aReturn = GetRangeAt(aIndex, result);
NS_IF_ADDREF(*aReturn);
return result.StealNSResult();
}
--- a/dom/base/Selection.h
+++ b/dom/base/Selection.h
@@ -193,16 +193,19 @@ public:
void SelectAllChildrenJS(nsINode& aNode, mozilla::ErrorResult& aRv);
void DeleteFromDocument(mozilla::ErrorResult& aRv);
uint32_t RangeCount() const
{
return mRanges.Length();
}
+
+ void GetType(nsAString& aOutType) const;
+
nsRange* GetRangeAt(uint32_t aIndex, mozilla::ErrorResult& aRv);
void AddRangeJS(nsRange& aRange, mozilla::ErrorResult& aRv);
void RemoveRange(nsRange& aRange, mozilla::ErrorResult& aRv);
void RemoveAllRanges(mozilla::ErrorResult& aRv);
void Stringify(nsAString& aResult);
bool ContainsNode(nsINode& aNode, bool aPartlyContained, mozilla::ErrorResult& aRv);
--- a/dom/webidl/Selection.webidl
+++ b/dom/webidl/Selection.webidl
@@ -12,17 +12,17 @@
interface Selection {
readonly attribute Node? anchorNode;
readonly attribute unsigned long anchorOffset;
readonly attribute Node? focusNode;
readonly attribute unsigned long focusOffset;
readonly attribute boolean isCollapsed;
readonly attribute unsigned long rangeCount;
- //readonly attribute DOMString type;
+ readonly attribute DOMString type;
[Throws]
Range getRangeAt(unsigned long index);
[Throws, BinaryName="addRangeJS"]
void addRange(Range range);
[Throws]
void removeRange(Range range);
[Throws]
void removeAllRanges();
@@ -77,17 +77,17 @@ partial interface Selection {
[ChromeOnly,Throws]
DOMString toStringWithFormat(DOMString formatType, unsigned long flags, long wrapColumn);
[ChromeOnly,Throws]
void addSelectionListener(nsISelectionListener newListener);
[ChromeOnly,Throws]
void removeSelectionListener(nsISelectionListener listenerToRemove);
[ChromeOnly,BinaryName="rawType"]
- readonly attribute short type;
+ readonly attribute short selectionType;
[ChromeOnly,Throws,Pref="dom.testing.selection.GetRangesForInterval"]
sequence<Range> GetRangesForInterval(Node beginNode, long beginOffset, Node endNode, long endOffset,
boolean allowAdjacent);
[ChromeOnly,Throws]
void scrollIntoView(short aRegion, boolean aIsSynchronous, short aVPercent, short aHPercent);
deleted file mode 100644
--- a/testing/web-platform/meta/selection/interfaces.html.ini
+++ /dev/null
@@ -1,8 +0,0 @@
-[interfaces.html]
- type: testharness
- [Selection interface: attribute type]
- expected: FAIL
-
- [Selection interface: getSelection() must inherit property "type" with the proper type (6)]
- expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/selection/type.html.ini
+++ /dev/null
@@ -1,89 +0,0 @@
-[type.html]
- type: testharness
- [Empty selection]
- expected: FAIL
-
- [[paras[0\].firstChild, 0, paras[0\].firstChild, 0\]]
- expected: FAIL
-
- [[paras[0\].firstChild, 0, paras[0\].firstChild, 1\]]
- expected: FAIL
-
- [[paras[0\].firstChild, 2, paras[0\].firstChild, 8\]]
- expected: FAIL
-
- [[paras[0\].firstChild, 2, paras[0\].firstChild, 9\]]
- expected: FAIL
-
- [[paras[1\].firstChild, 0, paras[1\].firstChild, 0\]]
- expected: FAIL
-
- [[paras[1\].firstChild, 0, paras[1\].firstChild, 1\]]
- expected: FAIL
-
- [[paras[1\].firstChild, 2, paras[1\].firstChild, 8\]]
- expected: FAIL
-
- [[paras[1\].firstChild, 2, paras[1\].firstChild, 9\]]
- expected: FAIL
-
- [[document.documentElement, 0, document.documentElement, 1\]]
- expected: FAIL
-
- [[document.documentElement, 0, document.documentElement, 2\]]
- expected: FAIL
-
- [[document.documentElement, 1, document.documentElement, 2\]]
- expected: FAIL
-
- [[document.head, 1, document.head, 1\]]
- expected: FAIL
-
- [[document.body, 0, document.body, 1\]]
- expected: FAIL
-
- [[paras[0\], 0, paras[0\], 0\]]
- expected: FAIL
-
- [[paras[0\], 0, paras[0\], 1\]]
- expected: FAIL
-
- [[paras[0\].firstChild, 0, paras[1\].firstChild, 0\]]
- expected: FAIL
-
- [[paras[0\].firstChild, 0, paras[1\].firstChild, 8\]]
- expected: FAIL
-
- [[paras[0\].firstChild, 3, paras[3\], 1\]]
- expected: FAIL
-
- [[paras[0\], 0, paras[0\].firstChild, 7\]]
- expected: FAIL
-
- [[testDiv, 2, paras[4\], 1\]]
- expected: FAIL
-
- [[testDiv, 1, paras[2\].firstChild, 5\]]
- expected: FAIL
-
- [[document.documentElement, 1, document.body, 0\]]
- expected: FAIL
-
- [[document, 0, document, 1\]]
- expected: FAIL
-
- [[document, 0, document, 2\]]
- expected: FAIL
-
- [[document, 1, document, 2\]]
- expected: FAIL
-
- [[testDiv, 0, comment, 5\]]
- expected: FAIL
-
- [[paras[2\].firstChild, 4, comment, 2\]]
- expected: FAIL
-
- [[paras[3\], 1, comment, 8\]]
- expected: FAIL
-