Index: third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp |
diff --git a/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp b/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp |
index 3fa99f4ec52abc06744c8b7125e39c43e51f80c6..86725131a857af90e1edd0983e6a8cd825edf4e8 100644 |
--- a/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp |
+++ b/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp |
@@ -250,6 +250,12 @@ static CSSValue* valueForPositionOffset(const ComputedStyle& style, CSSPropertyI |
return zoomAdjustedPixelValueForLength(offset, style); |
} |
+static CSSPrimitiveValue* numberPercentSlice(const Length& calcSliceLength) |
+{ |
+ PixelsAndPercent pap = calcSliceLength.getPixelsAndPercent(); |
+ return CSSPrimitiveValue::create(CSSCalcValue::create(CSSCalcValue::createExpressionNode(pap.pixels, pap.percent, true))); |
+} |
+ |
static CSSBorderImageSliceValue* valueForNinePieceImageSlice(const NinePieceImage& image) |
{ |
// Create the slices. |
@@ -259,7 +265,9 @@ static CSSBorderImageSliceValue* valueForNinePieceImageSlice(const NinePieceImag |
CSSPrimitiveValue* left = nullptr; |
// TODO(alancutter): Make this code aware of calc lengths. |
- if (image.imageSlices().top().hasPercent()) |
+ if (image.imageSlices().top().isCalculated()) { |
+ top = numberPercentSlice(image.imageSlices().top()); |
+ } else if (image.imageSlices().top().hasPercent()) |
top = cssValuePool().createValue(image.imageSlices().top().value(), CSSPrimitiveValue::UnitType::Percentage); |
else |
top = cssValuePool().createValue(image.imageSlices().top().value(), CSSPrimitiveValue::UnitType::Number); |
@@ -270,7 +278,9 @@ static CSSBorderImageSliceValue* valueForNinePieceImageSlice(const NinePieceImag |
bottom = top; |
left = top; |
} else { |
- if (image.imageSlices().right().hasPercent()) |
+ if (image.imageSlices().right().isCalculated()) |
+ right = numberPercentSlice(image.imageSlices().right()); |
+ else if (image.imageSlices().right().hasPercent()) |
right = cssValuePool().createValue(image.imageSlices().right().value(), CSSPrimitiveValue::UnitType::Percentage); |
else |
right = cssValuePool().createValue(image.imageSlices().right().value(), CSSPrimitiveValue::UnitType::Number); |
@@ -279,7 +289,9 @@ static CSSBorderImageSliceValue* valueForNinePieceImageSlice(const NinePieceImag |
bottom = top; |
left = right; |
} else { |
- if (image.imageSlices().bottom().hasPercent()) |
+ if (image.imageSlices().bottom().isCalculated()) |
+ bottom = numberPercentSlice(image.imageSlices().right()); |
+ else if (image.imageSlices().bottom().hasPercent()) |
bottom = cssValuePool().createValue(image.imageSlices().bottom().value(), CSSPrimitiveValue::UnitType::Percentage); |
else |
bottom = cssValuePool().createValue(image.imageSlices().bottom().value(), CSSPrimitiveValue::UnitType::Number); |
@@ -287,7 +299,9 @@ static CSSBorderImageSliceValue* valueForNinePieceImageSlice(const NinePieceImag |
if (image.imageSlices().left() == image.imageSlices().right()) { |
left = right; |
} else { |
- if (image.imageSlices().left().hasPercent()) |
+ if (image.imageSlices().left().isCalculated()) |
+ left = numberPercentSlice(image.imageSlices().right()); |
+ else if (image.imageSlices().left().hasPercent()) |
left = cssValuePool().createValue(image.imageSlices().left().value(), CSSPrimitiveValue::UnitType::Percentage); |
else |
left = cssValuePool().createValue(image.imageSlices().left().value(), CSSPrimitiveValue::UnitType::Number); |