Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Unified Diff: third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp

Issue 2166393002: [css-grid] grid-auto-flow|row should take a <track-size>+ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Patch for landing v2 Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
index 4860e46454bfb0eeae8c9b1d16b99993403395cf..5e24766d623d5d570a7ab110d225e0d606d455ce 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
@@ -3478,13 +3478,20 @@ static bool consumeGridTrackRepeatFunction(CSSParserTokenRange& range, CSSParser
return true;
}
-static CSSValue* consumeGridTrackList(CSSParserTokenRange& range, CSSParserMode cssParserMode, bool allowRepeat = true)
+enum TrackListType { GridTemplate, GridTemplateNoRepeat, GridAuto };
+
+static CSSValue* consumeGridTrackList(CSSParserTokenRange& range, CSSParserMode cssParserMode, TrackListType trackListType)
{
+ bool allowGridLineNames = trackListType != GridAuto;
CSSValueList* values = CSSValueList::createSpaceSeparated();
CSSGridLineNamesValue* lineNames = consumeGridLineNames(range);
- if (lineNames)
+ if (lineNames) {
+ if (!allowGridLineNames)
+ return nullptr;
values->append(*lineNames);
+ }
+ bool allowRepeat = trackListType == GridTemplate;
bool seenAutoRepeat = false;
bool allTracksAreFixedSized = true;
do {
@@ -3507,8 +3514,11 @@ static CSSValue* consumeGridTrackList(CSSParserTokenRange& range, CSSParserMode
if (seenAutoRepeat && !allTracksAreFixedSized)
return nullptr;
lineNames = consumeGridLineNames(range);
- if (lineNames)
+ if (lineNames) {
+ if (!allowGridLineNames)
+ return nullptr;
values->append(*lineNames);
+ }
} while (!range.atEnd() && range.peek().type() != DelimiterToken);
return values;
}
@@ -3517,7 +3527,7 @@ static CSSValue* consumeGridTemplatesRowsOrColumns(CSSParserTokenRange& range, C
{
if (range.peek().id() == CSSValueNone)
return consumeIdent(range);
- return consumeGridTrackList(range, cssParserMode);
+ return consumeGridTrackList(range, cssParserMode, GridTemplate);
}
static CSSValue* consumeGridTemplateAreas(CSSParserTokenRange& range)
@@ -3954,7 +3964,7 @@ const CSSValue* CSSPropertyParser::parseSingleValue(CSSPropertyID unresolvedProp
case CSSPropertyGridAutoColumns:
case CSSPropertyGridAutoRows:
ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled());
- return consumeGridTrackSize(m_range, m_context.mode());
+ return consumeGridTrackList(m_range, m_context.mode(), GridAuto);
case CSSPropertyGridTemplateColumns:
case CSSPropertyGridTemplateRows:
ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled());
@@ -4881,7 +4891,7 @@ bool CSSPropertyParser::consumeGridTemplateRowsAndAreasAndColumns(CSSPropertyID
if (!m_range.atEnd()) {
if (!consumeSlashIncludingWhitespace(m_range))
return false;
- columnsValue = consumeGridTrackList(m_range, m_context.mode(), false);
+ columnsValue = consumeGridTrackList(m_range, m_context.mode(), GridTemplateNoRepeat);
if (!columnsValue || !m_range.atEnd())
return false;
} else {
@@ -4911,7 +4921,7 @@ bool CSSPropertyParser::consumeGridTemplateShorthand(CSSPropertyID shorthandId,
// 2- <grid-template-rows> / <grid-template-columns>
if (!rowsValue)
- rowsValue = consumeGridTrackList(m_range, m_context.mode());
+ rowsValue = consumeGridTrackList(m_range, m_context.mode(), GridTemplate);
if (rowsValue) {
if (!consumeSlashIncludingWhitespace(m_range))
@@ -4961,11 +4971,11 @@ bool CSSPropertyParser::consumeGridShorthand(bool important)
CSSValue* autoRowsValue = nullptr;
if (!m_range.atEnd()) {
- autoRowsValue = consumeGridTrackSize(m_range, m_context.mode());
+ autoRowsValue = consumeGridTrackList(m_range, m_context.mode(), GridAuto);
if (!autoRowsValue)
return false;
if (consumeSlashIncludingWhitespace(m_range)) {
- autoColumnsValue = consumeGridTrackSize(m_range, m_context.mode());
+ autoColumnsValue = consumeGridTrackList(m_range, m_context.mode(), GridAuto);
if (!autoColumnsValue)
return false;
}

Powered by Google App Engine
This is Rietveld 408576698