Index: third_party/WebKit/WebCore/rendering/RenderBlock.cpp |
=================================================================== |
--- third_party/WebKit/WebCore/rendering/RenderBlock.cpp (revision 9118) |
+++ third_party/WebKit/WebCore/rendering/RenderBlock.cpp (working copy) |
@@ -55,6 +55,12 @@ |
using namespace HTMLNames; |
+static void moveChild(RenderObject* to, RenderObjectChildList* toChildList, RenderObject* from, RenderObjectChildList* fromChildList, RenderObject* child) |
+{ |
+ ASSERT(from == child->parent()); |
+ toChildList->appendChildNode(to, fromChildList->removeChildNode(from, child, false), false); |
+} |
+ |
struct ColumnInfo { |
ColumnInfo() |
: m_desiredColumnWidth(0) |
@@ -245,6 +251,14 @@ |
updateFirstLetter(); |
} |
+void RenderBlock::updateBeforeAfterContent(RenderStyle::PseudoId pseudoId) |
+{ |
+ // If this is an anonymous wrapper, then the parent applies its own pseudo-element style to it. |
+ if (parent() && parent()->createsAnonymousWrapper()) |
+ return; |
+ return children()->updateBeforeAfterContent(this, pseudoId); |
+} |
+ |
void RenderBlock::addChild(RenderObject* newChild, RenderObject* beforeChild) |
{ |
// Make sure we don't append things after :after-generated content if we have it. |
@@ -422,16 +436,16 @@ |
child = inlineRunEnd->nextSibling(); |
- RenderBlock* box = createAnonymousBlock(); |
- insertChildNode(box, inlineRunStart); |
+ RenderBlock* block = createAnonymousBlock(); |
+ children()->insertChildNode(this, block, inlineRunStart); |
RenderObject* o = inlineRunStart; |
- while(o != inlineRunEnd) |
- { |
+ while (o != inlineRunEnd) { |
RenderObject* no = o; |
o = no->nextSibling(); |
- box->moveChildNode(no); |
+ |
+ moveChild(block, block->children(), this, children(), no); |
} |
- box->moveChildNode(inlineRunEnd); |
+ moveChild(block, block->children(), this, children(), inlineRunEnd); |
} |
#ifndef NDEBUG |
@@ -500,13 +514,15 @@ |
// the |prev| block. |
prev->setNeedsLayoutAndPrefWidthsRecalc(); |
RenderObject* o = next->firstChild(); |
+ |
+ RenderBlock* nextBlock = toRenderBlock(next); |
+ RenderBlock* prevBlock = toRenderBlock(prev); |
while (o) { |
RenderObject* no = o; |
o = no->nextSibling(); |
- prev->moveChildNode(no); |
+ moveChild(prevBlock, prevBlock->children(), nextBlock, nextBlock->children(), no); |
} |
- RenderBlock* nextBlock = toRenderBlock(next); |
nextBlock->deleteLineBoxTree(); |
// Nuke the now-empty block. |
@@ -521,13 +537,13 @@ |
// box. We can go ahead and pull the content right back up into our |
// box. |
setNeedsLayoutAndPrefWidthsRecalc(); |
- RenderBlock* anonBlock = toRenderBlock(removeChildNode(child, false)); |
+ RenderBlock* anonBlock = toRenderBlock(children()->removeChildNode(this, child, false)); |
setChildrenInline(true); |
RenderObject* o = anonBlock->firstChild(); |
while (o) { |
RenderObject* no = o; |
o = no->nextSibling(); |
- moveChildNode(no); |
+ moveChild(this, children(), anonBlock, anonBlock->children(), no); |
} |
// Delete the now-empty block's lines and nuke it. |
@@ -963,24 +979,27 @@ |
return 0; |
} |
-RenderBox* RenderBlock::handleRunInChild(RenderBox* blockRunIn, bool& handled) |
+RenderBox* RenderBlock::handleRunInChild(RenderBox* child, bool& handled) |
{ |
// See if we have a run-in element with inline children. If the |
// children aren't inline, then just treat the run-in as a normal |
// block. |
- if (blockRunIn->isRunIn() && (blockRunIn->childrenInline() || blockRunIn->isReplaced())) { |
+ if (child->isRunIn() && (child->childrenInline() || child->isReplaced())) { |
+ RenderBlock* blockRunIn = toRenderBlock(child); |
// Get the next non-positioned/non-floating RenderBlock. |
RenderObject* curr = blockRunIn->nextSibling(); |
while (curr && curr->isFloatingOrPositioned()) |
curr = curr->nextSibling(); |
if (curr && (curr->isRenderBlock() && curr->childrenInline() && !curr->isRunIn())) { |
+ RenderBlock* currBlock = toRenderBlock(curr); |
+ |
// The block acts like an inline, so just null out its |
// position. |
handled = true; |
// Remove the old child. |
RenderBox* next = blockRunIn->nextSiblingBox(); |
- removeChildNode(blockRunIn); |
+ children()->removeChildNode(this, blockRunIn); |
// Create an inline. |
RenderInline* inlineRunIn = new (renderArena()) RenderInline(blockRunIn->node()); |
@@ -988,10 +1007,10 @@ |
// Move the nodes from the old child to the new child. |
for (RenderObject* runInChild = blockRunIn->firstChild(); runInChild; runInChild = runInChild->nextSibling()) |
- inlineRunIn->moveChildNode(runInChild); |
+ moveChild(inlineRunIn, inlineRunIn->children(), blockRunIn, blockRunIn->children(), runInChild); |
- // Now insert the new child under |curr|. |
- curr->insertChildNode(inlineRunIn, curr->firstChild()); |
+ // Now insert the new child under |currBlock|. |
+ currBlock->children()->insertChildNode(currBlock, inlineRunIn, currBlock->firstChild()); |
// If the run-in had an element, we need to set the new renderer. |
if (blockRunIn->element()) |