Index: third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp |
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp b/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp |
index 0ff40ac98a76e1f0088eed1ff66a42638ab3a422..3b11423168c8b208cb3e6cdaf1c058ea797077af 100644 |
--- a/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp |
+++ b/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp |
@@ -69,12 +69,12 @@ static void adjustClipRectsForChildren(const LayoutObject& layoutObject, ClipRec |
static void applyClipRects(const ClipRectsContext& context, const LayoutObject& layoutObject, LayoutPoint offset, ClipRects& clipRects) |
{ |
- ASSERT(layoutObject.hasOverflowClip() || layoutObject.hasClip()); |
+ ASSERT(layoutObject.hasOverflowClip() || layoutObject.hasClip() || layoutObject.style()->containsPaint()); |
LayoutView* view = layoutObject.view(); |
ASSERT(view); |
if (clipRects.fixed() && context.rootLayer->layoutObject() == view) |
offset -= toIntSize(view->frameView()->scrollPosition()); |
- if (layoutObject.hasOverflowClip()) { |
+ if (layoutObject.hasOverflowClip() || layoutObject.style()->containsPaint()) { |
ClipRect newOverflowClip = toLayoutBox(layoutObject).overflowClipRect(offset, context.scrollbarRelevancy); |
newOverflowClip.setHasRadius(layoutObject.style()->hasBorderRadius()); |
clipRects.setOverflowClipRect(intersection(newOverflowClip, clipRects.overflowClipRect())); |
@@ -82,6 +82,10 @@ static void applyClipRects(const ClipRectsContext& context, const LayoutObject& |
clipRects.setPosClipRect(intersection(newOverflowClip, clipRects.posClipRect())); |
if (layoutObject.isLayoutView()) |
clipRects.setFixedClipRect(intersection(newOverflowClip, clipRects.fixedClipRect())); |
+ if (layoutObject.style()->containsPaint()) { |
+ clipRects.setPosClipRect(intersection(newOverflowClip, clipRects.posClipRect())); |
+ clipRects.setFixedClipRect(intersection(newOverflowClip, clipRects.fixedClipRect())); |
+ } |
} |
if (layoutObject.hasClip()) { |
LayoutRect newClip = toLayoutBox(layoutObject).clipRect(offset); |
@@ -213,7 +217,7 @@ void PaintLayerClipper::calculateRects(const ClipRectsContext& context, const La |
layerBounds = LayoutRect(offset, LayoutSize(m_layoutObject.layer()->size())); |
// Update the clip rects that will be passed to child layers. |
- if (m_layoutObject.hasOverflowClip() && shouldRespectOverflowClip(context)) { |
+ if ((m_layoutObject.hasOverflowClip() && shouldRespectOverflowClip(context)) || m_layoutObject.style()->containsPaint()) { |
foregroundRect.intersect(toLayoutBox(m_layoutObject).overflowClipRect(offset, context.scrollbarRelevancy)); |
if (m_layoutObject.style()->hasBorderRadius()) |
foregroundRect.setHasRadius(true); |
@@ -267,7 +271,7 @@ void PaintLayerClipper::calculateClipRects(const ClipRectsContext& context, Clip |
adjustClipRectsForChildren(m_layoutObject, clipRects); |
- if ((m_layoutObject.hasOverflowClip() && shouldRespectOverflowClip(context)) || m_layoutObject.hasClip()) { |
+ if ((m_layoutObject.hasOverflowClip() && shouldRespectOverflowClip(context)) || m_layoutObject.hasClip() || m_layoutObject.style()->containsPaint()) { |
// This offset cannot use convertToLayerCoords, because sometimes our rootLayer may be across |
// some transformed layer boundary, for example, in the PaintLayerCompositor overlapMap, where |
// clipRects are needed in view space. |