Index: Source/core/rendering/RenderView.cpp |
diff --git a/Source/core/rendering/RenderView.cpp b/Source/core/rendering/RenderView.cpp |
index 22e2250ec140247464cb550bb924b517aa295554..89e7169c5c08d83d5b18c51f9839b8b1b81cc380 100644 |
--- a/Source/core/rendering/RenderView.cpp |
+++ b/Source/core/rendering/RenderView.cpp |
@@ -301,9 +301,6 @@ void RenderView::layout() |
void RenderView::mapLocalToContainer(const RenderLayerModelObject* repaintContainer, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed) const |
{ |
- // If a container was specified, and was not 0 or the RenderView, |
- // then we should have found it by now. |
- ASSERT_ARG(repaintContainer, !repaintContainer || repaintContainer == this); |
ASSERT_UNUSED(wasFixed, !wasFixed || *wasFixed == (mode & IsFixed)); |
if (!repaintContainer && mode & UseTransforms && shouldUseTransformFromContainer(0)) { |
@@ -314,6 +311,23 @@ void RenderView::mapLocalToContainer(const RenderLayerModelObject* repaintContai |
if (mode & IsFixed && m_frameView) |
transformState.move(m_frameView->scrollOffsetForFixedPosition()); |
+ |
+ if (repaintContainer == this) |
+ return; |
+ |
+ if (mode & TraverseDocumentBoundaries) { |
+ if (RenderObject* parentDocRenderer = frame()->ownerRenderer()) { |
+ transformState.move(-frame()->view()->scrollOffset()); |
+ if (parentDocRenderer->isBox()) |
+ transformState.move(toLayoutSize(toRenderBox(parentDocRenderer)->contentBoxRect().location())); |
+ parentDocRenderer->mapLocalToContainer(repaintContainer, transformState, mode, wasFixed); |
+ return; |
+ } |
+ } |
+ |
+ // If a container was specified, and was not 0 or the RenderView, |
+ // then we should have found it by now. |
+ ASSERT_ARG(repaintContainer, !repaintContainer); |
} |
const RenderObject* RenderView::pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap& geometryMap) const |
@@ -349,6 +363,14 @@ void RenderView::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, TransformStat |
} |
} |
+void RenderView::computeSelfHitTestRects(Vector<LayoutRect>& rects, const LayoutPoint&) const |
+{ |
+ // Record the entire size of the contents of the frame. Note that we don't just |
+ // use the viewport size (containing block) here because we want to ensure this includes |
+ // all children (so we can avoid walking them explicitly). |
+ rects.append(LayoutRect(LayoutPoint::zero(), frameView()->contentsSize())); |
+} |
+ |
bool RenderView::requiresColumns(int desiredColumnCount) const |
{ |
if (m_frameView) |