| Index: Source/core/css/CSSCalculationValue.cpp
|
| diff --git a/Source/core/css/CSSCalculationValue.cpp b/Source/core/css/CSSCalculationValue.cpp
|
| index 998fba4d322d019fc2069e1f42690de038ab1169..9208235947c97b683929a7090e7c37d741855d20 100644
|
| --- a/Source/core/css/CSSCalculationValue.cpp
|
| +++ b/Source/core/css/CSSCalculationValue.cpp
|
| @@ -32,6 +32,7 @@
|
| #include "core/css/CSSCalculationValue.h"
|
|
|
| #include "core/css/CSSPrimitiveValueMappings.h"
|
| +#include "core/css/parser/CSSPropertyParser.h"
|
| #include "core/css/resolver/StyleResolver.h"
|
| #include "wtf/MathExtras.h"
|
| #include "wtf/OwnPtr.h"
|
| @@ -80,6 +81,8 @@ static CalculationCategory unitCategory(CSSPrimitiveValue::UnitType type)
|
| case CSSPrimitiveValue::CSS_HZ:
|
| case CSSPrimitiveValue::CSS_KHZ:
|
| return CalcFrequency;
|
| + case CSSPrimitiveValue::CSS_VARIABLE_REFERENCE:
|
| + return CalcVariable;
|
| default:
|
| return CalcOther;
|
| }
|
| @@ -135,6 +138,7 @@ static bool hasDoubleValue(CSSPrimitiveValue::UnitType type)
|
| case CSSPrimitiveValue::CSS_PROPERTY_ID:
|
| case CSSPrimitiveValue::CSS_VALUE_ID:
|
| case CSSPrimitiveValue::CSS_QEM:
|
| + case CSSPrimitiveValue::CSS_VARIABLE_REFERENCE:
|
| return false;
|
| };
|
| ASSERT_NOT_REACHED();
|
| @@ -243,6 +247,7 @@ public:
|
| case CalcPercentLength:
|
| case CalcPercentNumber:
|
| case CalcTime:
|
| + case CalcVariable:
|
| case CalcOther:
|
| ASSERT_NOT_REACHED();
|
| break;
|
| @@ -308,6 +313,9 @@ static CalculationCategory determineCategory(const CSSCalcExpressionNode& leftSi
|
| if (leftCategory == CalcOther || rightCategory == CalcOther)
|
| return CalcOther;
|
|
|
| + if (leftCategory == CalcVariable || rightCategory == CalcVariable)
|
| + return CalcVariable;
|
| +
|
| switch (op) {
|
| case CalcAdd:
|
| case CalcSubtract:
|
| @@ -529,6 +537,8 @@ public:
|
| return CSSPrimitiveValue::CSS_MS;
|
| case CalcFrequency:
|
| return CSSPrimitiveValue::CSS_HZ;
|
| + case CalcVariable:
|
| + return CSSPrimitiveValue::CSS_VARIABLE_REFERENCE;
|
| case CalcPercentLength:
|
| case CalcPercentNumber:
|
| case CalcOther:
|
| @@ -635,10 +645,21 @@ private:
|
| bool parseValue(CSSParserValueList* tokens, unsigned* index, Value* result)
|
| {
|
| CSSParserValue* parserValue = tokens->valueAt(*index);
|
| - if (parserValue->unit >= CSSParserValue::Operator)
|
| - return false;
|
| +
|
| + if (parserValue->unit >= CSSParserValue::Operator) {
|
| + // We still have to check for variables, which are parser values
|
| + if (!RuntimeEnabledFeatures::cssVariablesEnabled() || !CSSPropertyParser::isVariableReference(parserValue))
|
| + return false;
|
| +
|
| + result->value = CSSCalcPrimitiveValue::create(
|
| + CSSPrimitiveValue::create(parserValue->function->args->valueAt(0)->string, CSSPrimitiveValue::CSS_VARIABLE_REFERENCE), parserValue->isInt);
|
| + ++*index;
|
| +
|
| + return true;
|
| + }
|
|
|
| CSSPrimitiveValue::UnitType type = static_cast<CSSPrimitiveValue::UnitType>(parserValue->unit);
|
| +
|
| if (unitCategory(type) == CalcOther)
|
| return false;
|
|
|
|
|