Index: Source/WebCore/rendering/RenderBlock.cpp |
=================================================================== |
--- Source/WebCore/rendering/RenderBlock.cpp (revision 101038) |
+++ Source/WebCore/rendering/RenderBlock.cpp (working copy) |
@@ -1595,6 +1595,16 @@ |
RenderBlock* currBlock = toRenderBlock(curr); |
+ // First we destroy any :before/:after content. It will be regenerated by the new inline. |
+ // Exception is if the run-in itself is generated. |
+ if (child->style()->styleType() != BEFORE && child->style()->styleType() != AFTER) { |
+ RenderObject* generatedContent; |
+ if (child->getCachedPseudoStyle(BEFORE) && (generatedContent = child->beforePseudoElementRenderer())) |
+ generatedContent->destroy(); |
+ if (child->getCachedPseudoStyle(AFTER) && (generatedContent = child->afterPseudoElementRenderer())) |
+ generatedContent->destroy(); |
+ } |
+ |
// Remove the old child. |
children()->removeChildNode(this, blockRunIn); |
@@ -1603,16 +1613,11 @@ |
RenderInline* inlineRunIn = new (renderArena()) RenderInline(runInNode ? runInNode : document()); |
inlineRunIn->setStyle(blockRunIn->style()); |
- bool runInIsGenerated = child->style()->styleType() == BEFORE || child->style()->styleType() == AFTER; |
- |
- // Move the nodes from the old child to the new child, but skip any :before/:after content. It has already |
- // been regenerated by the new inline. |
+ // Move the nodes from the old child to the new child |
for (RenderObject* runInChild = blockRunIn->firstChild(); runInChild;) { |
RenderObject* nextSibling = runInChild->nextSibling(); |
- if (runInIsGenerated || (runInChild->style()->styleType() != BEFORE && runInChild->style()->styleType() != AFTER)) { |
- blockRunIn->children()->removeChildNode(blockRunIn, runInChild, false); |
- inlineRunIn->addChild(runInChild); // Use addChild instead of appendChildNode since it handles correct placement of the children relative to :after-generated content. |
- } |
+ blockRunIn->children()->removeChildNode(blockRunIn, runInChild, false); |
+ inlineRunIn->addChild(runInChild); // Use addChild instead of appendChildNode since it handles correct placement of the children relative to :after-generated content. |
runInChild = nextSibling; |
} |