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

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

Issue 16208004: No need to store invalid media queries. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 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') | no next file » | 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 1af4b574c12abe5285358a4049b2b4de8bbdb573..d68df267e0b3489adc49ff9c8e2b458358e13121 100644
--- a/Source/core/css/MediaQueryExp.cpp
+++ b/Source/core/css/MediaQueryExp.cpp
@@ -197,52 +197,53 @@ bool MediaQueryExp::isViewportDependent() const
|| m_mediaFeature == MediaFeatureNames::maxAspectRatioMediaFeature;
}
-inline MediaQueryExp::MediaQueryExp(const AtomicString& mediaFeature, CSSParserValueList* valueList)
+MediaQueryExp::MediaQueryExp(const AtomicString& mediaFeature, PassRefPtr<CSSValue> value)
: m_mediaFeature(mediaFeature)
- , m_value(0)
- , m_isValid(false)
+ , m_value(value)
{
- // Initialize media query expression that must have 1 or more values.
+}
+
+PassOwnPtr<MediaQueryExp> MediaQueryExp::create(const AtomicString& mediaFeature, CSSParserValueList* valueList)
+{
+ RefPtr<CSSValue> cssValue;
+ bool isValid = false;
+
+ // Create value for media query expression that must have 1 or more values.
if (valueList) {
if (valueList->size() == 1) {
CSSParserValue* value = valueList->current();
- // Media features that use CSSValueIDs.
if (featureWithCSSValueID(mediaFeature, value)) {
- m_value = CSSPrimitiveValue::createIdentifier(value->id);
- if (!featureWithValidIdent(mediaFeature, toCSSPrimitiveValue(m_value.get())->getValueID()))
- m_value.clear();
+ // Media features that use CSSValueIDs.
+ cssValue = CSSPrimitiveValue::createIdentifier(value->id);
+ if (!featureWithValidIdent(mediaFeature, toCSSPrimitiveValue(cssValue.get())->getValueID()))
+ cssValue.clear();
+ } else if (featureWithValidDensity(mediaFeature, value)) {
+ // Media features that must have non-negative <density>, ie. dppx, dpi or dpcm.
+ cssValue = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes) value->unit);
+ } else if (featureWithValidPositiveLenghtOrNumber(mediaFeature, value)) {
+ // Media features that must have non-negative <lenght> or number value.
+ cssValue = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes) value->unit);
+ } else if (featureWithPositiveInteger(mediaFeature, value)) {
+ // Media features that must have non-negative integer value.
+ cssValue = CSSPrimitiveValue::create(value->fValue, CSSPrimitiveValue::CSS_NUMBER);
+ } else if (featureWithPositiveNumber(mediaFeature, value)) {
+ // Media features that must have non-negative number value.
+ cssValue = CSSPrimitiveValue::create(value->fValue, CSSPrimitiveValue::CSS_NUMBER);
+ } else if (featureWithZeroOrOne(mediaFeature, value)) {
+ // Media features that must have (0|1) value.
+ cssValue = CSSPrimitiveValue::create(value->fValue, CSSPrimitiveValue::CSS_NUMBER);
}
- // Media features that must have non-negative <density>, ie. dppx, dpi or dpcm.
- else if (featureWithValidDensity(mediaFeature, value))
- m_value = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes) value->unit);
-
- // Media features that must have non-negative <lenght> or number value.
- else if (featureWithValidPositiveLenghtOrNumber(mediaFeature, value))
- m_value = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes) value->unit);
-
- // Media features that must have non-negative integer value.
- else if (featureWithPositiveInteger(mediaFeature, value))
- m_value = CSSPrimitiveValue::create(value->fValue, CSSPrimitiveValue::CSS_NUMBER);
-
- // Media features that must have non-negative number value.
- else if (featureWithPositiveNumber(mediaFeature, value))
- m_value = CSSPrimitiveValue::create(value->fValue, CSSPrimitiveValue::CSS_NUMBER);
+ isValid = cssValue;
- // Media features that must have (0|1) value.
- else if (featureWithZeroOrOne(mediaFeature, value))
- m_value = CSSPrimitiveValue::create(value->fValue, CSSPrimitiveValue::CSS_NUMBER);
-
- m_isValid = m_value;
} else if (valueList->size() == 3 && featureWithAspectRatio(mediaFeature)) {
// Create list of values.
// Currently accepts only <integer>/<integer>.
// Applicable to device-aspect-ratio and aspec-ratio.
- bool isValid = true;
+ isValid = true;
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();
@@ -251,26 +252,25 @@ inline MediaQueryExp::MediaQueryExp(const AtomicString& mediaFeature, CSSParserV
numeratorValue = value->fValue;
else
denominatorValue = value->fValue;
- } else if (i == 1 && value->unit == CSSParserValue::Operator && value->iValue == '/')
+ } else if (i == 1 && value->unit == CSSParserValue::Operator && value->iValue == '/') {
continue;
- else {
+ } else {
isValid = false;
break;
}
}
if (isValid)
- m_value = CSSAspectRatioValue::create(numeratorValue, denominatorValue);
-
- m_isValid = m_value;
+ cssValue = CSSAspectRatioValue::create(numeratorValue, denominatorValue);
}
- } else if (featureWithoutValue(mediaFeature))
- m_isValid = true;
-}
+ } else if (featureWithoutValue(mediaFeature)) {
+ isValid = true;
+ }
-PassOwnPtr<MediaQueryExp> MediaQueryExp::create(const AtomicString& mediaFeature, CSSParserValueList* values)
-{
- return adoptPtr(new MediaQueryExp(mediaFeature, values));
+ if (!isValid)
+ return nullptr;
+
+ return adoptPtr(new MediaQueryExp(mediaFeature, cssValue));
}
MediaQueryExp::~MediaQueryExp()
« no previous file with comments | « Source/core/css/MediaQueryExp.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698