Index: Source/core/rendering/RenderObject.cpp |
diff --git a/Source/core/rendering/RenderObject.cpp b/Source/core/rendering/RenderObject.cpp |
index 5d8e90a90bdfd12a89e2345c62a2b50acd18563b..c0fa1a1b4f2cbf6f4ce65cbeb0ca148a26fc2791 100644 |
--- a/Source/core/rendering/RenderObject.cpp |
+++ b/Source/core/rendering/RenderObject.cpp |
@@ -2400,7 +2400,12 @@ void RenderObject::removeFromRenderFlowThread() |
// It's only until later when we actually destroy it and remove all the children from it. |
// Currently, that happens for firstLetter elements and list markers. |
// Pass in the flow thread so that we don't have to look it up for all the children. |
- removeFromRenderFlowThreadRecursive(flowThreadContainingBlock()); |
+ // If we're a column spanner, we need to use our parent to find the flow thread, since a spanner |
+ // doesn't have the flow thread in its containing block chain. We still need to notify the flow |
+ // thread when the renderer removed happens to be a spanner, so that we get rid of the spanner |
+ // placeholder, and column sets around the placeholder get merged. |
+ RenderFlowThread* flowThread = isColumnSpanAll() ? parent()->flowThreadContainingBlock() : flowThreadContainingBlock(); |
+ removeFromRenderFlowThreadRecursive(flowThread); |
} |
void RenderObject::removeFromRenderFlowThreadRecursive(RenderFlowThread* renderFlowThread) |
@@ -2413,6 +2418,7 @@ void RenderObject::removeFromRenderFlowThreadRecursive(RenderFlowThread* renderF |
if (renderFlowThread && renderFlowThread != this) |
renderFlowThread->flowThreadDescendantWillBeRemoved(this); |
setFlowThreadState(NotInsideFlowThread); |
+ RELEASE_ASSERT(!spannerPlaceholder()); |
} |
void RenderObject::destroyAndCleanupAnonymousWrappers() |