| Index: Source/core/layout/LayoutInline.cpp
|
| diff --git a/Source/core/layout/LayoutInline.cpp b/Source/core/layout/LayoutInline.cpp
|
| index c08cc126bb756663b9c169e2c5a98e4b24e0b932..a72248614be36d9b406d346c03ac60e93da8ad2b 100644
|
| --- a/Source/core/layout/LayoutInline.cpp
|
| +++ b/Source/core/layout/LayoutInline.cpp
|
| @@ -68,19 +68,6 @@ LayoutInline* LayoutInline::createAnonymous(Document* document)
|
|
|
| void LayoutInline::willBeDestroyed()
|
| {
|
| -#if ENABLE(ASSERT)
|
| - // Make sure we do not retain "this" in the continuation outline table map of our containing blocks.
|
| - if (parent() && style()->visibility() == VISIBLE && style()->hasOutline()) {
|
| - bool containingBlockPaintsContinuationOutline = continuation() || isInlineElementContinuation();
|
| - if (containingBlockPaintsContinuationOutline) {
|
| - if (LayoutBlock* cb = containingBlock()) {
|
| - if (LayoutBlock* cbCb = cb->containingBlock())
|
| - ASSERT(!cbCb->paintsContinuationOutline(this));
|
| - }
|
| - }
|
| - }
|
| -#endif
|
| -
|
| // Make sure to destroy anonymous children first while they are still connected to the rest of the tree, so that they will
|
| // properly dirty line boxes that they are removed from. Effects that do :before/:after only on hover could crash otherwise.
|
| children()->destroyLeftoverChildren();
|
| @@ -152,31 +139,19 @@ static LayoutObject* inFlowPositionedInlineAncestor(LayoutObject* p)
|
| return nullptr;
|
| }
|
|
|
| -static void updateStyleOfAnonymousBlockContinuations(LayoutObject* block, const ComputedStyle& newStyle, const ComputedStyle& oldStyle, LayoutObject* containingBlockOfEndOfContinuation)
|
| +static void updateInFlowPositionOfAnonymousBlockContinuations(LayoutObject* block, const ComputedStyle& newStyle, const ComputedStyle& oldStyle, LayoutObject* containingBlockOfEndOfContinuation)
|
| {
|
| - // If an inline's outline or in-flow positioning has changed then any descendant blocks will need to change their styles accordingly.
|
| - bool updateOutline = !newStyle.isOutlineEquivalent(&oldStyle);
|
| - bool updatePosition = newStyle.position() != oldStyle.position() && (newStyle.hasInFlowPosition() || oldStyle.hasInFlowPosition());
|
| - if (!updateOutline && !updatePosition)
|
| - return;
|
| -
|
| for (; block && block != containingBlockOfEndOfContinuation && block->isAnonymousBlock(); block = block->nextSibling()) {
|
| if (!toLayoutBlock(block)->isAnonymousBlockContinuation())
|
| continue;
|
|
|
| - RefPtr<ComputedStyle> newBlockStyle = ComputedStyle::clone(block->styleRef());
|
| -
|
| - if (updateOutline)
|
| - newBlockStyle->setOutlineFromStyle(newStyle);
|
| -
|
| - if (updatePosition) {
|
| - // If we are no longer in-flow positioned but our descendant block(s) still have an in-flow positioned ancestor then
|
| - // their containing anonymous block should keep its in-flow positioning.
|
| - if (oldStyle.hasInFlowPosition() && inFlowPositionedInlineAncestor(toLayoutBlock(block)->inlineElementContinuation()))
|
| - continue;
|
| - newBlockStyle->setPosition(newStyle.position());
|
| - }
|
| + // If we are no longer in-flow positioned but our descendant block(s) still have an in-flow positioned ancestor then
|
| + // their containing anonymous block should keep its in-flow positioning.
|
| + if (oldStyle.hasInFlowPosition() && inFlowPositionedInlineAncestor(toLayoutBlock(block)->inlineElementContinuation()))
|
| + continue;
|
|
|
| + RefPtr<ComputedStyle> newBlockStyle = ComputedStyle::clone(block->styleRef());
|
| + newBlockStyle->setPosition(newStyle.position());
|
| block->setStyle(newBlockStyle);
|
| }
|
| }
|
| @@ -205,8 +180,11 @@ void LayoutInline::styleDidChange(StyleDifference diff, const ComputedStyle* old
|
| if (continuation && oldStyle) {
|
| ASSERT(endOfContinuation);
|
| LayoutObject* block = containingBlock()->nextSibling();
|
| - if (block && block->isAnonymousBlock())
|
| - updateStyleOfAnonymousBlockContinuations(block, newStyle, *oldStyle, endOfContinuation->containingBlock());
|
| + // If an inline's in-flow positioning has changed then any descendant blocks will need to change their styles accordingly.
|
| + if (block && block->isAnonymousBlock()
|
| + && newStyle.position() != oldStyle->position()
|
| + && (newStyle.hasInFlowPosition() || oldStyle->hasInFlowPosition()))
|
| + updateInFlowPositionOfAnonymousBlockContinuations(block, newStyle, *oldStyle, endOfContinuation->containingBlock());
|
| }
|
|
|
| if (!alwaysCreateLineBoxes()) {
|
| @@ -336,10 +314,6 @@ void LayoutInline::addChildIgnoringContinuation(LayoutObject* newChild, LayoutOb
|
| if (LayoutObject* positionedAncestor = inFlowPositionedInlineAncestor(this))
|
| newStyle->setPosition(positionedAncestor->style()->position());
|
|
|
| - // Push outline style to the block continuation.
|
| - if (!newStyle->isOutlineEquivalent(style()))
|
| - newStyle->setOutlineFromStyle(*style());
|
| -
|
| LayoutBlockFlow* newBox = LayoutBlockFlow::createAnonymous(&document());
|
| newBox->setStyle(newStyle.release());
|
| LayoutBoxModelObject* oldContinuation = continuation();
|
|
|