| Index: Source/core/rendering/style/GridCoordinate.h | 
| diff --git a/Source/core/rendering/style/GridCoordinate.h b/Source/core/rendering/style/GridCoordinate.h | 
| index 937d3f08b9b2c73688b0ada58ccf780c3d81b9c1..6c665c1fc3e8f309bfa509ef78c046f9c2b71292 100644 | 
| --- a/Source/core/rendering/style/GridCoordinate.h | 
| +++ b/Source/core/rendering/style/GridCoordinate.h | 
| @@ -31,7 +31,7 @@ | 
| #ifndef GridCoordinate_h | 
| #define GridCoordinate_h | 
|  | 
| -#include "core/rendering/style/GridPosition.h" | 
| +#include "core/rendering/style/GridResolvedPosition.h" | 
| #include "wtf/HashMap.h" | 
| #include "wtf/PassOwnPtr.h" | 
| #include "wtf/text/WTFString.h" | 
| @@ -42,25 +42,25 @@ namespace WebCore { | 
| // and |finalPositionIndex| are grid areas' indexes, NOT grid lines'. Iterating over the | 
| // span should include both |initialPositionIndex| and |finalPositionIndex| to be correct. | 
| struct GridSpan { | 
| -    static PassOwnPtr<GridSpan> create(size_t initialPosition, size_t finalPosition) | 
| +    static PassOwnPtr<GridSpan> create(const GridResolvedPosition& initialPosition, const GridResolvedPosition& finalPosition) | 
| { | 
| return adoptPtr(new GridSpan(initialPosition, finalPosition)); | 
| } | 
|  | 
| -    static PassOwnPtr<GridSpan> createWithSpanAgainstOpposite(size_t resolvedOppositePosition, const GridPosition& position, GridPositionSide side) | 
| +    static PassOwnPtr<GridSpan> createWithSpanAgainstOpposite(const GridResolvedPosition& resolvedOppositePosition, const GridPosition& position, GridPositionSide side) | 
| { | 
| // 'span 1' is contained inside a single grid track regardless of the direction. | 
| // That's why the CSS span value is one more than the offset we apply. | 
| size_t positionOffset = position.spanPosition() - 1; | 
| if (side == ColumnStartSide || side == RowStartSide) { | 
| -            size_t initialResolvedPosition = std::max<int>(0, resolvedOppositePosition - positionOffset); | 
| +            GridResolvedPosition initialResolvedPosition = GridResolvedPosition(std::max<int>(0, resolvedOppositePosition.integerPosition() - positionOffset)); | 
| return GridSpan::create(initialResolvedPosition, resolvedOppositePosition); | 
| } | 
|  | 
| -        return GridSpan::create(resolvedOppositePosition, resolvedOppositePosition + positionOffset); | 
| +        return GridSpan::create(resolvedOppositePosition, GridResolvedPosition(resolvedOppositePosition.integerPosition() + positionOffset)); | 
| } | 
|  | 
| -    static PassOwnPtr<GridSpan> createWithNamedSpanAgainstOpposite(size_t resolvedOppositePosition, const GridPosition& position, GridPositionSide side, const Vector<size_t>& gridLines) | 
| +    static PassOwnPtr<GridSpan> createWithNamedSpanAgainstOpposite(const GridResolvedPosition& resolvedOppositePosition, const GridPosition& position, GridPositionSide side, const Vector<size_t>& gridLines) | 
| { | 
| if (side == RowStartSide || side == ColumnStartSide) | 
| return createWithInitialNamedSpanAgainstOpposite(resolvedOppositePosition, position, gridLines); | 
| @@ -68,37 +68,38 @@ struct GridSpan { | 
| return createWithFinalNamedSpanAgainstOpposite(resolvedOppositePosition, position, gridLines); | 
| } | 
|  | 
| -    static PassOwnPtr<GridSpan> createWithInitialNamedSpanAgainstOpposite(size_t resolvedOppositePosition, const GridPosition& position, const Vector<size_t>& gridLines) | 
| +    static PassOwnPtr<GridSpan> createWithInitialNamedSpanAgainstOpposite(const GridResolvedPosition& resolvedOppositePosition, const GridPosition& position, const Vector<size_t>& gridLines) | 
| { | 
| // The grid line inequality needs to be strict (which doesn't match the after / end case) because |resolvedOppositePosition| | 
| // is already converted to an index in our grid representation (ie one was removed from the grid line to account for the side). | 
| size_t firstLineBeforeOppositePositionIndex = 0; | 
| -        const size_t* firstLineBeforeOppositePosition = std::lower_bound(gridLines.begin(), gridLines.end(), resolvedOppositePosition); | 
| +        const size_t* firstLineBeforeOppositePosition = std::lower_bound(gridLines.begin(), gridLines.end(), resolvedOppositePosition.integerPosition()); | 
| if (firstLineBeforeOppositePosition != gridLines.end()) | 
| firstLineBeforeOppositePositionIndex = firstLineBeforeOppositePosition - gridLines.begin(); | 
|  | 
| size_t gridLineIndex = std::max<int>(0, firstLineBeforeOppositePositionIndex - position.spanPosition() + 1); | 
| size_t resolvedGridLinePosition = gridLines[gridLineIndex]; | 
| -        if (resolvedGridLinePosition > resolvedOppositePosition) | 
| -            resolvedGridLinePosition = resolvedOppositePosition; | 
| -        return GridSpan::create(resolvedGridLinePosition, resolvedOppositePosition); | 
| +        if (resolvedGridLinePosition > resolvedOppositePosition.integerPosition()) | 
| +            resolvedGridLinePosition = resolvedOppositePosition.integerPosition(); | 
| +        return GridSpan::create(GridResolvedPosition(resolvedGridLinePosition), resolvedOppositePosition); | 
| } | 
|  | 
| -    static PassOwnPtr<GridSpan> createWithFinalNamedSpanAgainstOpposite(size_t resolvedOppositePosition, const GridPosition& position, const Vector<size_t>& gridLines) | 
| +    static PassOwnPtr<GridSpan> createWithFinalNamedSpanAgainstOpposite(const GridResolvedPosition& resolvedOppositePosition, const GridPosition& position, const Vector<size_t>& gridLines) | 
| { | 
| size_t firstLineAfterOppositePositionIndex = gridLines.size() - 1; | 
| -        const size_t* firstLineAfterOppositePosition = std::upper_bound(gridLines.begin(), gridLines.end(), resolvedOppositePosition); | 
| +        const size_t* firstLineAfterOppositePosition = std::upper_bound(gridLines.begin(), gridLines.end(), resolvedOppositePosition.integerPosition()); | 
| if (firstLineAfterOppositePosition != gridLines.end()) | 
| firstLineAfterOppositePositionIndex = firstLineAfterOppositePosition - gridLines.begin(); | 
|  | 
| size_t gridLineIndex = std::min(gridLines.size() - 1, firstLineAfterOppositePositionIndex + position.spanPosition() - 1); | 
| -        size_t resolvedGridLinePosition = GridPosition::adjustGridPositionForAfterEndSide(gridLines[gridLineIndex]); | 
| +        size_t resolvedGridLinePositionInteger = GridResolvedPosition::adjustGridPositionForAfterEndSide(gridLines[gridLineIndex]); | 
| +        GridResolvedPosition resolvedGridLinePosition = GridResolvedPosition(resolvedGridLinePositionInteger); | 
| if (resolvedGridLinePosition < resolvedOppositePosition) | 
| -            resolvedGridLinePosition = resolvedOppositePosition; | 
| +            resolvedGridLinePosition.setIntegerPosition(resolvedOppositePosition.integerPosition()); | 
| return GridSpan::create(resolvedOppositePosition, resolvedGridLinePosition); | 
| } | 
|  | 
| -    GridSpan(size_t initialPosition, size_t finalPosition) | 
| +    GridSpan(const GridResolvedPosition& initialPosition, const GridResolvedPosition& finalPosition) | 
| : initialPositionIndex(initialPosition) | 
| , finalPositionIndex(finalPosition) | 
| { | 
| @@ -110,8 +111,8 @@ struct GridSpan { | 
| return initialPositionIndex == o.initialPositionIndex && finalPositionIndex == o.finalPositionIndex; | 
| } | 
|  | 
| -    size_t initialPositionIndex; | 
| -    size_t finalPositionIndex; | 
| +    GridResolvedPosition initialPositionIndex; | 
| +    GridResolvedPosition finalPositionIndex; | 
| }; | 
|  | 
| // This represents a grid area that spans in both rows' and columns' direction. | 
|  |