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 3b32e5defe7d194e9abbc676c5f8efd2c8d0a902..5a654f7d154e8c0c7485edef1363b2fd1cf8ef16 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp |
@@ -1105,15 +1105,13 @@ void LayoutGrid::ensureGridSize(size_t maximumRowSize, size_t maximumColumnSize) |
void LayoutGrid::insertItemIntoGrid(LayoutBox& child, const GridCoordinate& coordinate) |
{ |
+ RELEASE_ASSERT(coordinate.rows.isDefinite() && coordinate.columns.isDefinite()); |
ensureGridSize(coordinate.rows.resolvedFinalPosition().toInt(), coordinate.columns.resolvedFinalPosition().toInt()); |
for (GridSpan::iterator row = coordinate.rows.begin(); row != coordinate.rows.end(); ++row) { |
for (GridSpan::iterator column = coordinate.columns.begin(); column != coordinate.columns.end(); ++column) |
m_grid[row.toInt()][column.toInt()].append(&child); |
} |
- |
- RELEASE_ASSERT(!m_gridItemCoordinate.contains(&child)); |
- m_gridItemCoordinate.set(&child, coordinate); |
} |
void LayoutGrid::placeItemsOnGrid() |
@@ -1134,17 +1132,16 @@ void LayoutGrid::placeItemsOnGrid() |
if (child->isOutOfFlowPositioned()) |
continue; |
- GridSpan rowPositions = GridResolvedPosition::resolveGridPositionsFromStyle(*style(), *child, ForRows); |
- GridSpan columnPositions = GridResolvedPosition::resolveGridPositionsFromStyle(*style(), *child, ForColumns); |
- if (!rowPositions.isDefinite() || !columnPositions.isDefinite()) { |
- GridSpan majorAxisPositions = (autoPlacementMajorAxisDirection() == ForColumns) ? columnPositions : rowPositions; |
+ GridCoordinate coordinate = cachedGridCoordinate(*child); |
+ if (!coordinate.rows.isDefinite() || !coordinate.columns.isDefinite()) { |
+ GridSpan majorAxisPositions = (autoPlacementMajorAxisDirection() == ForColumns) ? coordinate.columns : coordinate.rows; |
if (!majorAxisPositions.isDefinite()) |
autoMajorAxisAutoGridItems.append(child); |
else |
specifiedMajorAxisAutoGridItems.append(child); |
continue; |
} |
- insertItemIntoGrid(*child, GridCoordinate(rowPositions, columnPositions)); |
+ insertItemIntoGrid(*child, coordinate); |
} |
ASSERT(gridRowCount() >= GridResolvedPosition::explicitGridRowCount(*style())); |
@@ -1154,6 +1151,16 @@ void LayoutGrid::placeItemsOnGrid() |
placeAutoMajorAxisItemsOnGrid(autoMajorAxisAutoGridItems); |
m_grid.shrinkToFit(); |
+ |
+#if ENABLE(ASSERT) |
+ for (LayoutBox* child = m_orderIterator.first(); child; child = m_orderIterator.next()) { |
+ if (child->isOutOfFlowPositioned()) |
+ continue; |
+ |
+ GridCoordinate coordinate = cachedGridCoordinate(*child); |
+ ASSERT(coordinate.rows.isDefinite() && coordinate.columns.isDefinite()); |
+ } |
+#endif |
} |
void LayoutGrid::populateExplicitGridAndOrderIterator() |
@@ -1175,6 +1182,7 @@ void LayoutGrid::populateExplicitGridAndOrderIterator() |
// This function bypasses the cache (cachedGridCoordinate()) as it is used to build it. |
GridSpan rowPositions = GridResolvedPosition::resolveGridPositionsFromStyle(*style(), *child, ForRows); |
GridSpan columnPositions = GridResolvedPosition::resolveGridPositionsFromStyle(*style(), *child, ForColumns); |
+ m_gridItemCoordinate.set(child, GridCoordinate(rowPositions, columnPositions)); |
// |positions| is 0 if we need to run the auto-placement algorithm. |
if (rowPositions.isDefinite()) { |
@@ -1218,7 +1226,9 @@ void LayoutGrid::placeSpecifiedMajorAxisItemsOnGrid(const Vector<LayoutBox*>& au |
HashMap<unsigned, unsigned, DefaultHash<unsigned>::Hash, WTF::UnsignedWithZeroKeyHashTraits<unsigned>> minorAxisCursors; |
for (const auto& autoGridItem : autoGridItems) { |
- GridSpan majorAxisPositions = GridResolvedPosition::resolveGridPositionsFromStyle(*style(), *autoGridItem, autoPlacementMajorAxisDirection()); |
+ GridSpan majorAxisPositions = cachedGridSpan(*autoGridItem, autoPlacementMajorAxisDirection()); |
+ ASSERT(majorAxisPositions.isDefinite()); |
+ ASSERT(!cachedGridSpan(*autoGridItem, autoPlacementMinorAxisDirection()).isDefinite()); |
GridSpan minorAxisPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(*style(), *autoGridItem, autoPlacementMinorAxisDirection(), GridResolvedPosition(0)); |
unsigned majorAxisInitialPosition = majorAxisPositions.resolvedInitialPosition().toInt(); |
@@ -1226,6 +1236,8 @@ void LayoutGrid::placeSpecifiedMajorAxisItemsOnGrid(const Vector<LayoutBox*>& au |
OwnPtr<GridCoordinate> emptyGridArea = iterator.nextEmptyGridArea(majorAxisPositions.integerSpan(), minorAxisPositions.integerSpan()); |
if (!emptyGridArea) |
emptyGridArea = createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(*autoGridItem, autoPlacementMajorAxisDirection(), majorAxisPositions); |
+ |
+ m_gridItemCoordinate.set(autoGridItem, *emptyGridArea); |
insertItemIntoGrid(*autoGridItem, *emptyGridArea); |
if (!isGridAutoFlowDense) |
@@ -1251,8 +1263,8 @@ void LayoutGrid::placeAutoMajorAxisItemsOnGrid(const Vector<LayoutBox*>& autoGri |
void LayoutGrid::placeAutoMajorAxisItemOnGrid(LayoutBox& gridItem, std::pair<size_t, size_t>& autoPlacementCursor) |
{ |
- GridSpan minorAxisPositions = GridResolvedPosition::resolveGridPositionsFromStyle(*style(), gridItem, autoPlacementMinorAxisDirection()); |
- ASSERT(!GridResolvedPosition::resolveGridPositionsFromStyle(*style(), gridItem, autoPlacementMajorAxisDirection()).isDefinite()); |
+ GridSpan minorAxisPositions = cachedGridSpan(gridItem, autoPlacementMinorAxisDirection()); |
+ ASSERT(!cachedGridSpan(gridItem, autoPlacementMajorAxisDirection()).isDefinite()); |
GridSpan majorAxisPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(*style(), gridItem, autoPlacementMajorAxisDirection(), GridResolvedPosition(0)); |
const size_t endOfMajorAxis = (autoPlacementMajorAxisDirection() == ForColumns) ? gridColumnCount() : gridRowCount(); |
@@ -1299,6 +1311,7 @@ void LayoutGrid::placeAutoMajorAxisItemOnGrid(LayoutBox& gridItem, std::pair<siz |
emptyGridArea = createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(gridItem, autoPlacementMinorAxisDirection(), minorAxisPositions); |
} |
+ m_gridItemCoordinate.set(&gridItem, *emptyGridArea); |
insertItemIntoGrid(gridItem, *emptyGridArea); |
// Move auto-placement cursor to the new position. |
autoPlacementCursor.first = emptyGridArea->rows.resolvedInitialPosition().toInt(); |