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 3fcc21ce81f7d60f55f49a00569affaa938a1e9a..1f06da2f7f20b48a858b902738a2a7bf00991ed3 100644 |
--- a/third_party/WebKit/Source/core/dom/IntersectionObservation.cpp |
+++ b/third_party/WebKit/Source/core/dom/IntersectionObservation.cpp |
@@ -23,10 +23,15 @@ IntersectionObservation::IntersectionObservation(IntersectionObserver& observer, |
{ |
} |
+Element* IntersectionObservation::target() const |
+{ |
+ return toElement(m_target.get()); |
+} |
+ |
void IntersectionObservation::initializeGeometry(IntersectionGeometry& geometry) |
{ |
ASSERT(m_target); |
- LayoutObject* targetLayoutObject = m_target->layoutObject(); |
+ LayoutObject* targetLayoutObject = target()->layoutObject(); |
if (targetLayoutObject->isBoxModelObject()) |
geometry.targetRect = toLayoutBoxModelObject(targetLayoutObject)->visualOverflowRect(); |
else |
@@ -40,7 +45,7 @@ void IntersectionObservation::clipToRoot(LayoutRect& rect) |
// TODO(szager): the writing mode flipping needs a test. |
ASSERT(m_target); |
LayoutObject* rootLayoutObject = m_observer->rootLayoutObject(); |
- LayoutObject* targetLayoutObject = m_target->layoutObject(); |
+ LayoutObject* targetLayoutObject = target()->layoutObject(); |
targetLayoutObject->mapToVisibleRectInAncestorSpace(toLayoutBoxModelObject(rootLayoutObject), rect, nullptr); |
if (rootLayoutObject->hasOverflowClip()) { |
LayoutBox* rootLayoutBox = toLayoutBox(rootLayoutObject); |
@@ -54,10 +59,10 @@ void IntersectionObservation::clipToRoot(LayoutRect& rect) |
void IntersectionObservation::clipToFrameView(IntersectionGeometry& geometry) |
{ |
- Element* rootElement = m_observer->root(); |
+ Node* rootNode = m_observer->root(); |
LayoutObject* rootLayoutObject = m_observer->rootLayoutObject(); |
- if (rootElement == rootElement->document().documentElement()) { |
- geometry.rootRect = LayoutRect(rootElement->document().view()->visibleContentRect()); |
+ if (rootLayoutObject->isLayoutView()) { |
+ geometry.rootRect = LayoutRect(toLayoutView(rootLayoutObject)->frameView()->visibleContentRect()); |
m_observer->applyRootMargin(geometry.rootRect); |
geometry.intersectionRect.intersect(geometry.rootRect); |
} else { |
@@ -68,7 +73,7 @@ void IntersectionObservation::clipToFrameView(IntersectionGeometry& geometry) |
m_observer->applyRootMargin(geometry.rootRect); |
} |
- LayoutPoint scrollPosition(rootElement->document().view()->scrollPosition()); |
+ LayoutPoint scrollPosition(rootNode->document().view()->scrollPosition()); |
geometry.targetRect.moveBy(-scrollPosition); |
geometry.intersectionRect.moveBy(-scrollPosition); |
geometry.rootRect.moveBy(-scrollPosition); |
@@ -83,7 +88,7 @@ bool IntersectionObservation::computeGeometry(IntersectionGeometry& geometry) |
{ |
ASSERT(m_target); |
LayoutObject* rootLayoutObject = m_observer->rootLayoutObject(); |
- LayoutObject* targetLayoutObject = m_target->layoutObject(); |
+ LayoutObject* targetLayoutObject = target()->layoutObject(); |
if (!rootLayoutObject->isBoxModelObject()) |
return false; |
if (!targetLayoutObject->isBoxModelObject() && !targetLayoutObject->isText()) |
@@ -157,7 +162,7 @@ void IntersectionObservation::computeIntersectionObservations(double timestamp) |
void IntersectionObservation::disconnect() |
{ |
if (m_target) |
- m_target->ensureIntersectionObserverData().removeObservation(this->observer()); |
+ target()->ensureIntersectionObserverData().removeObservation(this->observer()); |
m_observer->removeObservation(*this); |
m_observer.clear(); |
} |