Index: third_party/WebKit/Source/core/layout/LayoutBlock.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlock.cpp b/third_party/WebKit/Source/core/layout/LayoutBlock.cpp |
index 884d88c7c867f4c4d64bfbc974ddf4acb98d2b54..e3a14b1d0b82ba26b60094f44dde8da97da36ce2 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutBlock.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutBlock.cpp |
@@ -1170,13 +1170,15 @@ LayoutUnit LayoutBlock::marginIntrinsicLogicalWidthForChild(LayoutBox& child) co |
return margin; |
} |
-static bool needsLayoutDueToStaticPosition(LayoutBox* child) |
+static bool needsLayoutDueToMovement(LayoutBox* child, LayoutBox* containingBlock) |
{ |
// When a non-positioned block element moves, it may have positioned children that are |
// implicitly positioned relative to the non-positioned block. |
const ComputedStyle* style = child->style(); |
bool isHorizontal = style->isHorizontalWritingMode(); |
- if (style->hasStaticBlockPosition(isHorizontal)) { |
+ // A change in the containing block's block-direction borders will affect the child's height and position. |
+ bool checkForChangeInAvailableHeight = containingBlock->needsLayout() && containingBlock->style()->logicalHeight().isAuto() && (containingBlock->borderBefore() || containingBlock->borderAfter()); |
+ if (style->hasStaticBlockPosition(isHorizontal) || checkForChangeInAvailableHeight) { |
mstensho (USE GERRIT)
2016/02/09 09:08:51
I was wondering why we don't need to do the same f
rhogan
2016/02/09 18:38:30
If we can come up with additional use cases, defin
mstensho (USE GERRIT)
2016/02/10 10:39:10
<!DOCTYPE html>
<p>There should be a blue <em>squa
|
LayoutBox::LogicalExtentComputedValues computedValues; |
LayoutUnit currentLogicalTop = child->logicalTop(); |
LayoutUnit currentLogicalHeight = child->logicalHeight(); |
@@ -1216,7 +1218,7 @@ void LayoutBlock::layoutPositionedObjects(bool relayoutChildren, PositionedLayou |
continue; |
} |
- if (!positionedObject->normalChildNeedsLayout() && (relayoutChildren || needsLayoutDueToStaticPosition(positionedObject))) |
+ if (!positionedObject->normalChildNeedsLayout() && (relayoutChildren || needsLayoutDueToMovement(positionedObject, this))) |
layoutScope.setChildNeedsLayout(positionedObject); |
// If relayoutChildren is set and the child has percentage padding or an embedded content box, we also need to invalidate the childs pref widths. |