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

Unified Diff: Source/core/css/MediaQueryExp.cpp

Issue 1176393005: Remove usage of CSSParserValue in MediaQueryParser (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Patch for landing Created 5 years, 6 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
« no previous file with comments | « Source/core/css/MediaQueryExp.h ('k') | Source/core/css/parser/MediaQueryParser.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/css/MediaQueryExp.cpp
diff --git a/Source/core/css/MediaQueryExp.cpp b/Source/core/css/MediaQueryExp.cpp
index 17d6b670888848d5ed6cfc49597c6770dcbf970e..6faadddedd5a77518ffe23befd003f8787dff825 100644
--- a/Source/core/css/MediaQueryExp.cpp
+++ b/Source/core/css/MediaQueryExp.cpp
@@ -31,7 +31,7 @@
#include "core/css/MediaQueryExp.h"
#include "core/css/CSSPrimitiveValue.h"
-#include "core/css/parser/CSSParserValues.h"
+#include "core/css/parser/CSSParserToken.h"
#include "core/html/parser/HTMLParserIdioms.h"
#include "platform/Decimal.h"
#include "platform/RuntimeEnabledFeatures.h"
@@ -42,9 +42,9 @@ namespace blink {
using namespace MediaFeatureNames;
-static inline bool featureWithCSSValueID(const String& mediaFeature, const CSSParserValue* value)
+static inline bool featureWithCSSValueID(const String& mediaFeature, const CSSValueID& id)
{
- if (!value->id)
+ if (!id)
return false;
return mediaFeature == displayModeMediaFeature
@@ -77,9 +77,9 @@ static inline bool featureWithValidIdent(const String& mediaFeature, CSSValueID
return false;
}
-static inline bool featureWithValidPositiveLength(const String& mediaFeature, const CSSParserValue* value)
+static inline bool featureWithValidPositiveLength(const String& mediaFeature, const CSSParserToken& token)
{
- if (!(CSSPrimitiveValue::isLength((CSSPrimitiveValue::UnitType)value->unit) || (value->unit == CSSPrimitiveValue::CSS_NUMBER && value->fValue == 0)) || value->fValue < 0)
+ if (!(CSSPrimitiveValue::isLength(token.unitType()) || (token.unitType() == CSSPrimitiveValue::CSS_NUMBER && token.numericValue() == 0)) || token.numericValue() < 0)
return false;
@@ -97,9 +97,9 @@ static inline bool featureWithValidPositiveLength(const String& mediaFeature, co
|| mediaFeature == maxDeviceWidthMediaFeature;
}
-static inline bool featureWithValidDensity(const String& mediaFeature, const CSSParserValue* value)
+static inline bool featureWithValidDensity(const String& mediaFeature, const CSSParserToken& token)
{
- if ((value->unit != CSSPrimitiveValue::CSS_DPPX && value->unit != CSSPrimitiveValue::CSS_DPI && value->unit != CSSPrimitiveValue::CSS_DPCM) || value->fValue <= 0)
+ if ((token.unitType() != CSSPrimitiveValue::CSS_DPPX && token.unitType() != CSSPrimitiveValue::CSS_DPI && token.unitType() != CSSPrimitiveValue::CSS_DPCM) || token.numericValue() <= 0)
return false;
return mediaFeature == resolutionMediaFeature
@@ -107,9 +107,9 @@ static inline bool featureWithValidDensity(const String& mediaFeature, const CSS
|| mediaFeature == maxResolutionMediaFeature;
}
-static inline bool featureWithPositiveInteger(const String& mediaFeature, const CSSParserValue* value)
+static inline bool featureWithPositiveInteger(const String& mediaFeature, const CSSParserToken& token)
{
- if (!value->isInt || value->fValue < 0)
+ if (token.numericValueType() != IntegerValueType || token.numericValue() < 0)
return false;
return mediaFeature == colorMediaFeature
@@ -123,9 +123,9 @@ static inline bool featureWithPositiveInteger(const String& mediaFeature, const
|| mediaFeature == minMonochromeMediaFeature;
}
-static inline bool featureWithPositiveNumber(const String& mediaFeature, const CSSParserValue* value)
+static inline bool featureWithPositiveNumber(const String& mediaFeature, const CSSParserToken& token)
{
- if (value->unit != CSSPrimitiveValue::CSS_NUMBER || value->fValue < 0)
+ if (token.unitType() != CSSPrimitiveValue::CSS_NUMBER || token.numericValue() < 0)
return false;
return mediaFeature == transform3dMediaFeature
@@ -134,9 +134,9 @@ static inline bool featureWithPositiveNumber(const String& mediaFeature, const C
|| mediaFeature == minDevicePixelRatioMediaFeature;
}
-static inline bool featureWithZeroOrOne(const String& mediaFeature, const CSSParserValue* value)
+static inline bool featureWithZeroOrOne(const String& mediaFeature, const CSSParserToken& token)
{
- if (!value->isInt || !(value->fValue == 1 || !value->fValue))
+ if (token.numericValueType() != IntegerValueType || !(token.numericValue() == 1 || !token.numericValue()))
return false;
return mediaFeature == gridMediaFeature;
@@ -204,7 +204,9 @@ MediaQueryExp::MediaQueryExp(const String& mediaFeature, const MediaQueryExpValu
{
}
-PassOwnPtrWillBeRawPtr<MediaQueryExp> MediaQueryExp::createIfValid(const String& mediaFeature, CSSParserValueList* valueList)
+CSSValueID cssValueKeywordID(const CSSParserString&);
+
+PassOwnPtrWillBeRawPtr<MediaQueryExp> MediaQueryExp::createIfValid(const String& mediaFeature, const Vector<CSSParserToken, 4>& tokenList)
{
ASSERT(!mediaFeature.isNull());
@@ -213,37 +215,40 @@ PassOwnPtrWillBeRawPtr<MediaQueryExp> MediaQueryExp::createIfValid(const String&
String lowerMediaFeature = attemptStaticStringCreation(mediaFeature.lower());
// Create value for media query expression that must have 1 or more values.
- if (valueList && valueList->size() > 0) {
- if (valueList->size() == 1) {
- CSSParserValue* value = valueList->current();
- ASSERT(value);
+ if (tokenList.size() > 0) {
+ if (tokenList.size() == 1) {
+ CSSParserToken token = tokenList.at(0);
+ CSSValueID id = token.type() == IdentToken ? cssValueKeywordID(token.value()) : CSSValueInvalid;
- if (featureWithCSSValueID(lowerMediaFeature, value) && featureWithValidIdent(lowerMediaFeature, value->id)) {
+ if (featureWithCSSValueID(lowerMediaFeature, id) && featureWithValidIdent(lowerMediaFeature, id)) {
// Media features that use CSSValueIDs.
- expValue.id = value->id;
+ expValue.id = id;
expValue.unit = CSSPrimitiveValue::CSS_VALUE_ID;
expValue.isID = true;
- } else if (featureWithValidDensity(lowerMediaFeature, value)
- || featureWithValidPositiveLength(lowerMediaFeature, value)) {
- // Media features that must have non-negative <density>, ie. dppx, dpi or dpcm,
- // or Media features that must have non-negative <length> or number value.
- expValue.value = value->fValue;
- expValue.unit = (CSSPrimitiveValue::UnitType)value->unit;
- expValue.isValue = true;
- } else if (featureWithPositiveInteger(lowerMediaFeature, value)
- || featureWithPositiveNumber(lowerMediaFeature, value)
- || featureWithZeroOrOne(lowerMediaFeature, value)) {
- // Media features that must have non-negative integer value,
- // or media features that must have non-negative number value,
- // or media features that must have (0|1) value.
- expValue.value = value->fValue;
- expValue.unit = CSSPrimitiveValue::CSS_NUMBER;
- expValue.isValue = true;
+ } else if (token.type() == NumberToken || token.type() == PercentageToken || token.type() == DimensionToken) {
+ // Check for numeric token types since it is only safe for these types to call numericValue.
+ if (featureWithValidDensity(lowerMediaFeature, token)
+ || featureWithValidPositiveLength(lowerMediaFeature, token)) {
+ // Media features that must have non-negative <density>, ie. dppx, dpi or dpcm,
+ // or Media features that must have non-negative <length> or number value.
+ expValue.value = token.numericValue();
+ expValue.unit = token.unitType();
+ expValue.isValue = true;
+ } else if (featureWithPositiveInteger(lowerMediaFeature, token)
+ || featureWithPositiveNumber(lowerMediaFeature, token)
+ || featureWithZeroOrOne(lowerMediaFeature, token)) {
+ // Media features that must have non-negative integer value,
+ // or media features that must have non-negative number value,
+ // or media features that must have (0|1) value.
+ expValue.value = token.numericValue();
+ expValue.unit = CSSPrimitiveValue::CSS_NUMBER;
+ expValue.isValue = true;
+ }
}
isValid = (expValue.isID || expValue.isValue);
- } else if (valueList->size() == 3 && featureWithAspectRatio(lowerMediaFeature)) {
+ } else if (tokenList.size() == 3 && featureWithAspectRatio(lowerMediaFeature)) {
// Create list of values.
// Currently accepts only <integer>/<integer>.
// Applicable to device-aspect-ratio and aspec-ratio.
@@ -251,14 +256,14 @@ PassOwnPtrWillBeRawPtr<MediaQueryExp> MediaQueryExp::createIfValid(const String&
float numeratorValue = 0;
float denominatorValue = 0;
// The aspect-ratio must be <integer> (whitespace)? / (whitespace)? <integer>.
- for (unsigned i = 0; i < 3; ++i, valueList->next()) {
- const CSSParserValue* value = valueList->current();
- if (i != 1 && value->unit == CSSPrimitiveValue::CSS_NUMBER && value->fValue > 0 && value->isInt) {
+ for (unsigned i = 0; i < 3; ++i) {
+ const CSSParserToken& token = tokenList.at(i);
+ if (i != 1 && token.unitType() == CSSPrimitiveValue::CSS_NUMBER && token.numericValue() > 0 && token.numericValueType() == IntegerValueType) {
if (!i)
- numeratorValue = value->fValue;
+ numeratorValue = token.numericValue();
else
- denominatorValue = value->fValue;
- } else if (i == 1 && value->unit == CSSParserValue::Operator && value->iValue == '/') {
+ denominatorValue = token.numericValue();
+ } else if (i == 1 && token.type() == DelimiterToken && token.delimiter() == '/') {
continue;
} else {
isValid = false;
« no previous file with comments | « Source/core/css/MediaQueryExp.h ('k') | Source/core/css/parser/MediaQueryParser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698