Index: third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp |
diff --git a/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp b/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp |
index 582e8cb0846d910ff4a08ea66cfdc6869475143f..cb3e4a72c3452cbf7f451e51d321cb60d67c401e 100644 |
--- a/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp |
+++ b/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp |
@@ -56,6 +56,18 @@ void PrePaintTreeWalk::walk(const LayoutObject& object, |
const PrePaintTreeWalkContext& context) { |
PrePaintTreeWalkContext localContext(context); |
+ if (object.isLayoutMultiColumnSpannerPlaceholder()) { |
+ // Walk multi-column spanner as if it replaces the placeholder. |
+ // Set the flag so that the tree builder can specially handle out-of-flow |
+ // positioned descendants if their containers are between the multi-column |
+ // container and the spanner. See PaintPropertyTreeBuilder for details. |
+ localContext.treeBuilderContext.isUnderMultiColumnSpanner = true; |
+ walk(*toLayoutMultiColumnSpannerPlaceholder(object) |
+ .layoutObjectInFlowThread(), |
+ localContext); |
+ return; |
+ } |
+ |
m_propertyTreeBuilder.buildTreeNodesForSelf(object, |
localContext.treeBuilderContext); |
if (RuntimeEnabledFeatures::slimmingPaintInvalidationEnabled()) |
@@ -66,17 +78,12 @@ void PrePaintTreeWalk::walk(const LayoutObject& object, |
for (const LayoutObject* child = object.slowFirstChild(); child; |
child = child->nextSibling()) { |
- // Column spanners are walked through their placeholders. See below. |
+ // Column spanners are walked through their placeholders. See above. |
if (child->isColumnSpanAll()) |
continue; |
walk(*child, localContext); |
} |
- if (object.isLayoutMultiColumnSpannerPlaceholder()) |
- walk(*toLayoutMultiColumnSpannerPlaceholder(object) |
- .layoutObjectInFlowThread(), |
- localContext); |
- |
if (object.isLayoutPart()) { |
const LayoutPart& layoutPart = toLayoutPart(object); |
Widget* widget = layoutPart.widget(); |