Bug 1282752 Part 1: Rename CollectClientRects method and add a new parameter for collecting text. draft
authorBrad Werth <bwerth@mozilla.com>
Fri, 28 Oct 2016 11:34:01 -0700
changeset 431065 4b598cc971eb423d3f2034307467967ce233b71a
parent 431012 1561c917ee27c3ea04bd69467e5b8c7c08102f2a
child 431066 c8a48d2da66639c2f7d04567b7e1dcd7037f4ea4
push id34000
push userbwerth@mozilla.com
push dateFri, 28 Oct 2016 19:38:20 +0000
bugs1282752
milestone52.0a1
Bug 1282752 Part 1: Rename CollectClientRects method and add a new parameter for collecting text. MozReview-Commit-ID: KQPky6Fh8sG
dom/base/nsRange.cpp
dom/base/nsRange.h
layout/base/nsLayoutUtils.cpp
layout/generic/nsSelection.cpp
--- a/dom/base/nsRange.cpp
+++ b/dom/base/nsRange.cpp
@@ -25,16 +25,17 @@
 #include "nsContentUtils.h"
 #include "nsGenericDOMDataNode.h"
 #include "nsTextFrame.h"
 #include "nsFontFaceList.h"
 #include "mozilla/dom/DocumentFragment.h"
 #include "mozilla/dom/DocumentType.h"
 #include "mozilla/dom/RangeBinding.h"
 #include "mozilla/dom/DOMRect.h"
+#include "mozilla/dom/DOMStringList.h"
 #include "mozilla/dom/ShadowRoot.h"
 #include "mozilla/dom/Selection.h"
 #include "mozilla/Telemetry.h"
 #include "mozilla/Likely.h"
 #include "nsCSSFrameConstructor.h"
 #include "nsStyleStruct.h"
 #include "nsStyleStructInlines.h"
 #include "nsComputedDOMStyle.h"
@@ -2925,21 +2926,23 @@ static nsresult GetPartialTextRect(nsLay
       r = nsLayoutUtils::TransformFrameRectToAncestor(f, r, relativeTo);
       aCallback->AddRect(r);
     }
   }
   return NS_OK;
 }
 
 /* static */ void
