Chromium Code Reviews| Index: third_party/WebKit/Source/core/css/PropertyRegistration.cpp |
| diff --git a/third_party/WebKit/Source/core/css/PropertyRegistration.cpp b/third_party/WebKit/Source/core/css/PropertyRegistration.cpp |
| index f7723db0ea2010a640cd791d3b25e0017872c474..bb319f72c687d4232acec0fbe469456887fa35a5 100644 |
| --- a/third_party/WebKit/Source/core/css/PropertyRegistration.cpp |
| +++ b/third_party/WebKit/Source/core/css/PropertyRegistration.cpp |
| @@ -5,6 +5,7 @@ |
| #include "core/css/PropertyRegistration.h" |
| #include "core/css/CSSSyntaxDescriptor.h" |
| +#include "core/css/CSSValueList.h" |
| #include "core/css/CSSVariableReferenceValue.h" |
| #include "core/css/PropertyDescriptor.h" |
| #include "core/css/PropertyRegistry.h" |
| @@ -15,9 +16,36 @@ |
| namespace blink { |
| -static bool computationallyIdempotent(const CSSValue& value) |
| +static bool computationallyIndependent(const CSSValue& value) |
|
alancutter (OOO until 2018)
2016/09/20 00:15:55
What happens to CSS wide keywords? Either check th
Timothy Loh
2016/09/21 01:12:04
This is tested in register-property-syntax-parsing
|
| { |
| - // TODO(timloh): Implement this |
| + if (value.isVariableReferenceValue()) |
| + return !toCSSVariableReferenceValue(value).variableDataValue()->needsVariableResolution(); |
|
sashab
2016/09/19 23:25:03
Can variables not have percentages etc in them? It
alancutter (OOO until 2018)
2016/09/20 00:15:55
It's very weird to be checking needsVariableResolu
Timothy Loh
2016/09/21 01:12:04
If there are variable references then this returns
Timothy Loh
2016/09/21 01:12:04
There's no CSSTokenStreamValue class -- CSSVariabl
|
| + |
| + // TODO(timloh): Images and transform-function values can also contain lengths. |
|
sashab
2016/09/19 23:25:03
Are there tests that fail because of this?
Timothy Loh
2016/09/21 01:12:04
Nope I'll add them when I resolve the TODO.
|
| + |
| + if (value.isValueList()) { |
| + for (const CSSValue* innerValue : toCSSValueList(value)) { |
| + if (!computationallyIndependent(*innerValue)) |
| + return false; |
| + } |
| + return true; |
| + } |
| + |
| + if (!value.isPrimitiveValue()) |
|
sashab
2016/09/19 23:25:03
Just to prevent the kind of mess we currently have
alancutter (OOO until 2018)
2016/09/20 00:15:55
I think it's preferred to exit functions early on
Timothy Loh
2016/09/21 01:12:04
I'll change this, it probably made more sense befo
|
| + return true; |
| + |
| + const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| + if (!primitiveValue.isLength() && !primitiveValue.isCalculatedPercentageWithLength()) |
| + return true; |
| + |
| + CSSPrimitiveValue::CSSLengthArray lengthArray; |
| + primitiveValue.accumulateLengthArray(lengthArray); |
| + for (size_t i = 0; i < lengthArray.values.size(); i++) { |
| + if (lengthArray.typeFlags.get(i) |
| + && i != CSSPrimitiveValue::UnitTypePixels |
| + && i != CSSPrimitiveValue::UnitTypePercentage) |
| + return false; |
| + } |
| return true; |
| } |
| @@ -53,8 +81,8 @@ void PropertyRegistration::registerProperty(ExecutionContext* executionContext, |
| exceptionState.throwDOMException(SyntaxError, "The initial value provided does not parse for the given syntax."); |
| return; |
| } |
| - if (!computationallyIdempotent(*initial)) { |
| - exceptionState.throwDOMException(SyntaxError, "The initial value provided is not computationally idempotent."); |
| + if (!computationallyIndependent(*initial)) { |
| + exceptionState.throwDOMException(SyntaxError, "The initial value provided is not computationally independent."); |
| return; |
| } |
| registry.registerProperty(atomicName, syntaxDescriptor, descriptor.inherits(), initial); |