Index: third_party/WebKit/Source/core/dom/IntersectionObservation.cpp |
diff --git a/third_party/WebKit/Source/core/dom/IntersectionObservation.cpp b/third_party/WebKit/Source/core/dom/IntersectionObservation.cpp |
index 07364afadca65fdc6f581cff3c30b59b85b55292..29605403c1c1e09ee8c11852a2e6ff6a8df9b52c 100644 |
--- a/third_party/WebKit/Source/core/dom/IntersectionObservation.cpp |
+++ b/third_party/WebKit/Source/core/dom/IntersectionObservation.cpp |
@@ -28,7 +28,13 @@ Element* IntersectionObservation::target() const |
return toElement(m_target.get()); |
} |
-void IntersectionObservation::initializeGeometry(IntersectionGeometry& geometry) |
+void IntersectionObservation::applyRootMargin(LayoutRect& rect) const |
+{ |
+ if (m_shouldReportRootBounds) |
+ m_observer->applyRootMargin(rect); |
+} |
+ |
+void IntersectionObservation::initializeGeometry(IntersectionGeometry& geometry) const |
{ |
ASSERT(m_target); |
LayoutObject* targetLayoutObject = target()->layoutObject(); |
@@ -43,7 +49,7 @@ void IntersectionObservation::initializeGeometry(IntersectionGeometry& geometry) |
geometry.intersectionRect = geometry.targetRect; |
} |
-void IntersectionObservation::clipToRoot(LayoutRect& rect) |
+void IntersectionObservation::clipToRoot(LayoutRect& rect) const |
{ |
// Map and clip rect into root element coordinates. |
// TODO(szager): the writing mode flipping needs a test. |
@@ -54,27 +60,27 @@ void IntersectionObservation::clipToRoot(LayoutRect& rect) |
if (rootLayoutObject->hasOverflowClip()) { |
LayoutBox* rootLayoutBox = toLayoutBox(rootLayoutObject); |
LayoutRect clipRect(LayoutPoint(), LayoutSize(rootLayoutBox->layer()->size())); |
- m_observer->applyRootMargin(clipRect); |
+ applyRootMargin(clipRect); |
rootLayoutBox->flipForWritingMode(rect); |
rect.intersect(clipRect); |
rootLayoutBox->flipForWritingMode(rect); |
} |
} |
-void IntersectionObservation::clipToFrameView(IntersectionGeometry& geometry) |
+void IntersectionObservation::clipToFrameView(IntersectionGeometry& geometry) const |
{ |
Node* rootNode = m_observer->rootNode(); |
LayoutObject* rootLayoutObject = m_observer->rootLayoutObject(); |
if (rootLayoutObject->isLayoutView()) { |
geometry.rootRect = LayoutRect(toLayoutView(rootLayoutObject)->frameView()->visibleContentRect()); |
- m_observer->applyRootMargin(geometry.rootRect); |
+ applyRootMargin(geometry.rootRect); |
geometry.intersectionRect.intersect(geometry.rootRect); |
} else { |
if (rootLayoutObject->isBox()) |
geometry.rootRect = LayoutRect(toLayoutBox(rootLayoutObject)->absoluteContentBox()); |
else |
geometry.rootRect = LayoutRect(rootLayoutObject->absoluteBoundingBoxRect()); |
- m_observer->applyRootMargin(geometry.rootRect); |
+ applyRootMargin(geometry.rootRect); |
} |
LayoutPoint scrollPosition(rootNode->document().view()->scrollPosition()); |
@@ -104,7 +110,7 @@ static bool isContainingBlockChainDescendant(LayoutObject* descendant, LayoutObj |
return descendant; |
} |
-bool IntersectionObservation::computeGeometry(IntersectionGeometry& geometry) |
+bool IntersectionObservation::computeGeometry(IntersectionGeometry& geometry) const |
{ |
// Pre-oilpan, there will be a delay between the time when the target Element gets deleted |
// (because its ref count dropped to zero) and when this IntersectionObservation gets |