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 ac08e774401aa3279283f0381f9c7d4476ba68f9..eef54fb123031d0c59c34df4a23d138abee928e3 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp |
@@ -640,14 +640,6 @@ void LayoutGrid::layoutBlock(bool relayoutChildren) { |
TextAutosizer::LayoutScope textAutosizerLayoutScope(this, &layoutScope); |
- // 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) |
- size_t autoRepeatColumns = m_grid.autoRepeatTracks(ForColumns); |
- if (autoRepeatColumns && |
- autoRepeatColumns != |
- computeAutoRepeatTracksCount(ForColumns, TrackSizing)) |
- dirtyGrid(); |
placeItemsOnGrid(m_grid, TrackSizing); |
GridSizingData sizingData(numTracks(ForColumns, m_grid), |
@@ -808,12 +800,12 @@ LayoutUnit LayoutGrid::guttersSize(const Grid& grid, |
void LayoutGrid::computeIntrinsicLogicalWidths( |
LayoutUnit& minLogicalWidth, |
LayoutUnit& maxLogicalWidth) const { |
- const_cast<LayoutGrid*>(this)->placeItemsOnGrid(const_cast<Grid&>(m_grid), |
- IntrinsicSizeComputation); |
+ Grid grid(this); |
+ placeItemsOnGrid(grid, IntrinsicSizeComputation); |
+ |
+ GridSizingData sizingData(numTracks(ForColumns, grid), |
+ numTracks(ForRows, grid), grid); |
- GridSizingData sizingData(numTracks(ForColumns, m_grid), |
- numTracks(ForRows, m_grid), |
- const_cast<Grid&>(m_grid)); |
computeTrackSizesForIndefiniteSize(ForColumns, sizingData, minLogicalWidth, |
maxLogicalWidth); |
@@ -2069,7 +2061,7 @@ LayoutGrid::computeEmptyTracksForAutoRepeat( |
size_t lastAutoRepeatTrack = |
firstAutoRepeatTrack + grid.autoRepeatTracks(direction); |
- if (!m_grid.hasGridItems()) { |
+ if (!grid.hasGridItems()) { |
emptyTrackIndexes = WTF::wrapUnique(new OrderedTrackIndexSet); |
for (size_t trackIndex = firstAutoRepeatTrack; |
trackIndex < lastAutoRepeatTrack; ++trackIndex) |
@@ -2089,23 +2081,21 @@ LayoutGrid::computeEmptyTracksForAutoRepeat( |
} |
void LayoutGrid::placeItemsOnGrid(LayoutGrid::Grid& grid, |
- SizingOperation sizingOperation) { |
- if (!grid.needsItemsPlacement()) |
- return; |
- |
- DCHECK(!grid.hasGridItems()); |
- |
- size_t autoRepeatColumns; |
+ SizingOperation sizingOperation) const { |
size_t autoRepeatRows = |
computeAutoRepeatTracksCount(ForRows, sizingOperation); |
- if (sizingOperation == IntrinsicSizeComputation) { |
- autoRepeatColumns = styleRef().gridAutoRepeatColumns().size(); |
- } else { |
- autoRepeatColumns = |
- computeAutoRepeatTracksCount(ForColumns, sizingOperation); |
+ size_t autoRepeatColumns = |
+ computeAutoRepeatTracksCount(ForColumns, sizingOperation); |
+ if (autoRepeatRows != grid.autoRepeatTracks(ForRows) || |
+ autoRepeatColumns != grid.autoRepeatTracks(ForColumns)) { |
+ grid.setNeedsItemsPlacement(true); |
+ grid.setAutoRepeatTracks(autoRepeatRows, autoRepeatColumns); |
} |
- m_grid.setAutoRepeatTracks(autoRepeatRows, autoRepeatColumns); |
+ if (!grid.needsItemsPlacement()) |
+ return; |
+ |
+ DCHECK(!grid.hasGridItems()); |
populateExplicitGridAndOrderIterator(grid); |
Vector<LayoutBox*> autoMajorAxisAutoGridItems; |