Bug 1359157 - Support Selection.type from spec; r?smaug draft
authorAryeh Gregor <ayg@aryeh.name>
Thu, 03 Aug 2017 17:13:24 +0300
changeset 620502 bea827b558fe46de4a0059c67574a56398d8c019
parent 619581 52285ea5e54c73d3ed824544cef2ee3f195f05e6
child 640715 5972dc5222da7190dba67ad453e24922ed1d6b9a
push id72058
push userbmo:ayg@aryeh.name
push dateThu, 03 Aug 2017 14:15:17 +0000
reviewerssmaug
bugs1359157
milestone57.0a1
Bug 1359157 - Support Selection.type from spec; r?smaug All other browsers already support it, more or less interoperably. MozReview-Commit-ID: 4VoOeqBoKI0
dom/base/Selection.cpp
dom/base/Selection.h
dom/webidl/Selection.webidl
testing/web-platform/meta/selection/interfaces.html.ini
testing/web-platform/meta/selection/type.html.ini
--- 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
-