Index: Source/core/page/FrameView.cpp |
diff --git a/Source/core/page/FrameView.cpp b/Source/core/page/FrameView.cpp |
index 343bbb47f3cb11f6d67582be68e879639891c76f..7a898dfcce0d99adab4a31de5b2092eab53556c1 100644 |
--- a/Source/core/page/FrameView.cpp |
+++ b/Source/core/page/FrameView.cpp |
@@ -1354,13 +1354,16 @@ bool FrameView::scrollContentsFastPath(const IntSize& scrollDelta, const IntRect |
if (!renderer->style()->hasViewportConstrainedPosition()) |
continue; |
- if (renderer->isComposited()) |
- continue; |
- |
// Fixed items should always have layers. |
ASSERT(renderer->hasLayer()); |
RenderLayer* layer = toRenderBoxModelObject(renderer)->layer(); |
+ // Composited layers may still actually paint into their ancestor. |
+ // If that happens, the viewport constrained object needs to be |
+ // repainted on scroll. |
+ if (layer->isComposited() && !layer->backing()->paintsIntoCompositedAncestor()) |
+ continue; |
+ |
if (layer->viewportConstrainedNotCompositedReason() == RenderLayer::NotCompositedForBoundsOutOfView |
|| layer->viewportConstrainedNotCompositedReason() == RenderLayer::NotCompositedForNoVisibleContent) { |
// Don't invalidate for invisible fixed layers. |