| Index: third_party/WebKit/Source/core/css/cssom/ComputedStylePropertyMap.cpp
|
| diff --git a/third_party/WebKit/Source/core/css/cssom/ComputedStylePropertyMap.cpp b/third_party/WebKit/Source/core/css/cssom/ComputedStylePropertyMap.cpp
|
| index f0cbe2b848f31f97e7f9beb71db0ff6bce653295..559c7fa4bdaa8469cf1fff8fc408a0508f2a9c59 100644
|
| --- a/third_party/WebKit/Source/core/css/cssom/ComputedStylePropertyMap.cpp
|
| +++ b/third_party/WebKit/Source/core/css/cssom/ComputedStylePropertyMap.cpp
|
| @@ -5,16 +5,68 @@
|
| #include "core/css/cssom/ComputedStylePropertyMap.h"
|
|
|
| #include "core/css/CSSComputedStyleDeclaration.h"
|
| +#include "core/css/cssom/CSSCalcLength.h"
|
| +#include "core/css/cssom/CSSKeywordValue.h"
|
| +#include "core/css/cssom/CSSSimpleLength.h"
|
| #include "core/css/cssom/StyleValueFactory.h"
|
|
|
| namespace blink {
|
|
|
| +namespace {
|
| +
|
| +CSSStyleValue* styleValueForLength(const Length& length)
|
| +{
|
| + if (length.isAuto()) {
|
| + return CSSKeywordValue::create("auto");
|
| + }
|
| + if (length.isFixed()) {
|
| + return CSSSimpleLength::create(length.pixels(), CSSPrimitiveValue::UnitType::Pixels);
|
| + }
|
| + if (length.isPercent()) {
|
| + return CSSSimpleLength::create(length.percent(), CSSPrimitiveValue::UnitType::Percentage);
|
| + }
|
| + if (length.isCalculated()) {
|
| + return CSSCalcLength::fromLength(length);
|
| + }
|
| + NOTREACHED();
|
| + return nullptr;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| CSSStyleValueVector ComputedStylePropertyMap::getAllInternal(CSSPropertyID propertyID)
|
| {
|
| - const CSSValue* cssValue = m_computedStyleDeclaration->getPropertyCSSValueInternal(propertyID);
|
| - if (!cssValue)
|
| - return CSSStyleValueVector();
|
| - return StyleValueFactory::cssValueToStyleValueVector(propertyID, *cssValue);
|
| + Node* node = m_computedStyleDeclaration->styledNode();
|
| + Document& document = node->document();
|
| + // TODO(rjwright): This style recalc is copied from
|
| + // CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropertyID), which also does a "force
|
| + // full layout" step. Need to work out if I need to do that too.
|
| + document.updateStyleAndLayoutTreeForNode(node);
|
| + const ComputedStyle* style = m_computedStyleDeclaration->computeComputedStyle();
|
| +
|
| + CSSStyleValueVector styleValueVector;
|
| + CSSStyleValue* styleValue = nullptr;
|
| + switch (propertyID) {
|
| + case CSSPropertyLeft:
|
| + styleValue = styleValueForLength(style->left());
|
| + case CSSPropertyRight:
|
| + styleValue = styleValueForLength(style->right());
|
| + case CSSPropertyTop:
|
| + styleValue = styleValueForLength(style->top());
|
| + case CSSPropertyBottom:
|
| + styleValue = styleValueForLength(style->bottom());
|
| + case CSSPropertyHeight:
|
| + styleValue = styleValueForLength(style->height());
|
| + case CSSPropertyWidth:
|
| + styleValue = styleValueForLength(style->width());
|
| + default:
|
| + break;
|
| + }
|
| +
|
| + if (styleValue) {
|
| + styleValueVector.append(styleValue);
|
| + }
|
| + return styleValueVector;
|
| }
|
|
|
| CSSStyleValueVector ComputedStylePropertyMap::getAllInternal(AtomicString customPropertyName)
|
|
|