Index: third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp |
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp |
index ce08752b343afb1db20b13f87687c154164cbc08..c502ac825e6893fc0b94b68f4e148a178c70d871 100644 |
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp |
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp |
@@ -297,14 +297,14 @@ CSSPrimitiveValue* consumeTime(CSSParserTokenRange& range, ValueRange valueRange |
return nullptr; |
} |
-CSSPrimitiveValue* consumeIdent(CSSParserTokenRange& range) |
+CSSIdentifierValue* consumeIdent(CSSParserTokenRange& range) |
{ |
if (range.peek().type() != IdentToken) |
return nullptr; |
- return CSSPrimitiveValue::createIdentifier(range.consumeIncludingWhitespace().id()); |
+ return CSSIdentifierValue::create(range.consumeIncludingWhitespace().id()); |
} |
-CSSPrimitiveValue* consumeIdentRange(CSSParserTokenRange& range, CSSValueID lower, CSSValueID upper) |
+CSSIdentifierValue* consumeIdentRange(CSSParserTokenRange& range, CSSValueID lower, CSSValueID upper) |
{ |
if (range.peek().id() < lower || range.peek().id() > upper) |
return nullptr; |
@@ -490,7 +490,7 @@ CSSValue* consumeColor(CSSParserTokenRange& range, CSSParserMode cssParserMode, |
return CSSColorValue::create(color); |
} |
-static CSSPrimitiveValue* consumePositionComponent(CSSParserTokenRange& range, CSSParserMode cssParserMode, UnitlessQuirk unitless, bool& horizontalEdge, bool& verticalEdge) |
+static CSSValue* consumePositionComponent(CSSParserTokenRange& range, CSSParserMode cssParserMode, UnitlessQuirk unitless, bool& horizontalEdge, bool& verticalEdge) |
{ |
if (range.peek().type() != IdentToken) |
return consumeLengthOrPercent(range, cssParserMode, ValueRangeAll, unitless); |
@@ -510,30 +510,36 @@ static CSSPrimitiveValue* consumePositionComponent(CSSParserTokenRange& range, C |
return consumeIdent(range); |
} |
-static bool isHorizontalPositionKeywordOnly(const CSSPrimitiveValue& value) |
+static bool isHorizontalPositionKeywordOnly(const CSSValue& value) |
{ |
- return value.isValueID() && (value.getValueID() == CSSValueLeft || value.getValueID() == CSSValueRight); |
+ if (!value.isIdentifierValue()) |
+ return false; |
+ CSSValueID valueID = toCSSIdentifierValue(value).getValueID(); |
+ return valueID == CSSValueLeft || valueID == CSSValueRight; |
} |
-static bool isVerticalPositionKeywordOnly(const CSSPrimitiveValue& value) |
+static bool isVerticalPositionKeywordOnly(const CSSValue& value) |
{ |
- return value.isValueID() && (value.getValueID() == CSSValueTop || value.getValueID() == CSSValueBottom); |
+ if (!value.isIdentifierValue()) |
+ return false; |
+ CSSValueID valueID = toCSSIdentifierValue(value).getValueID(); |
+ return valueID == CSSValueTop || valueID == CSSValueBottom; |
} |
-static void positionFromOneValue(CSSPrimitiveValue* value, CSSValue*& resultX, CSSValue*& resultY) |
+static void positionFromOneValue(CSSValue* value, CSSValue*& resultX, CSSValue*& resultY) |
{ |
bool valueAppliesToYAxisOnly = isVerticalPositionKeywordOnly(*value); |
resultX = value; |
- resultY = CSSPrimitiveValue::createIdentifier(CSSValueCenter); |
+ resultY = CSSIdentifierValue::create(CSSValueCenter); |
if (valueAppliesToYAxisOnly) |
std::swap(resultX, resultY); |
} |
-static void positionFromTwoValues(CSSPrimitiveValue* value1, CSSPrimitiveValue* value2, |
+static void positionFromTwoValues(CSSValue* value1, CSSValue* value2, |
CSSValue*& resultX, CSSValue*& resultY) |
{ |
bool mustOrderAsXY = isHorizontalPositionKeywordOnly(*value1) || isVerticalPositionKeywordOnly(*value2) |
- || !value1->isValueID() || !value2->isValueID(); |
+ || !value1->isIdentifierValue() || !value2->isIdentifierValue(); |
bool mustOrderAsYX = isVerticalPositionKeywordOnly(*value1) || isHorizontalPositionKeywordOnly(*value2); |
DCHECK(!mustOrderAsXY || !mustOrderAsYX); |
resultX = value1; |
@@ -542,12 +548,11 @@ static void positionFromTwoValues(CSSPrimitiveValue* value1, CSSPrimitiveValue* |
std::swap(resultX, resultY); |
} |
-static void positionFromThreeOrFourValues(CSSPrimitiveValue** values, CSSValue*& resultX, CSSValue*& resultY) |
+static void positionFromThreeOrFourValues(CSSValue** values, CSSValue*& resultX, CSSValue*& resultY) |
{ |
- CSSPrimitiveValue* center = nullptr; |
+ CSSIdentifierValue* center = nullptr; |
for (int i = 0; values[i]; i++) { |
- CSSPrimitiveValue* currentValue = values[i]; |
- DCHECK(currentValue->isValueID()); |
+ CSSIdentifierValue* currentValue = toCSSIdentifierValue(values[i]); |
CSSValueID id = currentValue->getValueID(); |
if (id == CSSValueCenter) { |
@@ -557,7 +562,7 @@ static void positionFromThreeOrFourValues(CSSPrimitiveValue** values, CSSValue*& |
} |
CSSValue* result = nullptr; |
- if (values[i + 1] && !values[i + 1]->isValueID()) { |
+ if (values[i + 1] && !values[i + 1]->isIdentifierValue()) { |
result = CSSValuePair::create(currentValue, values[++i], CSSValuePair::KeepIdenticalValues); |
} else { |
result = currentValue; |
@@ -588,26 +593,26 @@ bool consumePosition(CSSParserTokenRange& range, CSSParserMode cssParserMode, Un |
{ |
bool horizontalEdge = false; |
bool verticalEdge = false; |
- CSSPrimitiveValue* value1 = consumePositionComponent(range, cssParserMode, unitless, horizontalEdge, verticalEdge); |
+ CSSValue* value1 = consumePositionComponent(range, cssParserMode, unitless, horizontalEdge, verticalEdge); |
if (!value1) |
return false; |
- if (!value1->isValueID()) |
+ if (!value1->isIdentifierValue()) |
horizontalEdge = true; |
CSSParserTokenRange rangeAfterFirstConsume = range; |
- CSSPrimitiveValue* value2 = consumePositionComponent(range, cssParserMode, unitless, horizontalEdge, verticalEdge); |
+ CSSValue* value2 = consumePositionComponent(range, cssParserMode, unitless, horizontalEdge, verticalEdge); |
if (!value2) { |
positionFromOneValue(value1, resultX, resultY); |
return true; |
} |
- CSSPrimitiveValue* value3 = nullptr; |
- if (value1->isValueID() |
- && value2->isValueID() != (range.peek().type() == IdentToken) |
- && (value2->isValueID() ? value2->getValueID() : value1->getValueID()) != CSSValueCenter) |
+ CSSValue* value3 = nullptr; |
+ if (value1->isIdentifierValue() |
+ && value2->isIdentifierValue() != (range.peek().type() == IdentToken) |
+ && (value2->isIdentifierValue() ? toCSSIdentifierValue(value2)->getValueID() : toCSSIdentifierValue(value1)->getValueID()) != CSSValueCenter) |
value3 = consumePositionComponent(range, cssParserMode, unitless, horizontalEdge, verticalEdge); |
if (!value3) { |
- if (verticalEdge && !value2->isValueID()) { |
+ if (verticalEdge && !value2->isIdentifierValue()) { |
range = rangeAfterFirstConsume; |
positionFromOneValue(value1, resultX, resultY); |
return true; |
@@ -616,10 +621,10 @@ bool consumePosition(CSSParserTokenRange& range, CSSParserMode cssParserMode, Un |
return true; |
} |
- CSSPrimitiveValue* value4 = nullptr; |
- if (value3->isValueID() && value3->getValueID() != CSSValueCenter && range.peek().type() != IdentToken) |
+ CSSValue* value4 = nullptr; |
+ if (value3->isIdentifierValue() && toCSSIdentifierValue(value3)->getValueID() != CSSValueCenter && range.peek().type() != IdentToken) |
value4 = consumePositionComponent(range, cssParserMode, unitless, horizontalEdge, verticalEdge); |
- CSSPrimitiveValue* values[5]; |
+ CSSValue* values[5]; |
values[0] = value1; |
values[1] = value2; |
values[2] = value3; |
@@ -642,13 +647,13 @@ bool consumeOneOrTwoValuedPosition(CSSParserTokenRange& range, CSSParserMode css |
{ |
bool horizontalEdge = false; |
bool verticalEdge = false; |
- CSSPrimitiveValue* value1 = consumePositionComponent(range, cssParserMode, unitless, horizontalEdge, verticalEdge); |
+ CSSValue* value1 = consumePositionComponent(range, cssParserMode, unitless, horizontalEdge, verticalEdge); |
if (!value1) |
return false; |
- if (!value1->isValueID()) |
+ if (!value1->isIdentifierValue()) |
horizontalEdge = true; |
- CSSPrimitiveValue* value2 = nullptr; |
+ CSSValue* value2 = nullptr; |
if (!verticalEdge || range.peek().type() == IdentToken) |
value2 = consumePositionComponent(range, cssParserMode, unitless, horizontalEdge, verticalEdge); |
if (!value2) { |
@@ -811,13 +816,13 @@ static CSSValue* consumeDeprecatedRadialGradient(CSSParserTokenRange& args, CSSP |
if ((centerX || centerY) && !consumeCommaIncludingWhitespace(args)) |
return nullptr; |
- result->setFirstX(toCSSPrimitiveValue(centerX)); |
- result->setSecondX(toCSSPrimitiveValue(centerX)); |
- result->setFirstY(toCSSPrimitiveValue(centerY)); |
- result->setSecondY(toCSSPrimitiveValue(centerY)); |
+ result->setFirstX(centerX); |
+ result->setSecondX(centerX); |
+ result->setFirstY(centerY); |
+ result->setSecondY(centerY); |
- CSSPrimitiveValue* shape = consumeIdent<CSSValueCircle, CSSValueEllipse>(args); |
- CSSPrimitiveValue* sizeKeyword = consumeIdent<CSSValueClosestSide, CSSValueClosestCorner, CSSValueFarthestSide, CSSValueFarthestCorner, CSSValueContain, CSSValueCover>(args); |
+ CSSIdentifierValue* shape = consumeIdent<CSSValueCircle, CSSValueEllipse>(args); |
+ CSSIdentifierValue* sizeKeyword = consumeIdent<CSSValueClosestSide, CSSValueClosestCorner, CSSValueFarthestSide, CSSValueFarthestCorner, CSSValueContain, CSSValueCover>(args); |
if (!shape) |
shape = consumeIdent<CSSValueCircle, CSSValueEllipse>(args); |
result->setShape(shape); |
@@ -848,8 +853,8 @@ static CSSValue* consumeRadialGradient(CSSParserTokenRange& args, CSSParserMode |
{ |
CSSRadialGradientValue* result = CSSRadialGradientValue::create(repeating, CSSRadialGradient); |
- CSSPrimitiveValue* shape = nullptr; |
- CSSPrimitiveValue* sizeKeyword = nullptr; |
+ CSSIdentifierValue* shape = nullptr; |
+ CSSIdentifierValue* sizeKeyword = nullptr; |
CSSPrimitiveValue* horizontalSize = nullptr; |
CSSPrimitiveValue* verticalSize = nullptr; |
@@ -937,12 +942,12 @@ static CSSValue* consumeLinearGradient(CSSParserTokenRange& args, CSSParserMode |
if (angle) { |
result->setAngle(angle); |
} else if (gradientType == CSSPrefixedLinearGradient || consumeIdent<CSSValueTo>(args)) { |
- CSSPrimitiveValue* endX = consumeIdent<CSSValueLeft, CSSValueRight>(args); |
- CSSPrimitiveValue* endY = consumeIdent<CSSValueBottom, CSSValueTop>(args); |
+ CSSIdentifierValue* endX = consumeIdent<CSSValueLeft, CSSValueRight>(args); |
+ CSSIdentifierValue* endY = consumeIdent<CSSValueBottom, CSSValueTop>(args); |
if (!endX && !endY) { |
if (gradientType == CSSLinearGradient) |
return nullptr; |
- endY = CSSPrimitiveValue::createIdentifier(CSSValueTop); |
+ endY = CSSIdentifierValue::create(CSSValueTop); |
expectComma = false; |
} else if (!endX) { |
endX = consumeIdent<CSSValueLeft, CSSValueRight>(args); |