Chromium Code Reviews| 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 74823b2295cd23ee6631267c0b8f68aa2298ac43..53c002d6168357066faca77152fb337667b062d6 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/CSSPrimitiveValueMappings.h" |
| +#include "core/css/CSSQuadValue.h" |
| #include "core/css/CSSStringValue.h" |
| #include "core/css/CSSURIValue.h" |
| #include "core/css/CSSUnicodeRangeValue.h" |
| @@ -754,6 +755,39 @@ static PassRefPtrWillBeRawPtr<CSSValue> consumeTextIndent(CSSParserTokenRange& r |
| return list.release(); |
| } |
| +static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> consumeShape(CSSParserTokenRange& range, CSSParserMode cssParserMode) |
|
Timothy Loh
2015/10/13 23:43:38
consumeShape -> consumeClipComponent?
|
| +{ |
| + if (range.peek().id() == CSSValueAuto) |
| + return consumeIdent(range); |
| + return consumeLength(range, cssParserMode, ValueRangeAll, UnitlessQuirk::Allow); |
| +} |
| + |
| +static PassRefPtrWillBeRawPtr<CSSValue> consumeClip(CSSParserTokenRange& range, CSSParserMode cssParserMode) |
| +{ |
| + if (range.peek().id() == CSSValueAuto) |
| + return consumeIdent(range); |
| + |
| + if (range.peek().functionId() != CSSValueRect) |
| + return nullptr; |
| + |
| + CSSParserTokenRange args = consumeFunction(range); |
| + // rect(t, r, b, l) || rect(t r b l) |
| + RefPtrWillBeRawPtr<CSSPrimitiveValue> top = consumeShape(args, cssParserMode); |
| + if (!top) |
| + return nullptr; |
| + bool needsComma = consumeCommaIncludingWhitespace(args); |
| + RefPtrWillBeRawPtr<CSSPrimitiveValue> right = consumeShape(args, cssParserMode); |
| + if (!right || (needsComma && !consumeCommaIncludingWhitespace(args))) |
| + return nullptr; |
| + RefPtrWillBeRawPtr<CSSPrimitiveValue> bottom = consumeShape(args, cssParserMode); |
| + if (!bottom || (needsComma && !consumeCommaIncludingWhitespace(args))) |
| + return nullptr; |
| + RefPtrWillBeRawPtr<CSSPrimitiveValue> left = consumeShape(args, cssParserMode); |
| + if (!left || !args.atEnd()) |
| + return nullptr; |
| + return CSSQuadValue::create(top.release(), right.release(), bottom.release(), left.release(), CSSQuadValue::SerializeAsRect); |
| +} |
| + |
| PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSPropertyID propId) |
| { |
| m_range.consumeWhitespace(); |
| @@ -797,6 +831,8 @@ PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseSingleValue(CSSProperty |
| return consumeSize(m_range, m_context.mode()); |
| case CSSPropertyTextIndent: |
| return consumeTextIndent(m_range, m_context.mode()); |
| + case CSSPropertyClip: |
| + return consumeClip(m_range, m_context.mode()); |
| default: |
| return nullptr; |
| } |