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

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

Issue 2616093003: Make CSSParserContext be garbage collected. (Closed)
Patch Set: fix fuzzer compile again 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 d29bce648a03e4ddfb1ac7fd6fe3a0456966b0ec..b7f9ff35f4908017e3d23f8088c71c577b408ee0 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())
@@ -756,25 +756,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;
@@ -787,23 +787,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);
}
@@ -951,15 +951,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"))
@@ -1059,7 +1059,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:
@@ -1106,7 +1106,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 {
@@ -1242,7 +1242,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;
@@ -1251,11 +1251,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) {
@@ -1292,7 +1292,7 @@ static CSSFunctionValue* consumeFilterFunction(
}
static CSSValue* consumeFilter(CSSParserTokenRange& range,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
if (range.peek().id() == CSSValueNone)
return consumeIdent(range);
@@ -1417,26 +1417,27 @@ static CSSValue* consumeOffsetAnchor(CSSParserTokenRange& range,
}
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;
@@ -1545,17 +1546,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(
@@ -1568,7 +1569,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)
@@ -1618,20 +1619,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:
@@ -1652,7 +1654,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:
@@ -1666,7 +1668,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);
@@ -1775,7 +1777,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,
@@ -1801,11 +1803,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) {
@@ -1827,7 +1829,7 @@ static CSSValue* consumeCursor(CSSParserTokenRange& range,
}
static CSSValue* consumeAttr(CSSParserTokenRange args,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
if (args.peek().type() != IdentToken)
return nullptr;
@@ -1837,7 +1839,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);
@@ -1879,7 +1881,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);
@@ -1910,19 +1912,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(
@@ -1985,16 +1987,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);
@@ -2005,19 +2007,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);
@@ -2028,7 +2030,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
@@ -2040,11 +2042,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);
@@ -2109,20 +2111,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);
@@ -2136,7 +2138,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(
@@ -2156,7 +2158,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;
@@ -2178,7 +2180,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))
@@ -2187,7 +2189,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();
@@ -2349,7 +2351,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,
@@ -2392,7 +2394,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;
@@ -2405,7 +2407,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);
@@ -2416,7 +2418,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;
@@ -2471,7 +2473,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 =
@@ -2532,7 +2534,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);
@@ -2556,16 +2558,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;
};
@@ -2589,7 +2591,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 =
@@ -3072,38 +3074,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;
@@ -3116,10 +3121,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);
}
@@ -3152,28 +3156,28 @@ 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 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);
@@ -3204,33 +3208,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:
@@ -3258,10 +3262,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);
@@ -3270,7 +3274,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:
@@ -3283,15 +3287,15 @@ 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 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:
@@ -3300,7 +3304,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:
@@ -3311,11 +3315,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:
@@ -3327,38 +3331,39 @@ 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 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 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 CSSPropertyMarkerStart:
case CSSPropertyMarkerMid:
case CSSPropertyMarkerEnd:
@@ -3370,7 +3375,7 @@ const CSSValue* CSSPropertyParser::parseSingleValue(
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:
@@ -3408,18 +3413,18 @@ const CSSValue* CSSPropertyParser::parseSingleValue(
return consumePerspective(m_range, m_context, unresolvedProperty);
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:
@@ -3489,11 +3494,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);
@@ -3529,14 +3534,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;
@@ -3553,10 +3558,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())
@@ -3575,7 +3580,7 @@ static CSSValue* consumeFontFaceSrcLocal(CSSParserTokenRange& range,
}
static CSSValueList* consumeFontFaceSrc(CSSParserTokenRange& range,
- const CSSParserContext& context) {
+ const CSSParserContext* context) {
CSSValueList* values = CSSValueList::createCommaSeparated();
do {
@@ -3612,8 +3617,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;
@@ -3696,7 +3701,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;
}
@@ -3714,7 +3719,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;
@@ -3746,14 +3751,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);
@@ -3837,13 +3842,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,
@@ -3893,18 +3900,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,
@@ -3915,13 +3923,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,
@@ -3940,7 +3949,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);
@@ -4052,7 +4061,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;
@@ -4091,7 +4100,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;
}
@@ -4101,7 +4110,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;
}
@@ -4279,14 +4288,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);
@@ -4366,14 +4376,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;
@@ -4426,7 +4436,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);
}
@@ -4541,7 +4551,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);
@@ -4559,7 +4569,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 {
@@ -4597,13 +4607,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;
@@ -4682,20 +4692,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))
@@ -4708,7 +4720,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;
}
@@ -4749,7 +4761,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,
@@ -4762,7 +4774,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,
@@ -4772,7 +4784,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;
@@ -4862,7 +4874,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,
@@ -4952,9 +4964,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