| 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;
|
| }
|
|
|