Index: third_party/WebKit/Source/core/css/cssom/StyleValueFactory.cpp |
diff --git a/third_party/WebKit/Source/core/css/cssom/StyleValueFactory.cpp b/third_party/WebKit/Source/core/css/cssom/StyleValueFactory.cpp |
index 788e10e6f7cb21ece391c2ea39862c1e94dbfd4a..2e63bcbf5e752fa36dc5e8a4bb060841dd1cc635 100644 |
--- a/third_party/WebKit/Source/core/css/cssom/StyleValueFactory.cpp |
+++ b/third_party/WebKit/Source/core/css/cssom/StyleValueFactory.cpp |
@@ -6,7 +6,9 @@ |
#include "core/css/CSSImageValue.h" |
#include "core/css/CSSValue.h" |
+#include "core/css/cssom/CSSCalcLength.h" |
#include "core/css/cssom/CSSNumberValue.h" |
+#include "core/css/cssom/CSSOMTypes.h" |
#include "core/css/cssom/CSSSimpleLength.h" |
#include "core/css/cssom/CSSStyleValue.h" |
#include "core/css/cssom/CSSStyleVariableReferenceValue.h" |
@@ -20,9 +22,17 @@ namespace blink { |
namespace { |
CSSStyleValue* styleValueForPrimitiveValue( |
+ CSSPropertyID propertyID, |
const CSSPrimitiveValue& primitiveValue) { |
if (primitiveValue.isNumber()) |
return CSSNumberValue::create(primitiveValue.getDoubleValue()); |
+ if (primitiveValue.isCalculated()) { |
+ // NOTE: Won't work for non-length units. Perhaps check on propertyID? |
+ if (CSSOMTypes::propertyCanTakeType(propertyID, |
+ CSSStyleValue::CalcLengthType)) |
+ return CSSCalcLength::fromCSSValue(primitiveValue); |
+ return nullptr; |
+ } |
if (primitiveValue.isLength() || primitiveValue.isPercentage()) |
return CSSSimpleLength::fromCSSValue(primitiveValue); |
@@ -40,7 +50,7 @@ CSSStyleValue* styleValueForProperty(CSSPropertyID propertyID, |
} |
if (value.isPrimitiveValue()) |
- return styleValueForPrimitiveValue(toCSSPrimitiveValue(value)); |
+ return styleValueForPrimitiveValue(propertyID, toCSSPrimitiveValue(value)); |
if (value.isVariableReferenceValue()) |
return CSSUnparsedValue::fromCSSValue(toCSSVariableReferenceValue(value)); |
if (value.isImageValue()) |