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() |