#include "core/css/MediaQueryExp.h"
#include "core/css/CSSAspectRatioValue.h"
-#include "core/css/CSSParserValues.h"
#include "core/css/CSSPrimitiveValue.h"
+#include "core/css/parser/CSSParserValues.h"
#include "core/html/parser/HTMLParserIdioms.h"
#include "platform/Decimal.h"
+#include "platform/RuntimeEnabledFeatures.h"
#include "wtf/text/StringBuffer.h"
#include "wtf/text/StringBuilder.h"
-namespace WebCore {
+namespace blink {
using namespace MediaFeatureNames;
return mediaFeature == orientationMediaFeature
|| mediaFeature == pointerMediaFeature
+ || (mediaFeature == hoverMediaFeature && RuntimeEnabledFeatures::hoverMediaQueryKeywordsEnabled())
|| mediaFeature == scanMediaFeature;
}
if (mediaFeature == pointerMediaFeature)
return ident == CSSValueNone || ident == CSSValueCoarse || ident == CSSValueFine;
+ if (mediaFeature == hoverMediaFeature && RuntimeEnabledFeatures::hoverMediaQueryKeywordsEnabled())
+ return ident == CSSValueNone || ident == CSSValueOnDemand || ident == CSSValueHover;
+
if (mediaFeature == scanMediaFeature)
return ident == CSSValueInterlace || ident == CSSValueProgressive;
return false;
}
+static bool positiveLengthUnit(const int unit)
+{
+ switch (unit) {
+ case CSSPrimitiveValue::CSS_EMS:
+ case CSSPrimitiveValue::CSS_EXS:
+ case CSSPrimitiveValue::CSS_PX:
+ case CSSPrimitiveValue::CSS_CM:
+ case CSSPrimitiveValue::CSS_MM:
+ case CSSPrimitiveValue::CSS_IN:
+ case CSSPrimitiveValue::CSS_PT:
+ case CSSPrimitiveValue::CSS_PC:
+ case CSSPrimitiveValue::CSS_REMS:
+ case CSSPrimitiveValue::CSS_CHS:
+ return true;
+ }
+ return false;
+}
+
static inline bool featureWithValidPositiveLength(const String& mediaFeature, const CSSParserValue* value)
{
- if (!(((value->unit >= CSSPrimitiveValue::CSS_EMS && value->unit <= CSSPrimitiveValue::CSS_PC) || value->unit == CSSPrimitiveValue::CSS_REMS) || (value->unit == CSSPrimitiveValue::CSS_NUMBER && !(value->fValue))) || value->fValue < 0)
+ if (!(positiveLengthUnit(value->unit) || (value->unit == CSSPrimitiveValue::CSS_NUMBER && value->fValue == 0)) || value->fValue < 0)
return false;
return false;
return mediaFeature == gridMediaFeature
- || mediaFeature == hoverMediaFeature;
+ || (mediaFeature == hoverMediaFeature && !RuntimeEnabledFeatures::hoverMediaQueryKeywordsEnabled());
}
static inline bool featureWithAspectRatio(const String& mediaFeature)
expValue.value = value->fValue;
expValue.unit = (CSSPrimitiveValue::UnitType)value->unit;
expValue.isValue = true;
- expValue.isInteger = value->isInt;
} else if (featureWithPositiveInteger(lowerMediaFeature, value)
|| featureWithPositiveNumber(lowerMediaFeature, value)
|| featureWithZeroOrOne(lowerMediaFeature, value)) {
expValue.value = value->fValue;
expValue.unit = CSSPrimitiveValue::CSS_NUMBER;
expValue.isValue = true;
- expValue.isInteger = value->isInt;
}
isValid = (expValue.isID || expValue.isValue);