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 120a49067fe9faafbcad86b71e173da1184f9885..816d91fc0e161728344bbba6368399dea1f37fc3 100644 |
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp |
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp |
@@ -2888,6 +2888,41 @@ static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> consumePerspective(CSSParserTok |
return nullptr; |
} |
+static PassRefPtrWillBeRawPtr<CSSValueList> consumePositionList(CSSParserTokenRange& range, CSSParserMode cssParserMode) |
+{ |
+ RefPtrWillBeRawPtr<CSSValueList> positions = CSSValueList::createCommaSeparated(); |
+ do { |
+ RefPtrWillBeRawPtr<CSSValue> position = consumePosition(range, cssParserMode, UnitlessQuirk::Forbid); |
+ if (!position) |
+ return nullptr; |
+ positions->append(position); |
+ } while (consumeCommaIncludingWhitespace(range)); |
+ return positions.release(); |
+} |
+ |
+static PassRefPtrWillBeRawPtr<CSSValue> consumeScrollSnapCoordinate(CSSParserTokenRange& range, CSSParserMode cssParserMode) |
+{ |
+ if (range.peek().id() == CSSValueNone) |
+ return consumeIdent(range); |
+ return consumePositionList(range, cssParserMode); |
+} |
+ |
+static PassRefPtrWillBeRawPtr<CSSValue> consumeScrollSnapPoints(CSSParserTokenRange& range, CSSParserMode cssParserMode) |
+{ |
+ if (range.peek().id() == CSSValueNone) |
+ return consumeIdent(range); |
+ if (range.peek().functionId() == CSSValueRepeat) { |
+ CSSParserTokenRange args = consumeFunction(range); |
+ RefPtrWillBeRawPtr<CSSPrimitiveValue> parsedValue = consumeLengthOrPercent(args, cssParserMode, ValueRangeNonNegative); |
+ if (args.atEnd() && parsedValue && (parsedValue->isCalculated() || parsedValue->getDoubleValue() > 0)) { |
+ RefPtrWillBeRawPtr<CSSFunctionValue> result = CSSFunctionValue::create(CSSValueRepeat); |
+ result->append(parsedValue.release()); |
+ return result.release(); |
+ } |
+ } |
+ return nullptr; |
+} |
+ |
PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSPropertyID unresolvedProperty) |
{ |
CSSPropertyID property = resolveCSSPropertyID(unresolvedProperty); |
@@ -3135,6 +3170,11 @@ PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSProperty |
return consumeImage(m_range, m_context); |
case CSSPropertyPerspective: |
return consumePerspective(m_range, m_context.mode(), unresolvedProperty); |
+ case CSSPropertyScrollSnapCoordinate: |
+ return consumeScrollSnapCoordinate(m_range, m_context.mode()); |
+ case CSSPropertyScrollSnapPointsX: |
+ case CSSPropertyScrollSnapPointsY: |
+ return consumeScrollSnapPoints(m_range, m_context.mode()); |
default: |
return nullptr; |
} |