Index: third_party/WebKit/Source/core/layout/LayoutView.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutView.cpp b/third_party/WebKit/Source/core/layout/LayoutView.cpp |
index 269ad5bb07092e2f6d9ab4d97ddcf9000953944d..335c1d53c765b0fc2e6587e8c4611989151fde54 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutView.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutView.cpp |
@@ -343,6 +343,13 @@ void LayoutView::mapLocalToAncestor(const LayoutBoxModelObject* ancestor, |
transformState.move(parentDocLayoutItem.contentBoxOffset()); |
parentDocLayoutItem.mapLocalToAncestor(ancestor, transformState, mode); |
+ } else if (!document().frame()->isMainFrame()) { |
+ // This is the case of a Frame with a remote parent. |
+ DCHECK(!ancestor); |
+ LayoutRect viewportIntersectionRect( |
+ frameView()->remoteViewportIntersection()); |
+ transformState.move(LayoutSize(-viewportIntersectionRect.x(), |
+ -viewportIntersectionRect.y())); |
} |
} |
} |
@@ -463,16 +470,25 @@ bool LayoutView::mapToVisualRectInAncestorSpace( |
rect.move(offsetForFixedPosition(true)); |
// Apply our transform if we have one (because of full page zooming). |
- if (!ancestor && layer() && layer()->transform()) |
+ if (layer() && layer()->transform()) |
rect = layer()->transform()->mapRect(rect); |
- ASSERT(ancestor); |
if (ancestor == this) |
return true; |
Element* owner = document().localOwner(); |
- if (!owner) |
+ if (!owner) { |
+ // This is the case of a Frame with a remote parent. |
dcheng
2017/01/05 07:10:19
While I'm OK with this patch as written, my origin
szager1
2017/01/05 20:25:22
+1, it should be straightforward to add something
kenrb
2017/01/09 19:31:20
Done. I similarly moved the logic out of mapLocalT
|
+ if (!document().frame()->isMainFrame()) { |
+ DCHECK(!ancestor); |
+ LayoutRect viewportIntersectionRect( |
+ frameView()->remoteViewportIntersection()); |
+ rect.intersect(viewportIntersectionRect); |
+ if (rect.isEmpty()) |
+ return false; |
+ } |
return true; |
+ } |
if (LayoutBox* obj = owner->layoutBox()) { |
if (!(mode & InputIsInFrameCoordinates)) { |