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 e29b3bc6b9d72f12275fb08782efe52e328bda78..d94d66bb67f0bd890cd8e003705937312e4aab45 100644 |
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp |
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp |
@@ -1646,10 +1646,30 @@ const CSSValue* CSSPropertyParser::ParseSingleValue( |
case CSSPropertyWebkitLogicalWidth: |
case CSSPropertyWebkitLogicalHeight: |
return CSSPropertyLengthUtils::ConsumeWidthOrHeight(range_, *context_); |
- case CSSPropertyScrollSnapDestination: |
- case CSSPropertyObjectPosition: |
- case CSSPropertyPerspectiveOrigin: |
- return ConsumePosition(range_, context_->Mode(), UnitlessQuirk::kForbid); |
+ case CSSPropertyScrollSnapDestination: { |
+ // TODO(crbug.com/724912): Retire scroll-snap-destination |
+ auto syntax = |
+ CSSPropertyParserHelpers::PositionSyntax::kPermitThreeValues; |
+ return ConsumePosition(range_, *context_, UnitlessQuirk::kForbid, syntax); |
+ } |
+ case CSSPropertyObjectPosition: { |
+ auto syntax = |
+ CSSPropertyParserHelpers::PositionSyntax::kPermitThreeValues; |
+ const CSSValue* result = |
+ ConsumePosition(range_, *context_, UnitlessQuirk::kForbid, syntax); |
+ if (syntax == CSSPropertyParserHelpers::PositionSyntax::kCountThreeValues) |
+ context_->Count(UseCounter::kThreeValuedPositionObjectPosition); |
+ return result; |
+ } |
+ case CSSPropertyPerspectiveOrigin: { |
+ auto syntax = |
+ CSSPropertyParserHelpers::PositionSyntax::kPermitThreeValues; |
+ const CSSValue* result = |
+ ConsumePosition(range_, *context_, UnitlessQuirk::kForbid, syntax); |
+ if (syntax == CSSPropertyParserHelpers::PositionSyntax::kCountThreeValues) |
+ context_->Count(UseCounter::kThreeValuedPositionPerspectiveOrigin); |
+ return result; |
+ } |
case CSSPropertyWebkitHyphenateCharacter: |
case CSSPropertyWebkitLocale: |
return ConsumeLocale(range_); |
@@ -2610,9 +2630,12 @@ static bool ConsumeBackgroundPosition(CSSParserTokenRange& range, |
do { |
CSSValue* position_x = nullptr; |
CSSValue* position_y = nullptr; |
- if (!ConsumePosition(range, context->Mode(), unitless, position_x, |
+ auto syntax = CSSPropertyParserHelpers::PositionSyntax::kPermitThreeValues; |
+ if (!ConsumePosition(range, *context, unitless, syntax, position_x, |
position_y)) |
return false; |
+ if (syntax == CSSPropertyParserHelpers::PositionSyntax::kCountThreeValues) |
+ context->Count(UseCounter::kThreeValuedPositionBackground); |
AddBackgroundValue(result_x, position_x); |
AddBackgroundValue(result_y, position_y); |
} while (ConsumeCommaIncludingWhitespace(range)); |
@@ -2691,9 +2714,14 @@ bool CSSPropertyParser::ConsumeBackgroundShorthand( |
ConsumeRepeatStyleComponent(range_, value, value_y, implicit); |
} else if (property == CSSPropertyBackgroundPositionX || |
property == CSSPropertyWebkitMaskPositionX) { |
- if (!ConsumePosition(range_, context_->Mode(), UnitlessQuirk::kForbid, |
- value, value_y)) |
+ auto syntax = |
+ CSSPropertyParserHelpers::PositionSyntax::kPermitThreeValues; |
+ if (!ConsumePosition(range_, *context_, UnitlessQuirk::kForbid, |
+ syntax, value, value_y)) |
continue; |
+ if (syntax == |
+ CSSPropertyParserHelpers::PositionSyntax::kCountThreeValues) |
+ context_->Count(UseCounter::kThreeValuedPositionBackground); |
} else if (property == CSSPropertyBackgroundSize || |
property == CSSPropertyWebkitMaskSize) { |
if (!ConsumeSlashIncludingWhitespace(range_)) |