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; |
} |