Index: third_party/WebKit/Source/core/css/cssom/LengthValue.cpp |
diff --git a/third_party/WebKit/Source/core/css/cssom/LengthValue.cpp b/third_party/WebKit/Source/core/css/cssom/LengthValue.cpp |
index 637f5076a9d7baa48b920d3c8836f105a2ee2146..786514aa1979893e45e4bd9bd96f4cce7fc22311 100644 |
--- a/third_party/WebKit/Source/core/css/cssom/LengthValue.cpp |
+++ b/third_party/WebKit/Source/core/css/cssom/LengthValue.cpp |
@@ -5,9 +5,12 @@ |
#include "core/css/cssom/LengthValue.h" |
#include "bindings/core/v8/ExceptionState.h" |
+#include "core/css/CSSPrimitiveValue.h" |
+#include "core/css/CSSToLengthConversionData.h" |
#include "core/css/cssom/CalcDictionary.h" |
#include "core/css/cssom/SimpleLength.h" |
#include "core/css/cssom/StyleCalcLength.h" |
+#include "core/style/ComputedStyle.h" |
#include "wtf/HashMap.h" |
namespace blink { |
@@ -64,6 +67,23 @@ LengthValue* LengthValue::divide(double x, ExceptionState& exceptionState) |
return divideInternal(x, exceptionState); |
} |
+double LengthValue::computeLengthPx(ExceptionState& exceptionState) const |
+{ |
+ if (isRelative()) { |
+ // TODO: Resolve relative units to a pixel value. |
+ exceptionState.throwTypeError("Cannot resolve a relative unit to a pixel value."); |
+ return 0; |
+ } |
+ |
+ CSSValue* cssValue = toCSSValue(); |
+ CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(cssValue); |
+ ComputedStyle* computedStyle = const_cast<ComputedStyle*>(ComputedStyle::create().get()); |
+ CSSToLengthConversionData conversionData = CSSToLengthConversionData(computedStyle, |
+ CSSToLengthConversionData::FontSizes(), CSSToLengthConversionData::ViewportSize(), 1); |
+ |
+ return primitiveValue->CSSPrimitiveValue::computeLength<double>(conversionData); |
+} |
+ |
LengthValue* LengthValue::addInternal(const LengthValue*, ExceptionState&) |
{ |
ASSERT_NOT_REACHED(); |