| 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 16481de35e7f39ff15dc10cffea1bf5fef404485..194c757d22b5e22cab50776aeda63a2358cec2d4 100644
|
| --- a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
|
| @@ -115,6 +115,10 @@ bool LayoutGrid::Grid::hasAnyGridItemPaintOrder() const {
|
|
|
| void LayoutGrid::Grid::setAutoRepeatTracks(size_t autoRepeatRows,
|
| size_t autoRepeatColumns) {
|
| + DCHECK_GE(static_cast<unsigned>(kGridMaxTracks),
|
| + numTracks(ForRows) + autoRepeatRows);
|
| + DCHECK_GE(static_cast<unsigned>(kGridMaxTracks),
|
| + numTracks(ForColumns) + autoRepeatColumns);
|
| m_autoRepeatRows = autoRepeatRows;
|
| m_autoRepeatColumns = autoRepeatColumns;
|
| }
|
| @@ -2042,13 +2046,6 @@ size_t LayoutGrid::computeAutoRepeatTracksCount(
|
| if (needsToFulfillMinimumSize)
|
| ++repetitions;
|
|
|
| - // Clamp the number of repetitions so we don't end up with too many tracks.
|
| - if (repetitions > kGridMaxTracks) {
|
| - DCHECK_GT(autoRepeatTrackListLength, 0u);
|
| - repetitions =
|
| - (kGridMaxTracks - trackSizes.size()) / autoRepeatTrackListLength;
|
| - }
|
| -
|
| return repetitions * autoRepeatTrackListLength;
|
| }
|
|
|
| @@ -2089,12 +2086,35 @@ LayoutGrid::computeEmptyTracksForAutoRepeat(
|
| return emptyTrackIndexes;
|
| }
|
|
|
| +size_t LayoutGrid::clampAutoRepeatTracks(GridTrackSizingDirection direction,
|
| + size_t autoRepeatTracks) const {
|
| + if (!autoRepeatTracks)
|
| + return 0;
|
| +
|
| + size_t insertionPoint = direction == ForColumns
|
| + ? styleRef().gridAutoRepeatColumnsInsertionPoint()
|
| + : styleRef().gridAutoRepeatRowsInsertionPoint();
|
| +
|
| + if (insertionPoint == 0)
|
| + return std::min<size_t>(autoRepeatTracks, kGridMaxTracks);
|
| +
|
| + if (insertionPoint >= kGridMaxTracks)
|
| + return 0;
|
| +
|
| + return std::min(autoRepeatTracks,
|
| + static_cast<size_t>(kGridMaxTracks) - insertionPoint);
|
| +}
|
| +
|
| void LayoutGrid::placeItemsOnGrid(LayoutGrid::Grid& grid,
|
| SizingOperation sizingOperation) const {
|
| size_t autoRepeatRows =
|
| computeAutoRepeatTracksCount(ForRows, sizingOperation);
|
| size_t autoRepeatColumns =
|
| computeAutoRepeatTracksCount(ForColumns, sizingOperation);
|
| +
|
| + autoRepeatRows = clampAutoRepeatTracks(ForRows, autoRepeatRows);
|
| + autoRepeatColumns = clampAutoRepeatTracks(ForColumns, autoRepeatColumns);
|
| +
|
| if (autoRepeatRows != grid.autoRepeatTracks(ForRows) ||
|
| autoRepeatColumns != grid.autoRepeatTracks(ForColumns)) {
|
| grid.setNeedsItemsPlacement(true);
|
|
|