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 6d8864e4a0d6d97a786ebe9bb66b5cfebf6bd4b9..c7c6509b3e232516a94be11981380ba8e2b03073 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp |
@@ -443,7 +443,11 @@ void LayoutGrid::layoutBlock(bool relayoutChildren) |
TextAutosizer::LayoutScope textAutosizerLayoutScope(this, &layoutScope); |
- placeItemsOnGrid(); |
+ // TODO(svillar): we won't need to do this once the intrinsic width computation is isolated |
+ // from the LayoutGrid object state (it should not touch any attribute) (see crbug.com/627812) |
+ if (m_autoRepeatColumns && m_autoRepeatColumns != computeAutoRepeatTracksCount(ForColumns)) |
+ dirtyGrid(); |
+ placeItemsOnGrid(TrackSizing); |
GridSizingData sizingData(gridColumnCount(), gridRowCount()); |
@@ -511,7 +515,7 @@ LayoutUnit LayoutGrid::guttersSize(GridTrackSizingDirection direction, size_t sp |
void LayoutGrid::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const |
{ |
- const_cast<LayoutGrid*>(this)->placeItemsOnGrid(); |
+ const_cast<LayoutGrid*>(this)->placeItemsOnGrid(IntrinsicSizeComputation); |
GridSizingData sizingData(gridColumnCount(), gridRowCount()); |
sizingData.freeSpaceForDirection(ForColumns) = LayoutUnit(); |
@@ -1384,14 +1388,17 @@ size_t LayoutGrid::computeAutoRepeatTracksCount(GridTrackSizingDirection directi |
return repetitions; |
} |
-void LayoutGrid::placeItemsOnGrid() |
+void LayoutGrid::placeItemsOnGrid(SizingOperation sizingOperation) |
{ |
if (!m_gridIsDirty) |
return; |
ASSERT(m_gridItemArea.isEmpty()); |
- m_autoRepeatColumns = computeAutoRepeatTracksCount(ForColumns); |
+ if (sizingOperation == IntrinsicSizeComputation) |
+ m_autoRepeatColumns = styleRef().gridAutoRepeatColumns().isEmpty() ? 0 : 1; |
+ else |
+ m_autoRepeatColumns = computeAutoRepeatTracksCount(ForColumns); |
m_autoRepeatRows = computeAutoRepeatTracksCount(ForRows); |
populateExplicitGridAndOrderIterator(); |
@@ -1631,6 +1638,8 @@ void LayoutGrid::dirtyGrid() |
m_gridItemArea.clear(); |
m_gridItemsOverflowingGridArea.resize(0); |
m_gridItemsIndexesMap.clear(); |
+ m_autoRepeatColumns = 0; |
+ m_autoRepeatRows = 0; |
m_gridIsDirty = true; |
} |