Chromium Code Reviews| Index: Source/core/rendering/RenderGrid.cpp | 
| diff --git a/Source/core/rendering/RenderGrid.cpp b/Source/core/rendering/RenderGrid.cpp | 
| index e5f2e11fe974c9be408d69bfdc7022623bae776f..d2390ff0b012b3be49d34a314d6cfdb71014c508 100644 | 
| --- a/Source/core/rendering/RenderGrid.cpp | 
| +++ b/Source/core/rendering/RenderGrid.cpp | 
| @@ -566,7 +566,6 @@ LayoutUnit RenderGrid::logicalContentHeightForChild(RenderBox* child, Vector<Gri | 
| if (child->style()->logicalHeight().isPercent()) | 
| layoutScope.setNeedsLayout(child); | 
| - child->setOverrideContainingBlockContentLogicalWidth(gridAreaBreadthForChild(child, ForColumns, columnTracks)); | 
| // If |child| has a percentage logical height, we shouldn't let it override its intrinsic height, which is | 
| // what we are interested in here. Thus we need to set the override logical height to -1 (no possible resolution). | 
| child->setOverrideContainingBlockContentLogicalHeight(-1); | 
| @@ -615,6 +614,16 @@ void RenderGrid::resolveContentBasedTrackSizingFunctions(GridTrackSizingDirectio | 
| for (size_t i = 0; i < sizingData.contentSizedTracksIndex.size(); ++i) { | 
| GridIterator iterator(m_grid, direction, sizingData.contentSizedTracksIndex[i]); | 
| while (RenderBox* gridItem = iterator.nextGridItem()) { | 
| + LayoutUnit oldOverrideContainingBlockContentLogicalWidth = gridItem->hasOverrideContainingBlockLogicalWidth() ? gridItem->overrideContainingBlockContentLogicalWidth() : LayoutUnit(); | 
| + LayoutUnit overrideContainingBlockContentLogicalWidth = gridAreaBreadthForChild(gridItem, ForColumns, sizingData.columnTracks); | 
| + | 
| + SubtreeLayoutScope layoutScope(gridItem); | 
| + if ((oldOverrideContainingBlockContentLogicalWidth != overrideContainingBlockContentLogicalWidth) && breathIsFlexOrContentSizedForChild(gridItem, ForColumns)) | 
| + layoutScope.setNeedsLayout(gridItem); | 
| + | 
| + gridItem->setOverrideContainingBlockContentLogicalWidth(overrideContainingBlockContentLogicalWidth); | 
| + gridItem->layoutIfNeeded(); | 
| 
 
Julien - ping for review
2014/02/07 00:13:57
I think I understand the problem now. The original
 
 | 
| + | 
| resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, gridItem, &GridTrackSize::hasMinOrMaxContentMinTrackBreadth, &RenderGrid::minContentForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth); | 
| resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, gridItem, &GridTrackSize::hasMaxContentMinTrackBreadth, &RenderGrid::maxContentForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth); | 
| resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, gridItem, &GridTrackSize::hasMinOrMaxContentMaxTrackBreadth, &RenderGrid::minContentForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth); | 
| @@ -627,6 +636,19 @@ void RenderGrid::resolveContentBasedTrackSizingFunctions(GridTrackSizingDirectio | 
| } | 
| } | 
| +bool RenderGrid::breathIsFlexOrContentSizedForChild(RenderBox* child, GridTrackSizingDirection direction) const | 
| 
 
Julien - ping for review
2014/02/07 00:13:57
If you think of it, this check is unneeded as we o
 
 | 
| +{ | 
| + const GridCoordinate& coordinate = cachedGridCoordinate(child); | 
| + const size_t initial = (direction == ForColumns) ? coordinate.columns.initialPositionIndex : coordinate.rows.initialPositionIndex; | 
| + const size_t final = (direction == ForColumns) ? coordinate.columns.finalPositionIndex : coordinate.rows.finalPositionIndex; | 
| + for (size_t i = initial; i <= final; i++) { | 
| + const GridTrackSize& trackSize = gridTrackSize(direction, i); | 
| + if (trackSize.maxTrackBreadth().isFlex() || trackSize.maxTrackBreadth().isContentSized()) | 
| + return true; | 
| + } | 
| + return false; | 
| +} | 
| + | 
| void RenderGrid::resolveContentBasedTrackSizingFunctionsForItems(GridTrackSizingDirection direction, GridSizingData& sizingData, RenderBox* gridItem, FilterFunction filterFunction, SizingFunction sizingFunction, AccumulatorGetter trackGetter, AccumulatorGrowFunction trackGrowthFunction) | 
| { | 
| const GridCoordinate coordinate = cachedGridCoordinate(gridItem); |