| 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 304d82fbd3b8b1c4e6423f95f2c05fca79e6325e..c88a0d6d0cfd4fc5ce29a4254c316d41aeeb7329 100644
|
| --- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
|
| +++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
|
| @@ -11,6 +11,7 @@
|
| #include "core/css/CSSFontFaceSrcValue.h"
|
| #include "core/css/CSSFontFeatureValue.h"
|
| #include "core/css/CSSFunctionValue.h"
|
| +#include "core/css/CSSPathValue.h"
|
| #include "core/css/CSSPrimitiveValueMappings.h"
|
| #include "core/css/CSSQuadValue.h"
|
| #include "core/css/CSSSVGDocumentValue.h"
|
| @@ -26,6 +27,7 @@
|
| #include "core/css/parser/CSSParserValues.h"
|
| #include "core/frame/UseCounter.h"
|
| #include "core/layout/LayoutTheme.h"
|
| +#include "core/svg/SVGPathUtilities.h"
|
| #include "wtf/text/StringBuilder.h"
|
|
|
| namespace blink {
|
| @@ -1422,7 +1424,7 @@ static PassRefPtrWillBeRawPtr<CSSValue> consumeShadow(CSSParserTokenRange& range
|
| return shadowValueList;
|
| }
|
|
|
| -static PassRefPtrWillBeRawPtr<CSSFunctionValue> consumeFilterFunction(CSSParserTokenRange& range, const CSSParserContext& context)
|
| +static PassRefPtrWillBeRawPtr<CSSFunctionValue> consumeFilterFunction(CSSParserTokenRange& range, const CSSParserContext& context)
|
| {
|
| CSSValueID filterType = range.peek().functionId();
|
| if (filterType < CSSValueInvert || filterType > CSSValueDropShadow)
|
| @@ -1464,7 +1466,7 @@ static PassRefPtrWillBeRawPtr<CSSFunctionValue> consumeFilterFunction(CSSParserT
|
| return filterValue.release();
|
| }
|
|
|
| -static PassRefPtrWillBeRawPtr<CSSValue> consumeFilter(CSSParserTokenRange& range, const CSSParserContext& context)
|
| +static PassRefPtrWillBeRawPtr<CSSValue> consumeFilter(CSSParserTokenRange& range, const CSSParserContext& context)
|
| {
|
| if (range.peek().id() == CSSValueNone)
|
| return consumeIdent(range);
|
| @@ -1505,6 +1507,49 @@ static PassRefPtrWillBeRawPtr<CSSValue> consumeTextDecorationLine(CSSParserToken
|
| return list.release();
|
| }
|
|
|
| +static PassRefPtrWillBeRawPtr<CSSValue> consumeMotionPath(CSSParserTokenRange& range)
|
| +{
|
| + CSSValueID id = range.peek().id();
|
| + if (id == CSSValueNone)
|
| + return consumeIdent(range);
|
| +
|
| + // FIXME: Add support for <url>, <basic-shape>, <geometry-box>.
|
| + if (range.peek().functionId() != CSSValuePath)
|
| + return nullptr;
|
| +
|
| + // FIXME: Add support for <fill-rule>.
|
| + CSSParserTokenRange functionRange = range;
|
| + CSSParserTokenRange functionArgs = consumeFunction(functionRange);
|
| +
|
| + if (functionArgs.peek().type() != StringToken)
|
| + return nullptr;
|
| + String pathString = functionArgs.consumeIncludingWhitespace().value();
|
| + Path path;
|
| + if (!buildPathFromString(pathString, path) || !functionArgs.atEnd())
|
| + return nullptr;
|
| +
|
| + range = functionRange;
|
| + return CSSPathValue::create(pathString);
|
| +}
|
| +
|
| +static PassRefPtrWillBeRawPtr<CSSValue> consumeMotionRotation(CSSParserTokenRange& range, CSSParserMode cssParserMode)
|
| +{
|
| + RefPtrWillBeRawPtr<CSSValue> angle = consumeAngle(range, cssParserMode);
|
| + RefPtrWillBeRawPtr<CSSValue> keyword = consumeIdent<CSSValueAuto, CSSValueReverse>(range);
|
| + if (!angle && !keyword)
|
| + return nullptr;
|
| +
|
| + if (!angle)
|
| + angle = consumeAngle(range, cssParserMode);
|
| +
|
| + RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated();
|
| + if (keyword)
|
| + list->append(keyword.release());
|
| + if (angle)
|
| + list->append(angle.release());
|
| + return list.release();
|
| +}
|
| +
|
| PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSPropertyID unresolvedProperty)
|
| {
|
| CSSPropertyID property = resolveCSSPropertyID(unresolvedProperty);
|
| @@ -1621,6 +1666,15 @@ PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSProperty
|
| case CSSPropertyWebkitTextDecorationsInEffect:
|
| case CSSPropertyTextDecorationLine:
|
| return consumeTextDecorationLine(m_range);
|
| + case CSSPropertyMotionPath:
|
| + ASSERT(RuntimeEnabledFeatures::cssMotionPathEnabled());
|
| + return consumeMotionPath(m_range);
|
| + case CSSPropertyMotionOffset:
|
| + ASSERT(RuntimeEnabledFeatures::cssMotionPathEnabled());
|
| + return consumeLengthOrPercent(m_range, m_context.mode(), ValueRangeAll);
|
| + case CSSPropertyMotionRotation:
|
| + ASSERT(RuntimeEnabledFeatures::cssMotionPathEnabled());
|
| + return consumeMotionRotation(m_range, m_context.mode());
|
| default:
|
| return nullptr;
|
| }
|
| @@ -2092,6 +2146,9 @@ bool CSSPropertyParser::parseShorthand(CSSPropertyID unresolvedProperty, bool im
|
| addProperty(CSSPropertyTextDecoration, textDecoration.release(), important);
|
| return true;
|
| }
|
| + case CSSPropertyMotion:
|
| + ASSERT(RuntimeEnabledFeatures::cssMotionPathEnabled());
|
| + return consumeShorthandGreedily(motionShorthand(), important);
|
| default:
|
| m_currentShorthand = oldShorthand;
|
| return false;
|
|
|