Chromium Code Reviews| Index: third_party/WebKit/Source/core/layout/LayoutBox.cpp |
| diff --git a/third_party/WebKit/Source/core/layout/LayoutBox.cpp b/third_party/WebKit/Source/core/layout/LayoutBox.cpp |
| index fb82a7c0afc2369dcb56c705915c16ed387d0d39..2eabd41a472a538b2f76cd0ac81669ba83d564d0 100644 |
| --- a/third_party/WebKit/Source/core/layout/LayoutBox.cpp |
| +++ b/third_party/WebKit/Source/core/layout/LayoutBox.cpp |
| @@ -4670,6 +4670,23 @@ static void markBoxForRelayoutAfterSplit(LayoutBox* box) |
| box->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(LayoutInvalidationReason::AnonymousBlockChange); |
| } |
| +static bool collapseIfWillBecomeLoneAnonymousBlock(LayoutBox* child) |
|
mstensho (USE GERRIT)
2016/01/28 20:45:14
I think this would fit better in LayoutBlock. Doin
rhogan
2016/01/30 12:38:58
Waaaah! I moved it here because you thought it sho
|
| +{ |
| + if (!child->isAnonymousBlock()) |
| + return false; |
| + LayoutBlock* childBlock = toLayoutBlock(child); |
| + if (childBlock->beingDestroyed()) |
| + return false; |
| + // We're splitting from our previousSibling(). |
|
mstensho (USE GERRIT)
2016/01/28 20:45:14
I'm still uneasy about this.
I think we should ra
rhogan
2016/01/30 12:38:57
We're not guessing though - if we create postBox h
|
| + if (child->nextSibling() || childBlock->continuation()) |
| + return false; |
| + LayoutBlock* parent = child->containingBlock(); |
|
mstensho (USE GERRIT)
2016/01/28 20:45:14
This should always be the same as child->parent(),
rhogan
2016/01/30 12:38:57
Done.
|
| + if (parent->isRubyBase() || parent->isRubyRun()) |
| + return false; |
| + LayoutBlock::collapseAnonymousBlockChild(parent, childBlock); |
| + return true; |
| +} |
| + |
| LayoutObject* LayoutBox::splitAnonymousBoxesAroundChild(LayoutObject* beforeChild) |
| { |
| bool didSplitParentAnonymousBoxes = false; |
| @@ -4696,7 +4713,10 @@ LayoutObject* LayoutBox::splitAnonymousBoxesAroundChild(LayoutObject* beforeChil |
| beforeChild = postBox; |
| } else { |
| - beforeChild = boxToSplit; |
| + // If a lone anonymous block is now unnecessary collapse it away - this will make beforeChild's current |
| + // grandparent its parent so no need to set it before looping. |
| + if (!collapseIfWillBecomeLoneAnonymousBlock(boxToSplit)) |
| + beforeChild = boxToSplit; |
| } |
| } |