Index: third_party/WebKit/Source/core/layout/LayoutGrid.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp |
index ea4d9ff9a84367692c6ed0672561fcf4c7a4521a..f351588ef69d870e539f86b2391e8d8e7f63daf9 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp |
@@ -453,7 +453,7 @@ void LayoutGrid::layoutBlock(bool relayoutChildren) |
LayoutSize previousSize = size(); |
updateLogicalWidth(); |
- bool logicalHeightWasIndefinite = !hasDefiniteLogicalHeight(); |
+ m_hasDefiniteLogicalHeight = hasDefiniteLogicalHeight(); |
TextAutosizer::LayoutScope textAutosizerLayoutScope(this, &layoutScope); |
@@ -475,10 +475,10 @@ void LayoutGrid::layoutBlock(bool relayoutChildren) |
// 2- Next, the track sizing algorithm resolves the sizes of the grid rows, using the |
// grid column sizes calculated in the previous step. |
- if (logicalHeightWasIndefinite) |
- computeIntrinsicLogicalHeight(sizingData); |
- else |
+ if (cachedHasDefiniteLogicalHeight()) |
computeTrackSizesForDirection(ForRows, sizingData, availableLogicalHeight(ExcludeMarginBorderPadding)); |
+ else |
+ computeIntrinsicLogicalHeight(sizingData); |
setLogicalHeight(computeTrackBasedLogicalHeight(sizingData) + borderAndPaddingLogicalHeight() + scrollbarLogicalHeight()); |
LayoutUnit oldClientAfterEdge = clientLogicalBottom(); |
@@ -487,7 +487,7 @@ void LayoutGrid::layoutBlock(bool relayoutChildren) |
// The above call might have changed the grid's logical height depending on min|max height restrictions. |
// Update the sizes of the rows whose size depends on the logical height (also on definite|indefinite sizes). |
LayoutUnit availableSpaceForRows = contentLogicalHeight(); |
- if (logicalHeightWasIndefinite) |
+ if (!cachedHasDefiniteLogicalHeight()) |
computeTrackSizesForDirection(ForRows, sizingData, availableSpaceForRows); |
// 3- If the min-content contribution of any grid items have changed based on the row |
@@ -924,7 +924,7 @@ GridTrackSize LayoutGrid::gridTrackSize(GridTrackSizingDirection direction, size |
// If the logical width/height of the grid container is indefinite, percentage values are treated as <auto>. |
if (minTrackBreadth.hasPercentage() || maxTrackBreadth.hasPercentage()) { |
// For the inline axis this only happens when we're computing the intrinsic sizes (AvailableSpaceIndefinite). |
- if ((sizingOperation == IntrinsicSizeComputation) || (direction == ForRows && !hasDefiniteLogicalHeight())) { |
+ if ((sizingOperation == IntrinsicSizeComputation) || (direction == ForRows && !cachedHasDefiniteLogicalHeight())) { |
if (minTrackBreadth.hasPercentage()) |
minTrackBreadth = Length(Auto); |
if (maxTrackBreadth.hasPercentage()) |
@@ -2667,4 +2667,10 @@ void LayoutGrid::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& pa |
GridPainter(*this).paintChildren(paintInfo, paintOffset); |
} |
+bool LayoutGrid::cachedHasDefiniteLogicalHeight() const |
+{ |
+ SECURITY_DCHECK(m_hasDefiniteLogicalHeight); |
+ return m_hasDefiniteLogicalHeight.value(); |
+} |
+ |
} // namespace blink |