| 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 a9d80d7ebbd8775def2668b9adf41c2c2b336d45..c0a775f9d25d4722d21a050190e45f19d4e0ab5a 100644
|
| --- a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
|
| @@ -464,7 +464,7 @@ void LayoutGrid::repeatTracksSizingIfNeeded(GridSizingData& sizingData,
|
| // all the cases with orthogonal flows require this extra cycle; we need a
|
| // more specific condition to detect whether child's min-content contribution
|
| // has changed or not.
|
| - if (m_hasAnyOrthogonalChild) {
|
| + if (!m_orthogonalChildren.isEmpty()) {
|
| computeTrackSizesForDefiniteSize(ForColumns, sizingData,
|
| availableSpaceForColumns);
|
| computeTrackSizesForDefiniteSize(ForRows, sizingData,
|
| @@ -487,6 +487,25 @@ void LayoutGrid::layoutBlock(bool relayoutChildren) {
|
|
|
| LayoutSize previousSize = size();
|
|
|
| + // We need to clear both own and containingBlock override sizes to
|
| + // ensure we get the same result when grid's intrinsic size is
|
| + // computed again in the updateLogicalWidth call bellow.
|
| + if (sizesLogicalWidthToFitContent(styleRef().logicalWidth()) ||
|
| + styleRef().logicalWidth().isIntrinsicOrAuto()) {
|
| + // We do cache orthogonal items during the placeItemsOnGrid call, which is
|
| + // executed later. However, we are
|
| + // only interested on running this logic when we are performing a
|
| + // relayout, hence we have already cached
|
| + // the orthogonal items.
|
| + for (auto* child : m_orthogonalChildren) {
|
| + if (child->isOutOfFlowPositioned())
|
| + continue;
|
| + child->clearOverrideSize();
|
| + child->clearContainingBlockOverrideSize();
|
| + child->forceLayout();
|
| + }
|
| + }
|
| +
|
| updateLogicalWidth();
|
| m_hasDefiniteLogicalHeight = hasDefiniteLogicalHeight();
|
|
|
| @@ -1913,14 +1932,14 @@ void LayoutGrid::placeItemsOnGrid(SizingOperation sizingOperation) {
|
|
|
| Vector<LayoutBox*> autoMajorAxisAutoGridItems;
|
| Vector<LayoutBox*> specifiedMajorAxisAutoGridItems;
|
| - m_hasAnyOrthogonalChild = false;
|
| + m_orthogonalChildren.shrink(0);
|
| for (LayoutBox* child = m_orderIterator.first(); child;
|
| child = m_orderIterator.next()) {
|
| if (child->isOutOfFlowPositioned())
|
| continue;
|
|
|
| - m_hasAnyOrthogonalChild =
|
| - m_hasAnyOrthogonalChild || isOrthogonalChild(*child);
|
| + if (isOrthogonalChild(*child))
|
| + m_orthogonalChildren.append(child);
|
|
|
| GridArea area = cachedGridArea(*child);
|
| if (!area.rows.isIndefinite())
|
|
|