Index: Source/core/css/resolver/StyleAdjuster.cpp |
diff --git a/Source/core/css/resolver/StyleAdjuster.cpp b/Source/core/css/resolver/StyleAdjuster.cpp |
index a3792a971ef7e379fbaed5d1b1eab72f05aa9bad..dcc4fd74a968ab9fb916fa613e1f4bb429893bb5 100644 |
--- a/Source/core/css/resolver/StyleAdjuster.cpp |
+++ b/Source/core/css/resolver/StyleAdjuster.cpp |
@@ -363,7 +363,7 @@ void StyleAdjuster::adjustRenderStyle(RenderStyle* style, RenderStyle* parentSty |
if (e && e->hasTagName(iframeTag) && style->display() == INLINE && toHTMLIFrameElement(e)->shouldDisplaySeamlessly()) |
style->setDisplay(INLINE_BLOCK); |
- adjustGridItemPosition(style); |
+ adjustGridItemPosition(style, parentStyle); |
if (e && e->isSVGElement()) { |
// Spec: http://www.w3.org/TR/SVG/masking.html#OverflowProperty |
@@ -388,20 +388,35 @@ void StyleAdjuster::adjustRenderStyle(RenderStyle* style, RenderStyle* parentSty |
} |
} |
-void StyleAdjuster::adjustGridItemPosition(RenderStyle* style) const |
+void StyleAdjuster::adjustGridItemPosition(RenderStyle* style, RenderStyle* parentStyle) const |
{ |
+ const GridPosition& columnStartPosition = style->gridColumnStart(); |
+ const GridPosition& columnEndPosition = style->gridColumnEnd(); |
+ const GridPosition& rowStartPosition = style->gridRowStart(); |
+ const GridPosition& rowEndPosition = style->gridRowEnd(); |
+ |
// If opposing grid-placement properties both specify a grid span, they both compute to ‘auto’. |
- if (style->gridColumnStart().isSpan() && style->gridColumnEnd().isSpan()) { |
+ if (columnStartPosition.isSpan() && columnEndPosition.isSpan()) { |
style->setGridColumnStart(GridPosition()); |
style->setGridColumnEnd(GridPosition()); |
} |
- if (style->gridRowStart().isSpan() && style->gridRowEnd().isSpan()) { |
+ if (rowStartPosition.isSpan() && rowEndPosition.isSpan()) { |
style->setGridRowStart(GridPosition()); |
style->setGridRowEnd(GridPosition()); |
} |
-} |
+ // Unknown named grid area compute to 'auto'. |
+ const NamedGridAreaMap& map = parentStyle->namedGridArea(); |
+#define CLEAR_UNKNOWN_NAMED_AREA(prop, Prop) \ |
+ if (prop.isNamedGridArea() && !map.contains(prop.namedGridLine())) \ |
+ style->setGrid##Prop(GridPosition()); |
+ |
+ CLEAR_UNKNOWN_NAMED_AREA(columnStartPosition, ColumnStart); |
+ CLEAR_UNKNOWN_NAMED_AREA(columnEndPosition, ColumnEnd); |
+ CLEAR_UNKNOWN_NAMED_AREA(rowStartPosition, RowStart); |
+ CLEAR_UNKNOWN_NAMED_AREA(rowEndPosition, RowEnd); |
+} |
} |