Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1389)

Unified Diff: third_party/WebKit/Source/core/frame/FrameView.cpp

Issue 2431473003: Intersection Observer support for OOPIF (Closed)
Patch Set: dcheng comments addressed Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..4c8b752e8d8d63bb29ad07741a480235c7631c87 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"
@@ -108,6 +110,7 @@
#include "platform/geometry/DoubleRect.h"
#include "platform/geometry/FloatRect.h"
#include "platform/geometry/LayoutRect.h"
+#include "platform/geometry/TransformState.h"
#include "platform/graphics/GraphicsContext.h"
#include "platform/graphics/GraphicsLayer.h"
#include "platform/graphics/GraphicsLayerDebugInfo.h"
@@ -4908,4 +4911,62 @@ 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);
+ }
+}
+
+bool FrameView::mapToVisualRectInTopFrameSpace(LayoutRect& rect) {
+ // This is the top-level frame, so no mapping necessary.
+ if (m_frame->isMainFrame())
+ return true;
+
+ LayoutRect viewportIntersectionRect(remoteViewportIntersection());
+ rect.intersect(viewportIntersectionRect);
+ if (rect.isEmpty())
+ return false;
+ return true;
+}
+
+void FrameView::applyTransformForTopFrameSpace(TransformState& transformState) {
+ // This is the top-level frame, so no mapping necessary.
+ if (m_frame->isMainFrame())
+ return;
+
+ LayoutRect viewportIntersectionRect(remoteViewportIntersection());
+ transformState.move(
+ LayoutSize(-viewportIntersectionRect.x(), -viewportIntersectionRect.y()));
+}
+
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/core/frame/FrameView.h ('k') | third_party/WebKit/Source/core/frame/RemoteFrame.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698