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 b4f14c9dd59fae7cff22b2e2300cd8d8491a9506..b7026024f480bb37b11503308688b32be3edd034 100644 |
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp |
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp |
@@ -878,6 +878,41 @@ static CSSValue* consumeMarginOrOffset(CSSParserTokenRange& range, |
return consumeLengthOrPercent(range, cssParserMode, ValueRangeAll, unitless); |
} |
+static CSSValue* consumeClipComponent(CSSParserTokenRange& range, |
+ CSSParserMode cssParserMode) { |
+ if (range.peek().id() == CSSValueAuto) |
+ return consumeIdent(range); |
+ return consumeLength(range, cssParserMode, ValueRangeAll, |
+ UnitlessQuirk::Allow); |
+} |
+ |
+static 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) |
+ CSSValue* top = consumeClipComponent(args, cssParserMode); |
+ if (!top) |
+ return nullptr; |
+ bool needsComma = consumeCommaIncludingWhitespace(args); |
+ CSSValue* right = consumeClipComponent(args, cssParserMode); |
+ if (!right || (needsComma && !consumeCommaIncludingWhitespace(args))) |
+ return nullptr; |
+ CSSValue* bottom = consumeClipComponent(args, cssParserMode); |
+ if (!bottom || (needsComma && !consumeCommaIncludingWhitespace(args))) |
+ return nullptr; |
+ CSSValue* left = consumeClipComponent(args, cssParserMode); |
+ if (!left || !args.atEnd()) |
+ return nullptr; |
+ return CSSQuadValue::create(top, right, bottom, left, |
+ CSSQuadValue::SerializeAsRect); |
+} |
+ |
static bool consumePan(CSSParserTokenRange& range, |
CSSValue*& panX, |
CSSValue*& panY, |
@@ -968,13 +1003,6 @@ static CSSValue* consumeColumnCount(CSSParserTokenRange& range) { |
return consumePositiveInteger(range); |
} |
-static CSSValue* consumeColumnGap(CSSParserTokenRange& range, |
- CSSParserMode cssParserMode) { |
- if (range.peek().id() == CSSValueNormal) |
- return consumeIdent(range); |
- return consumeLength(range, cssParserMode, ValueRangeNonNegative); |
-} |
- |
static CSSValue* consumeColumnSpan(CSSParserTokenRange& range) { |
return consumeIdent<CSSValueAll, CSSValueNone>(range); |
} |
@@ -3360,6 +3388,8 @@ const CSSValue* CSSPropertyParser::parseSingleValue( |
return consumeLengthOrPercent(m_range, m_context.mode(), |
ValueRangeNonNegative, |
UnitlessQuirk::Allow); |
+ case CSSPropertyClip: |
+ return consumeClip(m_range, m_context.mode()); |
case CSSPropertyTouchAction: |
return consumeTouchAction(m_range); |
case CSSPropertyScrollSnapDestination: |
@@ -3378,8 +3408,6 @@ const CSSValue* CSSPropertyParser::parseSingleValue( |
return consumeColumnWidth(m_range); |
case CSSPropertyColumnCount: |
return consumeColumnCount(m_range); |
- case CSSPropertyColumnGap: |
- return consumeColumnGap(m_range, m_context.mode()); |
case CSSPropertyColumnSpan: |
return consumeColumnSpan(m_range); |
case CSSPropertyAnimationDelay: |