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

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

Issue 1148873005: Parsing CSS properties for scroll snap points (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fix comment Created 5 years, 6 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
« no previous file with comments | « Source/core/css/parser/CSSPropertyParser.h ('k') | Source/core/css/resolver/StyleBuilderConverter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/css/parser/CSSPropertyParser.cpp
diff --git a/Source/core/css/parser/CSSPropertyParser.cpp b/Source/core/css/parser/CSSPropertyParser.cpp
index a7170fdd2247855c091cedce0ce9daf81274f9ac..e967ef84f4d61c0558470f75fc6787bd02f43089 100644
--- a/Source/core/css/parser/CSSPropertyParser.cpp
+++ b/Source/core/css/parser/CSSPropertyParser.cpp
@@ -727,7 +727,7 @@ bool CSSPropertyParser::parseValue(CSSPropertyID unresolvedProperty, bool import
return result;
}
case CSSPropertyObjectPosition:
- parsedValue = parseObjectPosition();
+ parsedValue = parsePosition(m_valueList);
break;
case CSSPropertyListStyleImage: // <uri> | none | inherit
case CSSPropertyBorderImageSource:
@@ -1495,6 +1495,17 @@ bool CSSPropertyParser::parseValue(CSSPropertyID unresolvedProperty, bool import
validPrimitive = false;
break;
+ case CSSPropertyScrollSnapPointsX:
+ case CSSPropertyScrollSnapPointsY:
+ parsedValue = parseScrollSnapPoints();
+ break;
+ case CSSPropertyScrollSnapCoordinate:
+ parsedValue = parseScrollSnapCoordinate();
+ break;
+ case CSSPropertyScrollSnapDestination:
+ parsedValue = parsePosition(m_valueList);
+ break;
+
default:
return parseSVGValue(propId, important);
}
@@ -2008,6 +2019,44 @@ bool CSSPropertyParser::parse4Values(CSSPropertyID propId, const CSSPropertyID *
return true;
}
+PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseScrollSnapPoints()
+{
+ CSSParserValue* value = m_valueList->current();
+
+ if (value->id == CSSValueNone) {
+ m_valueList->next();
+ return cssValuePool().createIdentifierValue(CSSValueNone);
+ }
+
+ if (value->unit == CSSParserValue::Function && value->function->id == CSSValueRepeat) {
+ // The spec defines the following grammar: repeat( <length>)
+ CSSParserValueList* arguments = value->function->args.get();
+ if (!arguments || arguments->size() != 1)
+ return nullptr;
+
+ CSSParserValue* repeatValue = arguments->valueAt(0);
+ if (!validUnit(repeatValue, FNonNeg | FLength | FPercent))
+ return nullptr;
+
+ RefPtrWillBeRawPtr<CSSFunctionValue> result = CSSFunctionValue::create(CSSValueRepeat);
+ result->append(parseValidPrimitive(repeatValue->id, repeatValue));
+ m_valueList->next();
+ return result.release();
+ }
+
+ return nullptr;
+}
+
+PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseScrollSnapCoordinate()
+{
+ if (m_valueList->current()->id == CSSValueNone) {
+ m_valueList->next();
+ return cssValuePool().createIdentifierValue(CSSValueNone);
+ }
+
+ return parsePositionList(m_valueList);
+}
+
PassRefPtrWillBeRawPtr<CSSPrimitiveValue> CSSPropertyParser::parsePage()
{
CSSParserValue* value = m_valueList->current();
@@ -5554,16 +5603,37 @@ bool CSSPropertyParser::parseFlex(CSSParserValueList* args, bool important)
return true;
}
-PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseObjectPosition()
+PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parsePosition(CSSParserValueList* valueList)
{
RefPtrWillBeRawPtr<CSSValue> xValue = nullptr;
RefPtrWillBeRawPtr<CSSValue> yValue = nullptr;
- parseFillPosition(m_valueList, xValue, yValue);
+ parseFillPosition(valueList, xValue, yValue);
if (!xValue || !yValue)
return nullptr;
return createPrimitiveValuePair(toCSSPrimitiveValue(xValue.get()), toCSSPrimitiveValue(yValue.get()), Pair::KeepIdenticalValues);
}
+// Parses a list of comma separated positions. i.e., <position>#
+PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parsePositionList(CSSParserValueList* valueList)
+{
+ RefPtrWillBeRawPtr<CSSValueList> positions = CSSValueList::createCommaSeparated();
+ while (true) {
+ // parsePosition consumes values until it reaches a separator [,/],
+ // an invalid token, or end of the list
+ RefPtrWillBeRawPtr<CSSValue> position = parsePosition(valueList);
+ if (!position)
+ return nullptr;
+ positions->append(position);
+
+ if (!valueList->current())
+ break;
+ if (!consumeComma(valueList) || !valueList->current())
+ return nullptr;
+ }
+
+ return positions.release();
+}
+
class BorderImageParseContext {
STACK_ALLOCATED();
public:
@@ -7155,6 +7225,7 @@ PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseFilter()
return list.release();
}
+
PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseTransformOrigin()
{
CSSParserValue* value = m_valueList->current();
« no previous file with comments | « Source/core/css/parser/CSSPropertyParser.h ('k') | Source/core/css/resolver/StyleBuilderConverter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698