Index: Source/core/rendering/RenderBlock.cpp |
diff --git a/Source/core/rendering/RenderBlock.cpp b/Source/core/rendering/RenderBlock.cpp |
index 16d51d77f54893ce9479b589bde232a0e7345410..4eabe3c226e5d8a14c7f29292f5f35e9e3981a79 100644 |
--- a/Source/core/rendering/RenderBlock.cpp |
+++ b/Source/core/rendering/RenderBlock.cpp |
@@ -735,20 +735,9 @@ void RenderBlock::addChildIgnoringAnonymousColumnBlocks(RenderObject* newChild, |
// safe fallback to use the topmost beforeChild container. |
beforeChild = beforeChildContainer; |
} |
- } else { |
- // We will reach here when beforeChild is a run-in element. |
- // If run-in element precedes a block-level element, it becomes the |
- // the first inline child of that block level element. The insertion |
- // point will be before that block-level element. |
- ASSERT(beforeChild->isRunIn()); |
- beforeChild = beforeChildContainer; |
} |
} |
- // Nothing goes before the intruded run-in. |
- if (beforeChild && beforeChild->isRunIn() && runInIsPlacedIntoSiblingBlock(beforeChild)) |
- beforeChild = beforeChild->nextSibling(); |
- |
// Check for a spanning element in columns. |
if (gColumnFlowSplitEnabled) { |
RenderBlock* columnsBlockAncestor = columnsBlockForSpanningElement(newChild); |
@@ -816,9 +805,6 @@ void RenderBlock::addChildIgnoringAnonymousColumnBlocks(RenderObject* newChild, |
RenderBox::addChild(newChild, beforeChild); |
- // Handle placement of run-ins. |
- placeRunInIfNeeded(newChild); |
- |
if (madeBoxesNonInline && parent() && isAnonymousBlock() && parent()->isRenderBlock()) |
toRenderBlock(parent())->removeLeftoverAnonymousBlock(this); |
// this object may be dead here |
@@ -926,13 +912,6 @@ void RenderBlock::makeChildrenNonInline(RenderObject *insertionPoint) |
deleteLineBoxTree(); |
- // Since we are going to have block children, we have to move |
- // back the run-in to its original place. |
- if (child->isRunIn()) { |
- moveRunInToOriginalPosition(child); |
- child = firstChild(); |
- } |
- |
while (child) { |
RenderObject *inlineRunStart, *inlineRunEnd; |
getInlineRun(child, insertionPoint, inlineRunStart, inlineRunEnd); |
@@ -1016,10 +995,6 @@ static bool canMergeContiguousAnonymousBlocks(RenderObject* oldChild, RenderObje |
|| (next && (!next->isAnonymousBlock() || toRenderBlock(next)->continuation() || toRenderBlock(next)->beingDestroyed()))) |
return false; |
- // FIXME: This check isn't required when inline run-ins can't be split into continuations. |
- if (prev && prev->firstChild() && prev->firstChild()->isInline() && prev->firstChild()->isRunIn()) |
- return false; |
- |
if ((prev && (prev->isRubyRun() || prev->isRubyBase())) |
|| (next && (next->isRubyRun() || next->isRubyBase()))) |
return false; |
@@ -1594,146 +1569,6 @@ bool RenderBlock::expandsToEncloseOverhangingFloats() const |
|| hasColumns() || isTableCell() || isTableCaption() || isFieldset() || isWritingModeRoot() || isRoot(); |
} |
-static void destroyRunIn(RenderBoxModelObject* runIn) |
-{ |
- ASSERT(runIn->isRunIn()); |
- ASSERT(!runIn->firstChild()); |
- |
- // Delete our line box tree. This is needed as our children got moved |
- // and our line box tree is no longer valid. |
- if (runIn->isRenderBlock()) |
- toRenderBlock(runIn)->deleteLineBoxTree(); |
- else if (runIn->isRenderInline()) |
- toRenderInline(runIn)->deleteLineBoxTree(); |
- else |
- ASSERT_NOT_REACHED(); |
- |
- runIn->destroy(); |
-} |
- |
-void RenderBlock::placeRunInIfNeeded(RenderObject* newChild) |
-{ |
- if (newChild->isRunIn()) |
- moveRunInUnderSiblingBlockIfNeeded(newChild); |
- else if (RenderObject* prevSibling = newChild->previousSibling()) { |
- if (prevSibling->isRunIn()) |
- moveRunInUnderSiblingBlockIfNeeded(prevSibling); |
- } |
-} |
- |
-RenderBoxModelObject* RenderBlock::createReplacementRunIn(RenderBoxModelObject* runIn) |
-{ |
- ASSERT(runIn->isRunIn()); |
- ASSERT(runIn->node()); |
- |
- RenderBoxModelObject* newRunIn = 0; |
- if (!runIn->isRenderBlockFlow()) |
- newRunIn = new RenderBlockFlow(runIn->node()); |
- else |
- newRunIn = new RenderInline(toElement(runIn->node())); |
- |
- runIn->node()->setRenderer(newRunIn); |
- newRunIn->setStyle(runIn->style()); |
- |
- runIn->moveAllChildrenTo(newRunIn, true); |
- |
- return newRunIn; |
-} |
- |
-void RenderBlock::moveRunInUnderSiblingBlockIfNeeded(RenderObject* runIn) |
-{ |
- ASSERT(runIn->isRunIn()); |
- |
- // See if we have inline children. If the children aren't inline, |
- // then just treat the run-in as a normal block. |
- if (!runIn->childrenInline()) |
- return; |
- |
- // FIXME: We don't handle non-block flow elements with run-in for now. |
- if (!runIn->isRenderBlockFlow()) |
- return; |
- |
- // FIXME: We don't support run-ins with or as part of a continuation |
- // as it makes the back-and-forth placing complex. |
- if (runIn->isElementContinuation() || runIn->virtualContinuation()) |
- return; |
- |
- // Check if this node is allowed to run-in. E.g. <select> expects its renderer to |
- // be a RenderListBox or RenderMenuList, and hence cannot be a RenderInline run-in. |
- if (!runIn->canBeReplacedWithInlineRunIn()) |
- return; |
- |
- RenderObject* curr = runIn->nextSibling(); |
- if (!curr || !curr->isRenderBlock() || !curr->childrenInline()) |
- return; |
- |
- // Per CSS3, "A run-in cannot run in to a block that already starts with a |
- // run-in or that itself is a run-in". |
- if (curr->isRunIn() || (curr->firstChild() && curr->firstChild()->isRunIn())) |
- return; |
- |
- if (curr->isAnonymous() || curr->isFloatingOrOutOfFlowPositioned()) |
- return; |
- |
- // FIXME: We don't support run-ins with or as part of a continuation |
- // as it makes the back-and-forth placing complex. |
- if (curr->isElementContinuation() || curr->virtualContinuation()) |
- return; |
- |
- RenderBoxModelObject* oldRunIn = toRenderBoxModelObject(runIn); |
- RenderBoxModelObject* newRunIn = createReplacementRunIn(oldRunIn); |
- destroyRunIn(oldRunIn); |
- |
- // Now insert the new child under |curr| block. Use addChild instead of insertChildNode |
- // since it handles correct placement of the children, especially where we cannot insert |
- // anything before the first child. e.g. details tag. See https://bugs.webkit.org/show_bug.cgi?id=58228. |
- curr->addChild(newRunIn, curr->firstChild()); |
- |
- // Make sure that |this| get a layout since its run-in child moved. |
- curr->setNeedsLayoutAndPrefWidthsRecalc(); |
-} |
- |
-bool RenderBlock::runInIsPlacedIntoSiblingBlock(RenderObject* runIn) |
-{ |
- ASSERT(runIn->isRunIn()); |
- |
- // If we don't have a parent, we can't be moved into our sibling block. |
- if (!parent()) |
- return false; |
- |
- // An intruded run-in needs to be an inline. |
- if (!runIn->isRenderInline()) |
- return false; |
- |
- return true; |
-} |
- |
-void RenderBlock::moveRunInToOriginalPosition(RenderObject* runIn) |
-{ |
- ASSERT(runIn->isRunIn()); |
- |
- if (!runInIsPlacedIntoSiblingBlock(runIn)) |
- return; |
- |
- // FIXME: Run-in that are now placed in sibling block can break up into continuation |
- // chains when new children are added to it. We cannot easily send them back to their |
- // original place since that requires writing integration logic with RenderInline::addChild |
- // and all other places that might cause continuations to be created (without blowing away |
- // |this|). Disabling this feature for now to prevent crashes. |
- if (runIn->isElementContinuation() || runIn->virtualContinuation()) |
- return; |
- |
- RenderBoxModelObject* oldRunIn = toRenderBoxModelObject(runIn); |
- RenderBoxModelObject* newRunIn = createReplacementRunIn(oldRunIn); |
- destroyRunIn(oldRunIn); |
- |
- // Add the run-in block as our previous sibling. |
- parent()->addChild(newRunIn, this); |
- |
- // Make sure that the parent holding the new run-in gets layout. |
- parent()->setNeedsLayoutAndPrefWidthsRecalc(); |
-} |
- |
LayoutUnit RenderBlock::computeStartPositionDeltaForChildAvoidingFloats(const RenderBox* child, LayoutUnit childMarginStart, RenderRegion* region) |
{ |
LayoutUnit startPosition = startOffsetForContent(region); |
@@ -5127,7 +4962,7 @@ void RenderBlock::updateFirstLetter() |
// (crawling into blocks). |
static bool shouldCheckLines(RenderObject* obj) |
{ |
- return !obj->isFloatingOrOutOfFlowPositioned() && !obj->isRunIn() |
+ return !obj->isFloatingOrOutOfFlowPositioned() |
&& obj->isRenderBlock() && obj->style()->height().isAuto() |
&& (!obj->isDeprecatedFlexibleBox() || obj->style()->boxOrient() == VERTICAL); |
} |
@@ -5148,7 +4983,7 @@ static int getHeightForLineCount(RenderBlock* block, int l, bool includeBottom, |
int result = getHeightForLineCount(toRenderBlock(obj), l, false, count); |
if (result != -1) |
return result + obj->y() + (includeBottom ? (block->borderBottom() + block->paddingBottom()) : LayoutUnit()); |
- } else if (!obj->isFloatingOrOutOfFlowPositioned() && !obj->isRunIn()) |
+ } else if (!obj->isFloatingOrOutOfFlowPositioned()) |
normalFlowChildWithoutLines = obj; |
} |
if (normalFlowChildWithoutLines && l == 0) |
@@ -5954,8 +5789,6 @@ const char* RenderBlock::renderName() const |
return "RenderBlock (relative positioned)"; |
if (isStickyPositioned()) |
return "RenderBlock (sticky positioned)"; |
- if (isRunIn()) |
- return "RenderBlock (run-in)"; |
return "RenderBlock"; |
} |