Index: third_party/WebKit/Source/core/frame/FrameView.cpp |
diff --git a/third_party/WebKit/Source/core/frame/FrameView.cpp b/third_party/WebKit/Source/core/frame/FrameView.cpp |
index 7befa59cab9596c4259b88f2b9181b14a778f3c7..28906393f417f55c4f49ee79b8713e4597f0e374 100644 |
--- a/third_party/WebKit/Source/core/frame/FrameView.cpp |
+++ b/third_party/WebKit/Source/core/frame/FrameView.cpp |
@@ -52,6 +52,8 @@ |
#include "core/frame/Location.h" |
#include "core/frame/PageScaleConstraintsSet.h" |
#include "core/frame/PerformanceMonitor.h" |
+#include "core/frame/RemoteFrame.h" |
+#include "core/frame/RemoteFrameView.h" |
#include "core/frame/Settings.h" |
#include "core/frame/VisualViewport.h" |
#include "core/html/HTMLFrameElement.h" |
@@ -197,6 +199,7 @@ FrameView::FrameView(LocalFrame& frame) |
m_needsScrollbarsUpdate(false), |
m_suppressAdjustViewSize(false), |
m_allowsLayoutInvalidationAfterLayoutClean(true), |
+ m_remoteViewportIntersection(0, 0, 0, 0), |
dcheng
2017/01/05 07:10:19
Nit: omit this, as the default constructor does th
kenrb
2017/01/09 19:31:20
Done.
|
m_mainThreadScrollingReasons(0), |
m_mainThreadScrollingReasonsCounter( |
MainThreadScrollingReason::kMainThreadScrollingReasonCount, |
@@ -4908,4 +4911,40 @@ FrameView::getStyleRelatedMainThreadScrollingReasons() const { |
return reasons; |
} |
+void FrameView::setViewportIntersectionFromParent( |
+ const IntRect& viewportIntersection) { |
+ if (m_remoteViewportIntersection != viewportIntersection) { |
+ m_remoteViewportIntersection = viewportIntersection; |
+ scheduleAnimation(); |
+ } |
+} |
+ |
+IntRect FrameView::remoteViewportIntersection() { |
+ IntRect intersection(m_remoteViewportIntersection); |
+ intersection.move(scrollOffsetInt()); |
+ return intersection; |
+} |
+ |
+void FrameView::mapQuadToAncestorFrameIncludingScrollOffset( |
+ LayoutRect& rect, |
+ const LayoutObject* descendant, |
+ const LayoutView* ancestor, |
+ MapCoordinatesFlags mode) { |
+ FloatQuad mappedQuad = descendant->localToAncestorQuad( |
+ FloatQuad(FloatRect(rect)), ancestor, mode); |
+ rect = LayoutRect(mappedQuad.boundingBox()); |
+ |
+ // localToAncestorQuad accounts for scroll offset if it encounters a remote |
+ // frame in the ancestor chain, otherwise it needs to be added explicitly. |
+ if (frame().localFrameRoot() == frame().tree().top() || |
+ (ancestor && |
+ ancestor->frame()->localFrameRoot() == frame().localFrameRoot())) { |
+ FrameView* ancestorView = |
+ (ancestor ? ancestor->frameView() |
+ : toLocalFrame(frame().tree().top())->view()); |
+ LayoutSize scrollPosition = LayoutSize(ancestorView->getScrollOffset()); |
+ rect.move(-scrollPosition); |
+ } |
+} |
+ |
} // namespace blink |