| 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 abe82415875d441110e5c8cdb72824cf39ddc35e..e79d4b84edbd8bafdee8f0e800d342289e7569ac 100644
|
| --- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
|
| +++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
|
| @@ -4499,6 +4499,58 @@ bool CSSPropertyParser::consumeLegacyBreakProperty(CSSPropertyID property, bool
|
| return true;
|
| }
|
|
|
| +static bool consumeBackgroundPosition(CSSParserTokenRange& range, const CSSParserContext& context, UnitlessQuirk unitless, RefPtrWillBeRawPtr<CSSValue>& resultX, RefPtrWillBeRawPtr<CSSValue>& resultY)
|
| +{
|
| + do {
|
| + RefPtrWillBeRawPtr<CSSValue> positionX = nullptr;
|
| + RefPtrWillBeRawPtr<CSSValue> positionY = nullptr;
|
| + if (!consumePosition(range, context.mode(), unitless, positionX, positionY))
|
| + return false;
|
| + addBackgroundValue(resultX, positionX);
|
| + addBackgroundValue(resultY, positionY);
|
| + } while (consumeCommaIncludingWhitespace(range));
|
| + return true;
|
| +}
|
| +
|
| +static bool consumeRepeatStyleComponent(CSSParserTokenRange& range, RefPtrWillBeRawPtr<CSSValue>& value1, RefPtrWillBeRawPtr<CSSValue>& value2, bool& implicit)
|
| +{
|
| + if (consumeIdent<CSSValueRepeatX>(range)) {
|
| + value1 = cssValuePool().createIdentifierValue(CSSValueRepeat);
|
| + value2 = cssValuePool().createIdentifierValue(CSSValueNoRepeat);
|
| + implicit = true;
|
| + return true;
|
| + }
|
| + if (consumeIdent<CSSValueRepeatY>(range)) {
|
| + value1 = cssValuePool().createIdentifierValue(CSSValueNoRepeat);
|
| + value2 = cssValuePool().createIdentifierValue(CSSValueRepeat);
|
| + implicit = true;
|
| + return true;
|
| + }
|
| + value1 = consumeIdent<CSSValueRepeat, CSSValueNoRepeat, CSSValueRound, CSSValueSpace>(range);
|
| + if (!value1)
|
| + return false;
|
| +
|
| + value2 = consumeIdent<CSSValueRepeat, CSSValueNoRepeat, CSSValueRound, CSSValueSpace>(range);
|
| + if (!value2) {
|
| + value2 = value1;
|
| + implicit = true;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| +static bool consumeRepeatStyle(CSSParserTokenRange& range, RefPtrWillBeRawPtr<CSSValue>& resultX, RefPtrWillBeRawPtr<CSSValue>& resultY, bool& implicit)
|
| +{
|
| + do {
|
| + RefPtrWillBeRawPtr<CSSValue> repeatX = nullptr;
|
| + RefPtrWillBeRawPtr<CSSValue> repeatY = nullptr;
|
| + if (!consumeRepeatStyleComponent(range, repeatX, repeatY, implicit))
|
| + return false;
|
| + addBackgroundValue(resultX, repeatX);
|
| + addBackgroundValue(resultY, repeatY);
|
| + } while (consumeCommaIncludingWhitespace(range));
|
| + return true;
|
| +}
|
| +
|
| bool CSSPropertyParser::parseShorthand(CSSPropertyID unresolvedProperty, bool important)
|
| {
|
| CSSPropertyID property = resolveCSSPropertyID(unresolvedProperty);
|
| @@ -4640,6 +4692,27 @@ bool CSSPropertyParser::parseShorthand(CSSPropertyID unresolvedProperty, bool im
|
| case CSSPropertyWebkitColumnBreakBefore:
|
| case CSSPropertyWebkitColumnBreakInside:
|
| return consumeLegacyBreakProperty(property, important);
|
| + case CSSPropertyWebkitMaskPosition:
|
| + case CSSPropertyBackgroundPosition: {
|
| + RefPtrWillBeRawPtr<CSSValue> resultX = nullptr;
|
| + RefPtrWillBeRawPtr<CSSValue> resultY = nullptr;
|
| + if (!consumeBackgroundPosition(m_range, m_context, UnitlessQuirk::Allow, resultX, resultY) || !m_range.atEnd())
|
| + return false;
|
| + addProperty(property == CSSPropertyBackgroundPosition ? CSSPropertyBackgroundPositionX : CSSPropertyWebkitMaskPositionX, resultX.release(), important);
|
| + addProperty(property == CSSPropertyBackgroundPosition ? CSSPropertyBackgroundPositionY : CSSPropertyWebkitMaskPositionY, resultY.release(), important);
|
| + return true;
|
| + }
|
| + case CSSPropertyBackgroundRepeat:
|
| + case CSSPropertyWebkitMaskRepeat: {
|
| + RefPtrWillBeRawPtr<CSSValue> resultX = nullptr;
|
| + RefPtrWillBeRawPtr<CSSValue> resultY = nullptr;
|
| + bool implicit = false;
|
| + if (!consumeRepeatStyle(m_range, resultX, resultY, implicit) || !m_range.atEnd())
|
| + return false;
|
| + addProperty(property == CSSPropertyBackgroundRepeat ? CSSPropertyBackgroundRepeatX : CSSPropertyWebkitMaskRepeatX, resultX.release(), important, implicit);
|
| + addProperty(property == CSSPropertyBackgroundRepeat ? CSSPropertyBackgroundRepeatY : CSSPropertyWebkitMaskRepeatY, resultY.release(), important, implicit);
|
| + return true;
|
| + }
|
| default:
|
| m_currentShorthand = oldShorthand;
|
| CSSParserValueList valueList(m_range);
|
|
|