-nsRange::CollectClientRects(nsLayoutUtils::RectCallback* aCollector,
-                            nsRange* aRange,
-                            nsINode* aStartParent, int32_t aStartOffset,
-                            nsINode* aEndParent, int32_t aEndOffset,
-                            bool aClampToEdge, bool aFlushLayout)
+nsRange::CollectClientRectsAndText(
+  nsLayoutUtils::RectCallback* aCollector,
+  mozilla::dom::DOMStringList* aText,
+  nsRange* aRange,
+  nsINode* aStartParent, int32_t aStartOffset,
+  nsINode* aEndParent, int32_t aEndOffset,
+  bool aClampToEdge, bool aFlushLayout)
 {
   // Hold strong pointers across the flush
   nsCOMPtr<nsINode> startContainer = aStartParent;
   nsCOMPtr<nsINode> endContainer = aEndParent;
 
   // Flush out layout so our frames are up to date.
   if (!aStartParent->IsInUncomposedDoc()) {
     return;
@@ -3022,18 +3025,18 @@ already_AddRefed<DOMRect>
 nsRange::GetBoundingClientRect(bool aClampToEdge, bool aFlushLayout)
 {
   RefPtr<DOMRect> rect = new DOMRect(ToSupports(this));
   if (!mStartParent) {
     return rect.forget();
   }
 
   nsLayoutUtils::RectAccumulator accumulator;
-  CollectClientRects(&accumulator, this, mStartParent, mStartOffset, 
-    mEndParent, mEndOffset, aClampToEdge, aFlushLayout);
+  CollectClientRectsAndText(&accumulator, nullptr, this, mStartParent,
+    mStartOffset, mEndParent, mEndOffset, aClampToEdge, aFlushLayout);
 
   nsRect r = accumulator.mResultRect.IsEmpty() ? accumulator.mFirstRect : 
     accumulator.mResultRect;
   rect->SetLayoutRect(r);
   return rect.forget();
 }
 
 NS_IMETHODIMP
@@ -3050,18 +3053,18 @@ nsRange::GetClientRects(bool aClampToEdg
     return nullptr;
   }
 
   RefPtr<DOMRectList> rectList =
     new DOMRectList(static_cast<nsIDOMRange*>(this));
 
   nsLayoutUtils::RectListBuilder builder(rectList);
 
-  CollectClientRects(&builder, this, mStartParent, mStartOffset, 
-    mEndParent, mEndOffset, aClampToEdge, aFlushLayout);
+  CollectClientRectsAndText(&builder, nullptr, this, mStartParent,
+    mStartOffset, mEndParent, mEndOffset, aClampToEdge, aFlushLayout);
   return rectList.forget();
 }
 
 NS_IMETHODIMP
 nsRange::GetUsedFontFaces(nsIDOMFontFaceList** aResult)
 {
   *aResult = nullptr;
 
--- a/dom/base/nsRange.h
+++ b/dom/base/nsRange.h
@@ -258,21 +258,23 @@ public:
    * where aNode is a descendant of a range's common ancestor node).
    * If a nsRange starts in (aNode, aEndOffset) or if it ends in
    * (aNode, aStartOffset) then it is non-overlapping and the result is false
    * for that nsRange.  Collapsed ranges always counts as non-overlapping.
    */
   static bool IsNodeSelected(nsINode* aNode, uint32_t aStartOffset,
                              uint32_t aEndOffset);
 
-  static void CollectClientRects(nsLayoutUtils::RectCallback* aCollector,
-                                 nsRange* aRange,
-                                 nsINode* aStartParent, int32_t aStartOffset,
-                                 nsINode* aEndParent, int32_t aEndOffset,
-                                 bool aClampToEdge, bool aFlushLayout);
+  static void CollectClientRectsAndText(
+    nsLayoutUtils::RectCallback* aCollector,
+    mozilla::dom::DOMStringList* aText,
+    nsRange* aRange,
+    nsINode* aStartParent, int32_t aStartOffset,
+    nsINode* aEndParent, int32_t aEndOffset,
+    bool aClampToEdge, bool aFlushLayout);
 
   /**
    * Scan this range for -moz-user-select:none nodes and split it up into
    * multiple ranges to exclude those nodes.  The resulting ranges are put
    * in aOutRanges.  If no -moz-user-select:none node is found in the range
    * then |this| is unmodified and is the only range in aOutRanges.
    * Otherwise, |this| will be modified so that it ends before the first
    * -moz-user-select:none node and additional ranges may also be created.
--- a/layout/base/nsLayoutUtils.cpp
+++ b/layout/base/nsLayoutUtils.cpp
@@ -9185,17 +9185,17 @@ nsLayoutUtils::GetSelectionBoundingRect(
       nsIFrame* relativeTo = GetContainingBlockForClientRect(frame);
       res = TransformFrameRectToAncestor(frame, res, relativeTo);
     }
   } else {
     int32_t rangeCount = aSel->RangeCount();
     RectAccumulator accumulator;
     for (int32_t idx = 0; idx < rangeCount; ++idx) {
       nsRange* range = aSel->GetRangeAt(idx);
-      nsRange::CollectClientRects(&accumulator, range,
+      nsRange::CollectClientRectsAndText(&accumulator, nullptr, range,
                                   range->GetStartParent(), range->StartOffset(),
                                   range->GetEndParent(), range->EndOffset(),
                                   true, false);
     }
     res = accumulator.mResultRect.IsEmpty() ? accumulator.mFirstRect :
       accumulator.mResultRect;
   }
 
--- a/layout/generic/nsSelection.cpp
+++ b/layout/generic/nsSelection.cpp
@@ -5881,17 +5881,17 @@ bool
 Selection::ContainsPoint(const nsPoint& aPoint)
 {
   if (IsCollapsed()) {
     return false;
   }
   PointInRectChecker checker(aPoint);
   for (uint32_t i = 0; i < RangeCount(); i++) {
     nsRange* range = GetRangeAt(i);
-    nsRange::CollectClientRects(&checker, range,
+    nsRange::CollectClientRectsAndText(&checker, nullptr, range,
                                 range->GetStartParent(), range->StartOffset(),
                                 range->GetEndParent(), range->EndOffset(),
                                 true, false);
     if (checker.MatchFound()) {
       return true;
     }
   }
   return false;