| Index: Source/core/rendering/RenderFlexibleBox.cpp
|
| diff --git a/Source/core/rendering/RenderFlexibleBox.cpp b/Source/core/rendering/RenderFlexibleBox.cpp
|
| index 101947da171ad711430ed55206bb94312d9ccae2..245b632674a26379e8a791691bc3f247c7656938 100644
|
| --- a/Source/core/rendering/RenderFlexibleBox.cpp
|
| +++ b/Source/core/rendering/RenderFlexibleBox.cpp
|
| @@ -609,7 +609,7 @@ bool RenderFlexibleBox::childPreferredMainAxisContentExtentRequiresLayout(Render
|
|
|
| LayoutUnit RenderFlexibleBox::preferredMainAxisContentExtentForChild(RenderBox& child, bool hasInfiniteLineLength, bool relayoutChildren)
|
| {
|
| - child.clearOverrideSize();
|
| + clearLogicalOverrideSize(child);
|
|
|
| if (child.style()->hasAspectRatio() || child.isImage() || child.isVideo() || child.isCanvas())
|
| UseCounter::count(document(), UseCounter::AspectRatioFlexItem);
|
| @@ -991,6 +991,14 @@ void RenderFlexibleBox::setLogicalOverrideSize(RenderBox& child, LayoutUnit chil
|
| child.setOverrideLogicalContentWidth(childPreferredSize - child.borderAndPaddingLogicalWidth());
|
| }
|
|
|
| +void RenderFlexibleBox::clearLogicalOverrideSize(RenderBox& child)
|
| +{
|
| + if (hasOrthogonalFlow(child))
|
| + child.clearOverrideLogicalContentHeight();
|
| + else
|
| + child.clearOverrideLogicalContentWidth();
|
| +}
|
| +
|
| void RenderFlexibleBox::prepareChildForPositionedLayout(RenderBox& child, LayoutUnit mainAxisOffset, LayoutUnit crossAxisOffset, PositionedLayoutMode layoutMode)
|
| {
|
| ASSERT(child.isOutOfFlowPositioned());
|
| @@ -1351,10 +1359,11 @@ void RenderFlexibleBox::applyStretchAlignmentToChild(RenderBox& child, LayoutUni
|
| LayoutUnit stretchedLogicalHeight = heightBeforeStretching + availableAlignmentSpaceForChildBeforeStretching(lineCrossAxisExtent, child);
|
| ASSERT(!child.needsLayout());
|
| LayoutUnit desiredLogicalHeight = child.constrainLogicalHeightByMinMax(stretchedLogicalHeight, heightBeforeStretching - child.borderAndPaddingLogicalHeight());
|
| + LayoutUnit desiredLogicalContentHeight = desiredLogicalHeight - child.borderAndPaddingLogicalHeight();
|
|
|
| // FIXME: Can avoid laying out here in some cases. See https://webkit.org/b/87905.
|
| - if (desiredLogicalHeight != child.logicalHeight()) {
|
| - child.setOverrideLogicalContentHeight(desiredLogicalHeight - child.borderAndPaddingLogicalHeight());
|
| + if (desiredLogicalHeight != child.logicalHeight() || (!child.hasOverrideHeight() && toRenderBlock(child).hasPercentHeightDescendants())) {
|
| + child.setOverrideLogicalContentHeight(desiredLogicalContentHeight);
|
| child.setLogicalHeight(0);
|
| child.forceChildLayout();
|
| }
|
|
|