Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Unified Diff: third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp

Issue 2616093003: Make CSSParserContext be garbage collected. (Closed)
Patch Set: fix fuzzer compile Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 b897acdcc27b33700186d7fd4eaed41f64f22a1c..e0c08d56aaaae06b5fc3844389d8aa27b4360f4d 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
@@ -54,7 +54,7 @@ using namespace CSSPropertyParserHelpers;
CSSPropertyParser::CSSPropertyParser(
const CSSParserTokenRange& range,
- const CSSParserContext& context,
+ const CSSParserContext* context,
HeapVector<CSSProperty, 256>* parsedProperties)
: m_range(range), m_context(context), m_parsedProperties(parsedProperties) {
m_range.consumeWhitespace();
@@ -98,7 +98,7 @@ bool CSSPropertyParser::parseValue(
CSSPropertyID unresolvedProperty,
bool important,
const CSSParserTokenRange& range,
- const CSSParserContext& context,
+ const CSSParserContext* context,
HeapVector<CSSProperty, 256>& parsedProperties,
StyleRule::RuleType ruleType) {
int parsedPropertiesSize = parsedProperties.size();
@@ -109,7 +109,7 @@ bool CSSPropertyParser::parseValue(
if (ruleType == StyleRule::Viewport) {
parseSuccess = (RuntimeEnabledFeatures::cssViewportEnabled() ||
- isUASheetBehavior(context.mode())) &&
+ isUASheetBehavior(context->mode())) &&
parser.parseViewportDescriptor(resolvedProperty, important);
} else if (ruleType == StyleRule::FontFace) {
parseSuccess = parser.parseFontFaceDescriptor(resolvedProperty);
@@ -118,8 +118,8 @@ bool CSSPropertyParser::parseValue(
}
// This doesn't count UA style sheets
- if (parseSuccess && context.useCounter())
- context.useCounter()->count(context.mode(), unresolvedProperty);
+ if (parseSuccess && context->isUseCounterRecordingEnabled())
+ context->useCounter()->count(context->mode(), unresolvedProperty);
if (!parseSuccess)
parsedProperties.shrink(parsedPropertiesSize);
@@ -130,7 +130,7 @@ bool CSSPropertyParser::parseValue(
const CSSValue* CSSPropertyParser::parseSingleValue(
CSSPropertyID property,
const CSSParserTokenRange& range,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
CSSPropertyParser parser(range, context, nullptr);
const CSSValue* value = parser.parseSingleValue(property);
if (!value || !parser.m_range.atEnd())
@@ -819,25 +819,25 @@ static CSSValue* consumeTextIndent(CSSParserTokenRange& range,
}
static bool validWidthOrHeightKeyword(CSSValueID id,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
if (id == CSSValueWebkitMinContent || id == CSSValueWebkitMaxContent ||
id == CSSValueWebkitFillAvailable || id == CSSValueWebkitFitContent ||
id == CSSValueMinContent || id == CSSValueMaxContent ||
id == CSSValueFitContent) {
- if (context.useCounter()) {
+ if (context->isUseCounterRecordingEnabled()) {
+ UseCounter* useCounter = context->useCounter();
switch (id) {
case CSSValueWebkitMinContent:
- context.useCounter()->count(UseCounter::CSSValuePrefixedMinContent);
+ useCounter->count(UseCounter::CSSValuePrefixedMinContent);
break;
case CSSValueWebkitMaxContent:
- context.useCounter()->count(UseCounter::CSSValuePrefixedMaxContent);
+ useCounter->count(UseCounter::CSSValuePrefixedMaxContent);
break;
case CSSValueWebkitFillAvailable:
- context.useCounter()->count(
- UseCounter::CSSValuePrefixedFillAvailable);
+ useCounter->count(UseCounter::CSSValuePrefixedFillAvailable);
break;
case CSSValueWebkitFitContent:
- context.useCounter()->count(UseCounter::CSSValuePrefixedFitContent);
+ useCounter->count(UseCounter::CSSValuePrefixedFitContent);
break;
default:
break;
@@ -850,23 +850,23 @@ static bool validWidthOrHeightKeyword(CSSValueID id,
static CSSValue* consumeMaxWidthOrHeight(
CSSParserTokenRange& range,
- const CSSParserContext& context,
+ const CSSParserContext* context,
UnitlessQuirk unitless = UnitlessQuirk::Forbid) {
if (range.peek().id() == CSSValueNone ||
validWidthOrHeightKeyword(range.peek().id(), context))
return consumeIdent(range);
- return consumeLengthOrPercent(range, context.mode(), ValueRangeNonNegative,
+ return consumeLengthOrPercent(range, context->mode(), ValueRangeNonNegative,
unitless);
}
static CSSValue* consumeWidthOrHeight(
CSSParserTokenRange& range,
- const CSSParserContext& context,
+ const CSSParserContext* context,
UnitlessQuirk unitless = UnitlessQuirk::Forbid) {
if (range.peek().id() == CSSValueAuto ||
validWidthOrHeightKeyword(range.peek().id(), context))
return consumeIdent(range);
- return consumeLengthOrPercent(range, context.mode(), ValueRangeNonNegative,
+ return consumeLengthOrPercent(range, context->mode(), ValueRangeNonNegative,
unitless);
}
@@ -1021,15 +1021,15 @@ static CSSValue* consumeAnimationIterationCount(CSSParserTokenRange& range) {
}
static CSSValue* consumeAnimationName(CSSParserTokenRange& range,
- const CSSParserContext& context,
+ const CSSParserContext* context,
bool allowQuotedName) {
if (range.peek().id() == CSSValueNone)
return consumeIdent(range);
if (allowQuotedName && range.peek().type() == StringToken) {
// Legacy support for strings in prefixed animations.
- if (context.useCounter())
- context.useCounter()->count(UseCounter::QuotedAnimationName);
+ if (context->isUseCounterRecordingEnabled())
+ context->useCounter()->count(UseCounter::QuotedAnimationName);
const CSSParserToken& token = range.consumeIncludingWhitespace();
if (equalIgnoringASCIICase(token.value(), "none"))
@@ -1129,7 +1129,7 @@ static CSSValue* consumeAnimationTimingFunction(CSSParserTokenRange& range) {
static CSSValue* consumeAnimationValue(CSSPropertyID property,
CSSParserTokenRange& range,
- const CSSParserContext& context,
+ const CSSParserContext* context,
bool useLegacyParsing) {
switch (property) {
case CSSPropertyAnimationDelay:
@@ -1176,7 +1176,7 @@ static bool isValidAnimationPropertyList(CSSPropertyID property,
static CSSValueList* consumeAnimationPropertyList(
CSSPropertyID property,
CSSParserTokenRange& range,
- const CSSParserContext& context,
+ const CSSParserContext* context,
bool useLegacyParsing) {
CSSValueList* list = CSSValueList::createCommaSeparated();
do {
@@ -1312,7 +1312,7 @@ static CSSValue* consumeShadow(CSSParserTokenRange& range,
static CSSFunctionValue* consumeFilterFunction(
CSSParserTokenRange& range,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
CSSValueID filterType = range.peek().functionId();
if (filterType < CSSValueInvert || filterType > CSSValueDropShadow)
return nullptr;
@@ -1321,11 +1321,11 @@ static CSSFunctionValue* consumeFilterFunction(
CSSValue* parsedValue = nullptr;
if (filterType == CSSValueDropShadow) {
- parsedValue = parseSingleShadow(args, context.mode(), false, false);
+ parsedValue = parseSingleShadow(args, context->mode(), false, false);
} else {
if (args.atEnd()) {
- if (context.useCounter())
- context.useCounter()->count(UseCounter::CSSFilterFunctionNoArguments);
+ if (context->isUseCounterRecordingEnabled())
+ context->useCounter()->count(UseCounter::CSSFilterFunctionNoArguments);
return filterValue;
}
if (filterType == CSSValueBrightness) {
@@ -1362,7 +1362,7 @@ static CSSFunctionValue* consumeFilterFunction(
}
static CSSValue* consumeFilter(CSSParserTokenRange& range,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
if (range.peek().id() == CSSValueNone)
return consumeIdent(range);
@@ -1487,41 +1487,43 @@ static CSSValue* consumeOffsetAnchor(CSSParserTokenRange& range,
}
static CSSValue* consumeOffsetPosition(CSSParserTokenRange& range,
- CSSParserMode cssParserMode,
- UseCounter* useCounter) {
+ const CSSParserContext* context) {
CSSValueID id = range.peek().id();
if (id == CSSValueAuto)
return consumeIdent(range);
CSSValue* value =
- consumePosition(range, cssParserMode, UnitlessQuirk::Forbid);
+ consumePosition(range, context->mode(), UnitlessQuirk::Forbid);
// Count when we receive a valid position other than 'auto'.
- if (useCounter && value && value->isValuePair())
- useCounter->count(UseCounter::CSSOffsetInEffect);
+ if (context->isUseCounterRecordingEnabled() && value &&
+ value->isValuePair()) {
+ context->useCounter()->count(UseCounter::CSSOffsetInEffect);
+ }
return value;
}
static CSSValue* consumeOffsetPath(CSSParserTokenRange& range,
- UseCounter* useCounter,
+ const CSSParserContext* context,
bool isMotionPath) {
CSSValue* value = consumePathOrNone(range);
// Count when we receive a valid path other than 'none'.
- if (useCounter && value && !value->isIdentifierValue()) {
- if (isMotionPath)
- useCounter->count(UseCounter::CSSMotionInEffect);
- else
- useCounter->count(UseCounter::CSSOffsetInEffect);
+ if (context->isUseCounterRecordingEnabled() && value &&
+ !value->isIdentifierValue()) {
+ if (isMotionPath) {
+ context->useCounter()->count(UseCounter::CSSMotionInEffect);
+ } else {
+ context->useCounter()->count(UseCounter::CSSOffsetInEffect);
+ }
}
return value;
}
// offset: <offset-path> <offset-distance> <offset-rotation>
bool CSSPropertyParser::consumeOffsetShorthand(bool important) {
- const CSSValue* offsetPath =
- consumeOffsetPath(m_range, m_context.useCounter(), false);
+ const CSSValue* offsetPath = consumeOffsetPath(m_range, m_context, false);
const CSSValue* offsetDistance =
- consumeLengthOrPercent(m_range, m_context.mode(), ValueRangeAll);
+ consumeLengthOrPercent(m_range, m_context->mode(), ValueRangeAll);
const CSSValue* offsetRotation = consumeOffsetRotate(m_range);
if (!offsetPath || !offsetDistance || !offsetRotation || !m_range.atEnd())
return false;
@@ -1630,17 +1632,17 @@ static bool consumeNumbers(CSSParserTokenRange& args,
}
static bool consumePerspective(CSSParserTokenRange& args,
- const CSSParserContext& context,
+ const CSSParserContext* context,
CSSFunctionValue*& transformValue,
bool useLegacyParsing) {
CSSPrimitiveValue* parsedValue =
- consumeLength(args, context.mode(), ValueRangeNonNegative);
+ consumeLength(args, context->mode(), ValueRangeNonNegative);
if (!parsedValue && useLegacyParsing) {
double perspective;
if (!consumeNumberRaw(args, perspective) || perspective < 0)
return false;
- if (context.useCounter()) {
- context.useCounter()->count(
+ if (context->isUseCounterRecordingEnabled()) {
+ context->useCounter()->count(
UseCounter::UnitlessPerspectiveInTransformProperty);
}
parsedValue = CSSPrimitiveValue::create(
@@ -1653,7 +1655,7 @@ static bool consumePerspective(CSSParserTokenRange& args,
}
static CSSValue* consumeTransformValue(CSSParserTokenRange& range,
- const CSSParserContext& context,
+ const CSSParserContext* context,
bool useLegacyParsing) {
CSSValueID functionId = range.peek().functionId();
if (functionId == CSSValueInvalid)
@@ -1703,20 +1705,21 @@ static CSSValue* consumeTransformValue(CSSParserTokenRange& range,
case CSSValueTranslateX:
case CSSValueTranslateY:
case CSSValueTranslate:
- parsedValue = consumeLengthOrPercent(args, context.mode(), ValueRangeAll);
+ parsedValue =
+ consumeLengthOrPercent(args, context->mode(), ValueRangeAll);
if (!parsedValue)
return nullptr;
if (functionId == CSSValueTranslate &&
consumeCommaIncludingWhitespace(args)) {
transformValue->append(*parsedValue);
parsedValue =
- consumeLengthOrPercent(args, context.mode(), ValueRangeAll);
+ consumeLengthOrPercent(args, context->mode(), ValueRangeAll);
if (!parsedValue)
return nullptr;
}
break;
case CSSValueTranslateZ:
- parsedValue = consumeLength(args, context.mode(), ValueRangeAll);
+ parsedValue = consumeLength(args, context->mode(), ValueRangeAll);
break;
case CSSValueMatrix:
case CSSValueMatrix3d:
@@ -1737,7 +1740,7 @@ static CSSValue* consumeTransformValue(CSSParserTokenRange& range,
return nullptr;
break;
case CSSValueTranslate3d:
- if (!consumeTranslate3d(args, context.mode(), transformValue))
+ if (!consumeTranslate3d(args, context->mode(), transformValue))
return nullptr;
break;
default:
@@ -1751,7 +1754,7 @@ static CSSValue* consumeTransformValue(CSSParserTokenRange& range,
}
static CSSValue* consumeTransform(CSSParserTokenRange& range,
- const CSSParserContext& context,
+ const CSSParserContext* context,
bool useLegacyParsing) {
if (range.peek().id() == CSSValueNone)
return consumeIdent(range);
@@ -1918,7 +1921,7 @@ static CSSValue* consumeRxOrRy(CSSParserTokenRange& range) {
}
static CSSValue* consumeCursor(CSSParserTokenRange& range,
- const CSSParserContext& context,
+ const CSSParserContext* context,
bool inQuirksMode) {
CSSValueList* list = nullptr;
while (CSSValue* image = consumeImage(range, context,
@@ -1944,11 +1947,11 @@ static CSSValue* consumeCursor(CSSParserTokenRange& range,
}
CSSValueID id = range.peek().id();
- if (!range.atEnd() && context.useCounter()) {
+ if (!range.atEnd() && context->isUseCounterRecordingEnabled()) {
if (id == CSSValueWebkitZoomIn)
- context.useCounter()->count(UseCounter::PrefixedCursorZoomIn);
+ context->useCounter()->count(UseCounter::PrefixedCursorZoomIn);
else if (id == CSSValueWebkitZoomOut)
- context.useCounter()->count(UseCounter::PrefixedCursorZoomOut);
+ context->useCounter()->count(UseCounter::PrefixedCursorZoomOut);
}
CSSValue* cursorType = nullptr;
if (id == CSSValueHand) {
@@ -1970,7 +1973,7 @@ static CSSValue* consumeCursor(CSSParserTokenRange& range,
}
static CSSValue* consumeAttr(CSSParserTokenRange args,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
if (args.peek().type() != IdentToken)
return nullptr;
@@ -1980,7 +1983,7 @@ static CSSValue* consumeAttr(CSSParserTokenRange args,
return nullptr;
// TODO(esprehn): This should be lowerASCII().
- if (context.isHTMLDocument())
+ if (context->isHTMLDocument())
attrName = attrName.lower();
CSSFunctionValue* attrValue = CSSFunctionValue::create(CSSValueAttr);
@@ -2022,7 +2025,7 @@ static CSSValue* consumeCounterContent(CSSParserTokenRange args,
}
static CSSValue* consumeContent(CSSParserTokenRange& range,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
if (identMatches<CSSValueNone, CSSValueNormal>(range.peek().id()))
return consumeIdent(range);
@@ -2053,19 +2056,19 @@ static CSSValue* consumeContent(CSSParserTokenRange& range,
}
static CSSValue* consumePerspective(CSSParserTokenRange& range,
- const CSSParserContext& context,
+ const CSSParserContext* context,
CSSPropertyID unresolvedProperty) {
if (range.peek().id() == CSSValueNone)
return consumeIdent(range);
CSSPrimitiveValue* parsedValue =
- consumeLength(range, context.mode(), ValueRangeAll);
+ consumeLength(range, context->mode(), ValueRangeAll);
if (!parsedValue &&
(unresolvedProperty == CSSPropertyAliasWebkitPerspective)) {
double perspective;
if (!consumeNumberRaw(range, perspective))
return nullptr;
- if (context.useCounter()) {
- context.useCounter()->count(
+ if (context->isUseCounterRecordingEnabled()) {
+ context->useCounter()->count(
UseCounter::UnitlessPerspectiveInPerspectiveProperty);
}
parsedValue = CSSPrimitiveValue::create(
@@ -2148,16 +2151,16 @@ static CSSValue* consumeShapeRadius(CSSParserTokenRange& args,
static CSSBasicShapeCircleValue* consumeBasicShapeCircle(
CSSParserTokenRange& args,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
// spec: https://drafts.csswg.org/css-shapes/#supported-basic-shapes
// circle( [<shape-radius>]? [at <position>]? )
CSSBasicShapeCircleValue* shape = CSSBasicShapeCircleValue::create();
- if (CSSValue* radius = consumeShapeRadius(args, context.mode()))
+ if (CSSValue* radius = consumeShapeRadius(args, context->mode()))
shape->setRadius(radius);
if (consumeIdent<CSSValueAt>(args)) {
CSSValue* centerX = nullptr;
CSSValue* centerY = nullptr;
- if (!consumePosition(args, context.mode(), UnitlessQuirk::Forbid, centerX,
+ if (!consumePosition(args, context->mode(), UnitlessQuirk::Forbid, centerX,
centerY))
return nullptr;
shape->setCenterX(centerX);
@@ -2168,19 +2171,19 @@ static CSSBasicShapeCircleValue* consumeBasicShapeCircle(
static CSSBasicShapeEllipseValue* consumeBasicShapeEllipse(
CSSParserTokenRange& args,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
// spec: https://drafts.csswg.org/css-shapes/#supported-basic-shapes
// ellipse( [<shape-radius>{2}]? [at <position>]? )
CSSBasicShapeEllipseValue* shape = CSSBasicShapeEllipseValue::create();
- if (CSSValue* radiusX = consumeShapeRadius(args, context.mode())) {
+ if (CSSValue* radiusX = consumeShapeRadius(args, context->mode())) {
shape->setRadiusX(radiusX);
- if (CSSValue* radiusY = consumeShapeRadius(args, context.mode()))
+ if (CSSValue* radiusY = consumeShapeRadius(args, context->mode()))
shape->setRadiusY(radiusY);
}
if (consumeIdent<CSSValueAt>(args)) {
CSSValue* centerX = nullptr;
CSSValue* centerY = nullptr;
- if (!consumePosition(args, context.mode(), UnitlessQuirk::Forbid, centerX,
+ if (!consumePosition(args, context->mode(), UnitlessQuirk::Forbid, centerX,
centerY))
return nullptr;
shape->setCenterX(centerX);
@@ -2191,7 +2194,7 @@ static CSSBasicShapeEllipseValue* consumeBasicShapeEllipse(
static CSSBasicShapePolygonValue* consumeBasicShapePolygon(
CSSParserTokenRange& args,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
CSSBasicShapePolygonValue* shape = CSSBasicShapePolygonValue::create();
if (identMatches<CSSValueEvenodd, CSSValueNonzero>(args.peek().id())) {
shape->setWindRule(args.consumeIncludingWhitespace().id() == CSSValueEvenodd
@@ -2203,11 +2206,11 @@ static CSSBasicShapePolygonValue* consumeBasicShapePolygon(
do {
CSSPrimitiveValue* xLength =
- consumeLengthOrPercent(args, context.mode(), ValueRangeAll);
+ consumeLengthOrPercent(args, context->mode(), ValueRangeAll);
if (!xLength)
return nullptr;
CSSPrimitiveValue* yLength =
- consumeLengthOrPercent(args, context.mode(), ValueRangeAll);
+ consumeLengthOrPercent(args, context->mode(), ValueRangeAll);
if (!yLength)
return nullptr;
shape->appendPoint(xLength, yLength);
@@ -2272,20 +2275,20 @@ static bool consumeRadii(CSSValue* horizontalRadii[4],
static CSSBasicShapeInsetValue* consumeBasicShapeInset(
CSSParserTokenRange& args,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
CSSBasicShapeInsetValue* shape = CSSBasicShapeInsetValue::create();
CSSPrimitiveValue* top =
- consumeLengthOrPercent(args, context.mode(), ValueRangeAll);
+ consumeLengthOrPercent(args, context->mode(), ValueRangeAll);
if (!top)
return nullptr;
CSSPrimitiveValue* right =
- consumeLengthOrPercent(args, context.mode(), ValueRangeAll);
+ consumeLengthOrPercent(args, context->mode(), ValueRangeAll);
CSSPrimitiveValue* bottom = nullptr;
CSSPrimitiveValue* left = nullptr;
if (right) {
- bottom = consumeLengthOrPercent(args, context.mode(), ValueRangeAll);
+ bottom = consumeLengthOrPercent(args, context->mode(), ValueRangeAll);
if (bottom)
- left = consumeLengthOrPercent(args, context.mode(), ValueRangeAll);
+ left = consumeLengthOrPercent(args, context->mode(), ValueRangeAll);
}
if (left)
shape->updateShapeSize4Values(top, right, bottom, left);
@@ -2299,7 +2302,7 @@ static CSSBasicShapeInsetValue* consumeBasicShapeInset(
if (consumeIdent<CSSValueRound>(args)) {
CSSValue* horizontalRadii[4] = {0};
CSSValue* verticalRadii[4] = {0};
- if (!consumeRadii(horizontalRadii, verticalRadii, args, context.mode(),
+ if (!consumeRadii(horizontalRadii, verticalRadii, args, context->mode(),
false))
return nullptr;
shape->setTopLeftRadius(
@@ -2319,7 +2322,7 @@ static CSSBasicShapeInsetValue* consumeBasicShapeInset(
}
static CSSValue* consumeBasicShape(CSSParserTokenRange& range,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
CSSValue* shape = nullptr;
if (range.peek().type() != FunctionToken)
return nullptr;
@@ -2341,7 +2344,7 @@ static CSSValue* consumeBasicShape(CSSParserTokenRange& range,
}
static CSSValue* consumeClipPath(CSSParserTokenRange& range,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
if (range.peek().id() == CSSValueNone)
return consumeIdent(range);
if (CSSURIValue* url = consumeUrl(range))
@@ -2350,7 +2353,7 @@ static CSSValue* consumeClipPath(CSSParserTokenRange& range,
}
static CSSValue* consumeShapeOutside(CSSParserTokenRange& range,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
if (CSSValue* imageValue = consumeImageOrNone(range, context))
return imageValue;
CSSValueList* list = CSSValueList::createSpaceSeparated();
@@ -2512,7 +2515,7 @@ static CSSValue* consumeBorderImageWidth(CSSParserTokenRange& range) {
static bool consumeBorderImageComponents(CSSPropertyID property,
CSSParserTokenRange& range,
- const CSSParserContext& context,
+ const CSSParserContext* context,
CSSValue*& source,
CSSValue*& slice,
CSSValue*& width,
@@ -2555,7 +2558,7 @@ static bool consumeBorderImageComponents(CSSPropertyID property,
static CSSValue* consumeWebkitBorderImage(CSSPropertyID property,
CSSParserTokenRange& range,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
CSSValue* source = nullptr;
CSSValue* slice = nullptr;
CSSValue* width = nullptr;
@@ -2568,7 +2571,7 @@ static CSSValue* consumeWebkitBorderImage(CSSPropertyID property,
}
static CSSValue* consumeReflect(CSSParserTokenRange& range,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
CSSIdentifierValue* direction =
consumeIdent<CSSValueAbove, CSSValueBelow, CSSValueLeft, CSSValueRight>(
range);
@@ -2579,7 +2582,7 @@ static CSSValue* consumeReflect(CSSParserTokenRange& range,
if (range.atEnd()) {
offset = CSSPrimitiveValue::create(0, CSSPrimitiveValue::UnitType::Pixels);
} else {
- offset = consumeLengthOrPercent(range, context.mode(), ValueRangeAll,
+ offset = consumeLengthOrPercent(range, context->mode(), ValueRangeAll,
UnitlessQuirk::Forbid);
if (!offset)
return nullptr;
@@ -2640,7 +2643,7 @@ static CSSValue* consumeMaskSourceType(CSSParserTokenRange& range) {
static CSSValue* consumePrefixedBackgroundBox(CSSPropertyID property,
CSSParserTokenRange& range,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
// The values 'border', 'padding' and 'content' are deprecated and do not
// apply to the version of the property that has the -webkit- prefix removed.
if (CSSValue* value =
@@ -2701,7 +2704,7 @@ static CSSValueList* consumeGridAutoFlow(CSSParserTokenRange& range) {
static CSSValue* consumeBackgroundComponent(CSSPropertyID unresolvedProperty,
CSSParserTokenRange& range,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
switch (unresolvedProperty) {
case CSSPropertyBackgroundClip:
return consumeBackgroundBox(range);
@@ -2725,16 +2728,16 @@ static CSSValue* consumeBackgroundComponent(CSSPropertyID unresolvedProperty,
return consumeImageOrNone(range, context);
case CSSPropertyBackgroundPositionX:
case CSSPropertyWebkitMaskPositionX:
- return consumePositionX(range, context.mode());
+ return consumePositionX(range, context->mode());
case CSSPropertyBackgroundPositionY:
case CSSPropertyWebkitMaskPositionY:
- return consumePositionY(range, context.mode());
+ return consumePositionY(range, context->mode());
case CSSPropertyBackgroundSize:
case CSSPropertyAliasWebkitBackgroundSize:
case CSSPropertyWebkitMaskSize:
- return consumeBackgroundSize(unresolvedProperty, range, context.mode());
+ return consumeBackgroundSize(unresolvedProperty, range, context->mode());
case CSSPropertyBackgroundColor:
- return consumeColor(range, context.mode());
+ return consumeColor(range, context->mode());
default:
break;
};
@@ -2758,7 +2761,7 @@ static void addBackgroundValue(CSSValue*& list, CSSValue* value) {
static CSSValue* consumeCommaSeparatedBackgroundComponent(
CSSPropertyID unresolvedProperty,
CSSParserTokenRange& range,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
CSSValue* result = nullptr;
do {
CSSValue* value =
@@ -3241,38 +3244,41 @@ static CSSValue* consumeGridTemplateAreas(CSSParserTokenRange& range) {
}
static void countKeywordOnlyPropertyUsage(CSSPropertyID property,
- UseCounter* counter,
+ const CSSParserContext* context,
CSSValueID valueID) {
- if (!counter)
+ if (!context->isUseCounterRecordingEnabled())
return;
switch (property) {
- case CSSPropertyWebkitAppearance:
+ case CSSPropertyWebkitAppearance: {
+ UseCounter::Feature feature;
if (valueID == CSSValueNone) {
- counter->count(UseCounter::CSSValueAppearanceNone);
+ feature = UseCounter::CSSValueAppearanceNone;
} else {
- counter->count(UseCounter::CSSValueAppearanceNotNone);
+ feature = UseCounter::CSSValueAppearanceNotNone;
if (valueID == CSSValueButton)
- counter->count(UseCounter::CSSValueAppearanceButton);
+ feature = UseCounter::CSSValueAppearanceButton;
else if (valueID == CSSValueCaret)
- counter->count(UseCounter::CSSValueAppearanceCaret);
+ feature = UseCounter::CSSValueAppearanceCaret;
else if (valueID == CSSValueCheckbox)
- counter->count(UseCounter::CSSValueAppearanceCheckbox);
+ feature = UseCounter::CSSValueAppearanceCheckbox;
else if (valueID == CSSValueMenulist)
- counter->count(UseCounter::CSSValueAppearanceMenulist);
+ feature = UseCounter::CSSValueAppearanceMenulist;
else if (valueID == CSSValueMenulistButton)
- counter->count(UseCounter::CSSValueAppearanceMenulistButton);
+ feature = UseCounter::CSSValueAppearanceMenulistButton;
else if (valueID == CSSValueListbox)
- counter->count(UseCounter::CSSValueAppearanceListbox);
+ feature = UseCounter::CSSValueAppearanceListbox;
else if (valueID == CSSValueRadio)
- counter->count(UseCounter::CSSValueAppearanceRadio);
+ feature = UseCounter::CSSValueAppearanceRadio;
else if (valueID == CSSValueSearchfield)
- counter->count(UseCounter::CSSValueAppearanceSearchField);
+ feature = UseCounter::CSSValueAppearanceSearchField;
else if (valueID == CSSValueTextfield)
- counter->count(UseCounter::CSSValueAppearanceTextField);
+ feature = UseCounter::CSSValueAppearanceTextField;
else
- counter->count(UseCounter::CSSValueAppearanceOthers);
+ feature = UseCounter::CSSValueAppearanceOthers;
}
+ context->useCounter()->count(feature);
break;
+ }
default:
break;
@@ -3285,10 +3291,9 @@ const CSSValue* CSSPropertyParser::parseSingleValue(
CSSPropertyID property = resolveCSSPropertyID(unresolvedProperty);
if (CSSParserFastPaths::isKeywordPropertyID(property)) {
if (!CSSParserFastPaths::isValidKeywordPropertyAndValue(
- property, m_range.peek().id(), m_context.mode()))
+ property, m_range.peek().id(), m_context->mode()))
return nullptr;
- countKeywordOnlyPropertyUsage(property, m_context.useCounter(),
- m_range.peek().id());
+ countKeywordOnlyPropertyUsage(property, m_context, m_range.peek().id());
return consumeIdent(m_range);
}
@@ -3326,30 +3331,30 @@ const CSSValue* CSSPropertyParser::parseSingleValue(
return consumeFontWeight(m_range);
case CSSPropertyLetterSpacing:
case CSSPropertyWordSpacing:
- return consumeSpacing(m_range, m_context.mode());
+ return consumeSpacing(m_range, m_context->mode());
case CSSPropertyTabSize:
- return consumeTabSize(m_range, m_context.mode());
+ return consumeTabSize(m_range, m_context->mode());
case CSSPropertyTextSizeAdjust:
- return consumeTextSizeAdjust(m_range, m_context.mode());
+ return consumeTextSizeAdjust(m_range, m_context->mode());
case CSSPropertyFontSize:
- return consumeFontSize(m_range, m_context.mode(), UnitlessQuirk::Allow);
+ return consumeFontSize(m_range, m_context->mode(), UnitlessQuirk::Allow);
case CSSPropertyLineHeight:
- return consumeLineHeight(m_range, m_context.mode());
+ return consumeLineHeight(m_range, m_context->mode());
case CSSPropertyRotate:
return consumeRotation(m_range);
case CSSPropertyScale:
return consumeScale(m_range);
case CSSPropertyWebkitBorderHorizontalSpacing:
case CSSPropertyWebkitBorderVerticalSpacing:
- return consumeLength(m_range, m_context.mode(), ValueRangeNonNegative);
+ return consumeLength(m_range, m_context->mode(), ValueRangeNonNegative);
case CSSPropertyCounterIncrement:
case CSSPropertyCounterReset:
return consumeCounter(m_range,
property == CSSPropertyCounterIncrement ? 1 : 0);
case CSSPropertySnapHeight:
- return consumeSnapHeight(m_range, m_context.mode());
+ return consumeSnapHeight(m_range, m_context->mode());
case CSSPropertyTextIndent:
- return consumeTextIndent(m_range, m_context.mode());
+ return consumeTextIndent(m_range, m_context->mode());
case CSSPropertyMaxWidth:
case CSSPropertyMaxHeight:
return consumeMaxWidthOrHeight(m_range, m_context, UnitlessQuirk::Allow);
@@ -3380,33 +3385,33 @@ const CSSValue* CSSPropertyParser::parseSingleValue(
case CSSPropertyLeft:
case CSSPropertyRight:
case CSSPropertyTop:
- return consumeMarginOrOffset(m_range, m_context.mode(),
+ return consumeMarginOrOffset(m_range, m_context->mode(),
UnitlessQuirk::Allow);
case CSSPropertyWebkitMarginStart:
case CSSPropertyWebkitMarginEnd:
case CSSPropertyWebkitMarginBefore:
case CSSPropertyWebkitMarginAfter:
- return consumeMarginOrOffset(m_range, m_context.mode(),
+ return consumeMarginOrOffset(m_range, m_context->mode(),
UnitlessQuirk::Forbid);
case CSSPropertyPaddingTop:
case CSSPropertyPaddingRight:
case CSSPropertyPaddingBottom:
case CSSPropertyPaddingLeft:
- return consumeLengthOrPercent(m_range, m_context.mode(),
+ return consumeLengthOrPercent(m_range, m_context->mode(),
ValueRangeNonNegative,
UnitlessQuirk::Allow);
case CSSPropertyClip:
- return consumeClip(m_range, m_context.mode());
+ return consumeClip(m_range, m_context->mode());
case CSSPropertyTouchAction:
return consumeTouchAction(m_range);
case CSSPropertyScrollSnapDestination:
case CSSPropertyObjectPosition:
case CSSPropertyPerspectiveOrigin:
- return consumePosition(m_range, m_context.mode(), UnitlessQuirk::Forbid);
+ return consumePosition(m_range, m_context->mode(), UnitlessQuirk::Forbid);
case CSSPropertyWebkitLineClamp:
return consumeLineClamp(m_range);
case CSSPropertyWebkitFontSizeDelta:
- return consumeLength(m_range, m_context.mode(), ValueRangeAll,
+ return consumeLength(m_range, m_context->mode(), ValueRangeAll,
UnitlessQuirk::Allow);
case CSSPropertyWebkitHyphenateCharacter:
case CSSPropertyWebkitLocale:
@@ -3416,7 +3421,7 @@ const CSSValue* CSSPropertyParser::parseSingleValue(
case CSSPropertyColumnCount:
return consumeColumnCount(m_range);
case CSSPropertyColumnGap:
- return consumeColumnGap(m_range, m_context.mode());
+ return consumeColumnGap(m_range, m_context->mode());
case CSSPropertyColumnSpan:
return consumeColumnSpan(m_range);
case CSSPropertyAnimationDelay:
@@ -3436,10 +3441,10 @@ const CSSValue* CSSPropertyParser::parseSingleValue(
unresolvedProperty == CSSPropertyAliasWebkitAnimationName);
case CSSPropertyGridColumnGap:
case CSSPropertyGridRowGap:
- return consumeLengthOrPercent(m_range, m_context.mode(),
+ return consumeLengthOrPercent(m_range, m_context->mode(),
ValueRangeNonNegative);
case CSSPropertyShapeMargin:
- return consumeLengthOrPercent(m_range, m_context.mode(),
+ return consumeLengthOrPercent(m_range, m_context->mode(),
ValueRangeNonNegative);
case CSSPropertyShapeImageThreshold:
return consumeNumber(m_range, ValueRangeAll);
@@ -3448,7 +3453,7 @@ const CSSValue* CSSPropertyParser::parseSingleValue(
case CSSPropertyWidows:
return consumePositiveInteger(m_range);
case CSSPropertyWebkitTextStrokeWidth:
- return consumeTextStrokeWidth(m_range, m_context.mode());
+ return consumeTextStrokeWidth(m_range, m_context->mode());
case CSSPropertyWebkitTextFillColor:
case CSSPropertyWebkitTapHighlightColor:
case CSSPropertyWebkitTextEmphasisColor:
@@ -3461,19 +3466,19 @@ const CSSValue* CSSPropertyParser::parseSingleValue(
case CSSPropertyFloodColor:
case CSSPropertyLightingColor:
case CSSPropertyColumnRuleColor:
- return consumeColor(m_range, m_context.mode());
+ return consumeColor(m_range, m_context->mode());
case CSSPropertyColor:
case CSSPropertyBackgroundColor:
- return consumeColor(m_range, m_context.mode(), inQuirksMode());
+ return consumeColor(m_range, m_context->mode(), inQuirksMode());
case CSSPropertyCaretColor:
if (m_range.peek().id() == CSSValueAuto)
return consumeIdent(m_range);
- return consumeColor(m_range, m_context.mode());
+ return consumeColor(m_range, m_context->mode());
case CSSPropertyWebkitBorderStartWidth:
case CSSPropertyWebkitBorderEndWidth:
case CSSPropertyWebkitBorderBeforeWidth:
case CSSPropertyWebkitBorderAfterWidth:
- return consumeBorderWidth(m_range, m_context.mode(),
+ return consumeBorderWidth(m_range, m_context->mode(),
UnitlessQuirk::Forbid);
case CSSPropertyBorderBottomColor:
case CSSPropertyBorderLeftColor:
@@ -3482,7 +3487,7 @@ const CSSValue* CSSPropertyParser::parseSingleValue(
bool allowQuirkyColors =
inQuirksMode() && (currentShorthand == CSSPropertyInvalid ||
currentShorthand == CSSPropertyBorderColor);
- return consumeColor(m_range, m_context.mode(), allowQuirkyColors);
+ return consumeColor(m_range, m_context->mode(), allowQuirkyColors);
}
case CSSPropertyBorderBottomWidth:
case CSSPropertyBorderLeftWidth:
@@ -3493,11 +3498,11 @@ const CSSValue* CSSPropertyParser::parseSingleValue(
currentShorthand == CSSPropertyBorderWidth);
UnitlessQuirk unitless =
allowQuirkyLengths ? UnitlessQuirk::Allow : UnitlessQuirk::Forbid;
- return consumeBorderWidth(m_range, m_context.mode(), unitless);
+ return consumeBorderWidth(m_range, m_context->mode(), unitless);
}
case CSSPropertyTextShadow:
case CSSPropertyBoxShadow:
- return consumeShadow(m_range, m_context.mode(),
+ return consumeShadow(m_range, m_context->mode(),
property == CSSPropertyBoxShadow);
case CSSPropertyFilter:
case CSSPropertyBackdropFilter:
@@ -3509,43 +3514,43 @@ const CSSValue* CSSPropertyParser::parseSingleValue(
case CSSPropertyTextDecorationLine:
return consumeTextDecorationLine(m_range);
case CSSPropertyOffsetAnchor:
- return consumeOffsetAnchor(m_range, m_context.mode());
+ return consumeOffsetAnchor(m_range, m_context->mode());
case CSSPropertyOffsetPosition:
- return consumeOffsetPosition(m_range, m_context.mode(),
- m_context.useCounter());
+ return consumeOffsetPosition(m_range, m_context);
case CSSPropertyD:
return consumePathOrNone(m_range);
case CSSPropertyOffsetPath:
return consumeOffsetPath(
- m_range, m_context.useCounter(),
+ m_range, m_context,
currentShorthand == CSSPropertyMotion ||
unresolvedProperty == CSSPropertyAliasMotionPath);
case CSSPropertyOffsetDistance:
- return consumeLengthOrPercent(m_range, m_context.mode(), ValueRangeAll);
+ return consumeLengthOrPercent(m_range, m_context->mode(), ValueRangeAll);
case CSSPropertyOffsetRotate:
case CSSPropertyOffsetRotation:
return consumeOffsetRotate(m_range);
case CSSPropertyWebkitTextEmphasisStyle:
return consumeTextEmphasisStyle(m_range);
case CSSPropertyOutlineColor:
- return consumeOutlineColor(m_range, m_context.mode());
+ return consumeOutlineColor(m_range, m_context->mode());
case CSSPropertyOutlineOffset:
- return consumeLength(m_range, m_context.mode(), ValueRangeAll);
+ return consumeLength(m_range, m_context->mode(), ValueRangeAll);
case CSSPropertyOutlineWidth:
- return consumeLineWidth(m_range, m_context.mode(), UnitlessQuirk::Forbid);
+ return consumeLineWidth(m_range, m_context->mode(),
+ UnitlessQuirk::Forbid);
case CSSPropertyTransform:
return consumeTransform(
m_range, m_context,
unresolvedProperty == CSSPropertyAliasWebkitTransform);
case CSSPropertyWebkitTransformOriginX:
case CSSPropertyWebkitPerspectiveOriginX:
- return consumePositionX(m_range, m_context.mode());
+ return consumePositionX(m_range, m_context->mode());
case CSSPropertyWebkitTransformOriginY:
case CSSPropertyWebkitPerspectiveOriginY:
- return consumePositionY(m_range, m_context.mode());
+ return consumePositionY(m_range, m_context->mode());
case CSSPropertyFill:
case CSSPropertyStroke:
- return consumePaintStroke(m_range, m_context.mode());
+ return consumePaintStroke(m_range, m_context->mode());
case CSSPropertyPaintOrder:
return consumePaintOrder(m_range);
case CSSPropertyMarkerStart:
@@ -3554,14 +3559,14 @@ const CSSValue* CSSPropertyParser::parseSingleValue(
case CSSPropertyMask:
return consumeNoneOrURI(m_range);
case CSSPropertyFlexBasis:
- return consumeFlexBasis(m_range, m_context.mode());
+ return consumeFlexBasis(m_range, m_context->mode());
case CSSPropertyFlexGrow:
case CSSPropertyFlexShrink:
return consumeNumber(m_range, ValueRangeNonNegative);
case CSSPropertyStrokeDasharray:
return consumeStrokeDasharray(m_range);
case CSSPropertyColumnRuleWidth:
- return consumeColumnRuleWidth(m_range, m_context.mode());
+ return consumeColumnRuleWidth(m_range, m_context->mode());
case CSSPropertyStrokeOpacity:
case CSSPropertyFillOpacity:
case CSSPropertyStopOpacity:
@@ -3598,21 +3603,21 @@ const CSSValue* CSSPropertyParser::parseSingleValue(
case CSSPropertyPerspective:
return consumePerspective(m_range, m_context, unresolvedProperty);
case CSSPropertyScrollSnapCoordinate:
- return consumeScrollSnapCoordinate(m_range, m_context.mode());
+ return consumeScrollSnapCoordinate(m_range, m_context->mode());
case CSSPropertyScrollSnapPointsX:
case CSSPropertyScrollSnapPointsY:
- return consumeScrollSnapPoints(m_range, m_context.mode());
+ return consumeScrollSnapPoints(m_range, m_context->mode());
case CSSPropertyBorderTopRightRadius:
case CSSPropertyBorderTopLeftRadius:
case CSSPropertyBorderBottomLeftRadius:
case CSSPropertyBorderBottomRightRadius:
- return consumeBorderRadiusCorner(m_range, m_context.mode());
+ return consumeBorderRadiusCorner(m_range, m_context->mode());
case CSSPropertyWebkitBoxFlexGroup:
return consumeInteger(m_range, 0);
case CSSPropertyOrder:
return consumeInteger(m_range);
case CSSPropertyVerticalAlign:
- return consumeVerticalAlign(m_range, m_context.mode());
+ return consumeVerticalAlign(m_range, m_context->mode());
case CSSPropertyShapeOutside:
return consumeShapeOutside(m_range, m_context);
case CSSPropertyClipPath:
@@ -3685,11 +3690,11 @@ const CSSValue* CSSPropertyParser::parseSingleValue(
case CSSPropertyGridAutoColumns:
case CSSPropertyGridAutoRows:
ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled());
- return consumeGridTrackList(m_range, m_context.mode(), GridAuto);
+ return consumeGridTrackList(m_range, m_context->mode(), GridAuto);
case CSSPropertyGridTemplateColumns:
case CSSPropertyGridTemplateRows:
ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled());
- return consumeGridTemplatesRowsOrColumns(m_range, m_context.mode());
+ return consumeGridTemplatesRowsOrColumns(m_range, m_context->mode());
case CSSPropertyGridTemplateAreas:
ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled());
return consumeGridTemplateAreas(m_range);
@@ -3725,14 +3730,14 @@ static CSSValueList* consumeFontFaceUnicodeRange(CSSParserTokenRange& range) {
}
static CSSValue* consumeFontFaceSrcURI(CSSParserTokenRange& range,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
String url = consumeUrlAsStringView(range).toString();
if (url.isNull())
return nullptr;
CSSFontFaceSrcValue* uriValue(
- CSSFontFaceSrcValue::create(url, context.completeURL(url),
- context.shouldCheckContentSecurityPolicy()));
- uriValue->setReferrer(context.referrer());
+ CSSFontFaceSrcValue::create(url, context->completeURL(url),
+ context->shouldCheckContentSecurityPolicy()));
+ uriValue->setReferrer(context->referrer());
if (range.peek().functionId() != CSSValueFormat)
return uriValue;
@@ -3749,10 +3754,10 @@ static CSSValue* consumeFontFaceSrcURI(CSSParserTokenRange& range,
}
static CSSValue* consumeFontFaceSrcLocal(CSSParserTokenRange& range,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
CSSParserTokenRange args = consumeFunction(range);
ContentSecurityPolicyDisposition shouldCheckContentSecurityPolicy =
- context.shouldCheckContentSecurityPolicy();
+ context->shouldCheckContentSecurityPolicy();
if (args.peek().type() == StringToken) {
const CSSParserToken& arg = args.consumeIncludingWhitespace();
if (!args.atEnd())
@@ -3771,7 +3776,7 @@ static CSSValue* consumeFontFaceSrcLocal(CSSParserTokenRange& range,
}
static CSSValueList* consumeFontFaceSrc(CSSParserTokenRange& range,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
CSSValueList* values = CSSValueList::createCommaSeparated();
do {
@@ -3808,8 +3813,8 @@ bool CSSPropertyParser::parseFontFaceDescriptor(CSSPropertyID propId) {
case CSSPropertyFontStretch:
case CSSPropertyFontStyle: {
CSSValueID id = m_range.consumeIncludingWhitespace().id();
- if (!CSSParserFastPaths::isValidKeywordPropertyAndValue(propId, id,
- m_context.mode()))
+ if (!CSSParserFastPaths::isValidKeywordPropertyAndValue(
+ propId, id, m_context->mode()))
return false;
parsedValue = CSSIdentifierValue::create(id);
break;
@@ -3892,7 +3897,7 @@ bool CSSPropertyParser::consumeFont(bool important) {
while (!m_range.atEnd()) {
CSSValueID id = m_range.peek().id();
if (!fontStyle && CSSParserFastPaths::isValidKeywordPropertyAndValue(
- CSSPropertyFontStyle, id, m_context.mode())) {
+ CSSPropertyFontStyle, id, m_context->mode())) {
fontStyle = consumeIdent(m_range);
continue;
}
@@ -3910,7 +3915,7 @@ bool CSSPropertyParser::consumeFont(bool important) {
continue;
}
if (!fontStretch && CSSParserFastPaths::isValidKeywordPropertyAndValue(
- CSSPropertyFontStretch, id, m_context.mode()))
+ CSSPropertyFontStretch, id, m_context->mode()))
fontStretch = consumeIdent(m_range);
else
break;
@@ -3942,14 +3947,14 @@ bool CSSPropertyParser::consumeFont(bool important) {
important);
// Now a font size _must_ come.
- CSSValue* fontSize = consumeFontSize(m_range, m_context.mode());
+ CSSValue* fontSize = consumeFontSize(m_range, m_context->mode());
if (!fontSize || m_range.atEnd())
return false;
addProperty(CSSPropertyFontSize, CSSPropertyFont, *fontSize, important);
if (consumeSlashIncludingWhitespace(m_range)) {
- CSSValue* lineHeight = consumeLineHeight(m_range, m_context.mode());
+ CSSValue* lineHeight = consumeLineHeight(m_range, m_context->mode());
if (!lineHeight)
return false;
addProperty(CSSPropertyLineHeight, CSSPropertyFont, *lineHeight, important);
@@ -4033,13 +4038,15 @@ bool CSSPropertyParser::consumeFontVariantShorthand(bool important) {
bool CSSPropertyParser::consumeBorderSpacing(bool important) {
CSSValue* horizontalSpacing = consumeLength(
- m_range, m_context.mode(), ValueRangeNonNegative, UnitlessQuirk::Allow);
+ m_range, m_context->mode(), ValueRangeNonNegative, UnitlessQuirk::Allow);
if (!horizontalSpacing)
return false;
CSSValue* verticalSpacing = horizontalSpacing;
- if (!m_range.atEnd())
- verticalSpacing = consumeLength(
- m_range, m_context.mode(), ValueRangeNonNegative, UnitlessQuirk::Allow);
+ if (!m_range.atEnd()) {
+ verticalSpacing =
+ consumeLength(m_range, m_context->mode(), ValueRangeNonNegative,
+ UnitlessQuirk::Allow);
+ }
if (!verticalSpacing || !m_range.atEnd())
return false;
addProperty(CSSPropertyWebkitBorderHorizontalSpacing,
@@ -4089,18 +4096,19 @@ static CSSValue* consumeSingleViewportDescriptor(CSSParserTokenRange& range,
bool CSSPropertyParser::parseViewportDescriptor(CSSPropertyID propId,
bool important) {
ASSERT(RuntimeEnabledFeatures::cssViewportEnabled() ||
- isUASheetBehavior(m_context.mode()));
+ isUASheetBehavior(m_context->mode()));
switch (propId) {
case CSSPropertyWidth: {
CSSValue* minWidth = consumeSingleViewportDescriptor(
- m_range, CSSPropertyMinWidth, m_context.mode());
+ m_range, CSSPropertyMinWidth, m_context->mode());
if (!minWidth)
return false;
CSSValue* maxWidth = minWidth;
- if (!m_range.atEnd())
+ if (!m_range.atEnd()) {
maxWidth = consumeSingleViewportDescriptor(m_range, CSSPropertyMaxWidth,
- m_context.mode());
+ m_context->mode());
+ }
if (!maxWidth || !m_range.atEnd())
return false;
addProperty(CSSPropertyMinWidth, CSSPropertyInvalid, *minWidth,
@@ -4111,13 +4119,14 @@ bool CSSPropertyParser::parseViewportDescriptor(CSSPropertyID propId,
}
case CSSPropertyHeight: {
CSSValue* minHeight = consumeSingleViewportDescriptor(
- m_range, CSSPropertyMinHeight, m_context.mode());
+ m_range, CSSPropertyMinHeight, m_context->mode());
if (!minHeight)
return false;
CSSValue* maxHeight = minHeight;
- if (!m_range.atEnd())
+ if (!m_range.atEnd()) {
maxHeight = consumeSingleViewportDescriptor(
- m_range, CSSPropertyMaxHeight, m_context.mode());
+ m_range, CSSPropertyMaxHeight, m_context->mode());
+ }
if (!maxHeight || !m_range.atEnd())
return false;
addProperty(CSSPropertyMinHeight, CSSPropertyInvalid, *minHeight,
@@ -4136,7 +4145,7 @@ bool CSSPropertyParser::parseViewportDescriptor(CSSPropertyID propId,
case CSSPropertyUserZoom:
case CSSPropertyOrientation: {
CSSValue* parsedValue =
- consumeSingleViewportDescriptor(m_range, propId, m_context.mode());
+ consumeSingleViewportDescriptor(m_range, propId, m_context->mode());
if (!parsedValue || !m_range.atEnd())
return false;
addProperty(propId, CSSPropertyInvalid, *parsedValue, important);
@@ -4248,7 +4257,7 @@ bool CSSPropertyParser::consumeFlex(bool important) {
if (m_range.peek().id() == CSSValueAuto)
flexBasis = consumeIdent(m_range);
if (!flexBasis)
- flexBasis = consumeLengthOrPercent(m_range, m_context.mode(),
+ flexBasis = consumeLengthOrPercent(m_range, m_context->mode(),
ValueRangeNonNegative);
if (index == 2 && !m_range.atEnd())
return false;
@@ -4287,7 +4296,7 @@ bool CSSPropertyParser::consumeBorder(bool important) {
while (!width || !style || !color) {
if (!width) {
width =
- consumeLineWidth(m_range, m_context.mode(), UnitlessQuirk::Forbid);
+ consumeLineWidth(m_range, m_context->mode(), UnitlessQuirk::Forbid);
if (width)
continue;
}
@@ -4297,7 +4306,7 @@ bool CSSPropertyParser::consumeBorder(bool important) {
continue;
}
if (!color) {
- color = consumeColor(m_range, m_context.mode());
+ color = consumeColor(m_range, m_context->mode());
if (color)
continue;
}
@@ -4475,14 +4484,15 @@ bool CSSPropertyParser::consumeLegacyBreakProperty(CSSPropertyID property,
}
static bool consumeBackgroundPosition(CSSParserTokenRange& range,
- const CSSParserContext& context,
+ const CSSParserContext* context,
UnitlessQuirk unitless,
CSSValue*& resultX,
CSSValue*& resultY) {
do {
CSSValue* positionX = nullptr;
CSSValue* positionY = nullptr;
- if (!consumePosition(range, context.mode(), unitless, positionX, positionY))
+ if (!consumePosition(range, context->mode(), unitless, positionX,
+ positionY))
return false;
addBackgroundValue(resultX, positionX);
addBackgroundValue(resultY, positionY);
@@ -4562,14 +4572,14 @@ bool CSSPropertyParser::consumeBackgroundShorthand(
consumeRepeatStyleComponent(m_range, value, valueY, implicit);
} else if (property == CSSPropertyBackgroundPositionX ||
property == CSSPropertyWebkitMaskPositionX) {
- if (!consumePosition(m_range, m_context.mode(), UnitlessQuirk::Forbid,
- value, valueY))
+ if (!consumePosition(m_range, m_context->mode(),
+ UnitlessQuirk::Forbid, value, valueY))
continue;
} else if (property == CSSPropertyBackgroundSize ||
property == CSSPropertyWebkitMaskSize) {
if (!consumeSlashIncludingWhitespace(m_range))
continue;
- value = consumeBackgroundSize(property, m_range, m_context.mode());
+ value = consumeBackgroundSize(property, m_range, m_context->mode());
if (!value || !parsedLonghand[i - 1]) // Position must have been
// parsed in the current layer.
return false;
@@ -4622,7 +4632,7 @@ bool CSSPropertyParser::consumeBackgroundShorthand(
for (size_t i = 0; i < longhandCount; ++i) {
CSSPropertyID property = shorthand.properties()[i];
if (property == CSSPropertyBackgroundSize && longhands[i] &&
- m_context.useLegacyBackgroundSizeShorthandBehavior())
+ m_context->useLegacyBackgroundSizeShorthandBehavior())
continue;
addProperty(property, shorthand.id(), *longhands[i], important, implicit);
}
@@ -4737,7 +4747,7 @@ bool CSSPropertyParser::consumeGridTemplateRowsAndAreasAndColumns(
++rowCount;
// Handle template-rows's track-size.
- CSSValue* value = consumeGridTrackSize(m_range, m_context.mode());
+ CSSValue* value = consumeGridTrackSize(m_range, m_context->mode());
if (!value)
value = CSSIdentifierValue::create(CSSValueAuto);
templateRows->append(*value);
@@ -4755,7 +4765,7 @@ bool CSSPropertyParser::consumeGridTemplateRowsAndAreasAndColumns(
if (!consumeSlashIncludingWhitespace(m_range))
return false;
columnsValue =
- consumeGridTrackList(m_range, m_context.mode(), GridTemplateNoRepeat);
+ consumeGridTrackList(m_range, m_context->mode(), GridTemplateNoRepeat);
if (!columnsValue || !m_range.atEnd())
return false;
} else {
@@ -4793,13 +4803,13 @@ bool CSSPropertyParser::consumeGridTemplateShorthand(CSSPropertyID shorthandId,
// 2- <grid-template-rows> / <grid-template-columns>
if (!rowsValue)
- rowsValue = consumeGridTrackList(m_range, m_context.mode(), GridTemplate);
+ rowsValue = consumeGridTrackList(m_range, m_context->mode(), GridTemplate);
if (rowsValue) {
if (!consumeSlashIncludingWhitespace(m_range))
return false;
CSSValue* columnsValue =
- consumeGridTemplatesRowsOrColumns(m_range, m_context.mode());
+ consumeGridTemplatesRowsOrColumns(m_range, m_context->mode());
if (!columnsValue || !m_range.atEnd())
return false;
@@ -4878,20 +4888,22 @@ bool CSSPropertyParser::consumeGridShorthand(bool important) {
if (consumeSlashIncludingWhitespace(m_range)) {
autoRowsValue = CSSInitialValue::create();
} else {
- autoRowsValue = consumeGridTrackList(m_range, m_context.mode(), GridAuto);
+ autoRowsValue =
+ consumeGridTrackList(m_range, m_context->mode(), GridAuto);
if (!autoRowsValue)
return false;
if (!consumeSlashIncludingWhitespace(m_range))
return false;
}
if (!(templateColumns =
- consumeGridTemplatesRowsOrColumns(m_range, m_context.mode())))
+ consumeGridTemplatesRowsOrColumns(m_range, m_context->mode())))
return false;
templateRows = CSSInitialValue::create();
autoColumnsValue = CSSInitialValue::create();
} else {
// 3- <grid-template-rows> / [ auto-flow && dense? ] <grid-auto-columns>?
- templateRows = consumeGridTemplatesRowsOrColumns(m_range, m_context.mode());
+ templateRows =
+ consumeGridTemplatesRowsOrColumns(m_range, m_context->mode());
if (!templateRows)
return false;
if (!consumeSlashIncludingWhitespace(m_range))
@@ -4904,7 +4916,7 @@ bool CSSPropertyParser::consumeGridShorthand(bool important) {
autoColumnsValue = CSSInitialValue::create();
} else {
autoColumnsValue =
- consumeGridTrackList(m_range, m_context.mode(), GridAuto);
+ consumeGridTrackList(m_range, m_context->mode(), GridAuto);
if (!autoColumnsValue)
return false;
}
@@ -4945,7 +4957,7 @@ bool CSSPropertyParser::parseShorthand(CSSPropertyID unresolvedProperty,
case CSSPropertyWebkitMarginCollapse: {
CSSValueID id = m_range.consumeIncludingWhitespace().id();
if (!CSSParserFastPaths::isValidKeywordPropertyAndValue(
- CSSPropertyWebkitMarginBeforeCollapse, id, m_context.mode()))
+ CSSPropertyWebkitMarginBeforeCollapse, id, m_context->mode()))
return false;
CSSValue* beforeCollapse = CSSIdentifierValue::create(id);
addProperty(CSSPropertyWebkitMarginBeforeCollapse,
@@ -4958,7 +4970,7 @@ bool CSSPropertyParser::parseShorthand(CSSPropertyID unresolvedProperty,
}
id = m_range.consumeIncludingWhitespace().id();
if (!CSSParserFastPaths::isValidKeywordPropertyAndValue(
- CSSPropertyWebkitMarginAfterCollapse, id, m_context.mode()))
+ CSSPropertyWebkitMarginAfterCollapse, id, m_context->mode()))
return false;
addProperty(CSSPropertyWebkitMarginAfterCollapse,
CSSPropertyWebkitMarginCollapse,
@@ -4968,7 +4980,7 @@ bool CSSPropertyParser::parseShorthand(CSSPropertyID unresolvedProperty,
case CSSPropertyOverflow: {
CSSValueID id = m_range.consumeIncludingWhitespace().id();
if (!CSSParserFastPaths::isValidKeywordPropertyAndValue(
- CSSPropertyOverflowY, id, m_context.mode()))
+ CSSPropertyOverflowY, id, m_context->mode()))
return false;
if (!m_range.atEnd())
return false;
@@ -5058,7 +5070,7 @@ bool CSSPropertyParser::parseShorthand(CSSPropertyID unresolvedProperty,
CSSValue* horizontalRadii[4] = {0};
CSSValue* verticalRadii[4] = {0};
if (!consumeRadii(
- horizontalRadii, verticalRadii, m_range, m_context.mode(),
+ horizontalRadii, verticalRadii, m_range, m_context->mode(),
unresolvedProperty == CSSPropertyAliasWebkitBorderRadius))
return false;
addProperty(CSSPropertyBorderTopLeftRadius, CSSPropertyBorderRadius,
@@ -5148,9 +5160,9 @@ bool CSSPropertyParser::parseShorthand(CSSPropertyID unresolvedProperty,
case CSSPropertyGridGap: {
ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled() &&
shorthandForProperty(CSSPropertyGridGap).length() == 2);
- CSSValue* rowGap = consumeLengthOrPercent(m_range, m_context.mode(),
+ CSSValue* rowGap = consumeLengthOrPercent(m_range, m_context->mode(),
ValueRangeNonNegative);
- CSSValue* columnGap = consumeLengthOrPercent(m_range, m_context.mode(),
+ CSSValue* columnGap = consumeLengthOrPercent(m_range, m_context->mode(),
ValueRangeNonNegative);
if (!rowGap || !m_range.atEnd())
return false;

Powered by Google App Engine
This is Rietveld 408576698