| Index: Source/core/css/CSSComputedStyleDeclaration.cpp
|
| diff --git a/Source/core/css/CSSComputedStyleDeclaration.cpp b/Source/core/css/CSSComputedStyleDeclaration.cpp
|
| index 5cce9ab2ffd5944d1af41caf55e0c6c0a33320e2..9007ea3fcf2486b08bf4a6f9c98ecd52e85d4297 100644
|
| --- a/Source/core/css/CSSComputedStyleDeclaration.cpp
|
| +++ b/Source/core/css/CSSComputedStyleDeclaration.cpp
|
| @@ -647,7 +647,7 @@ static PassRefPtr<CSSValue> getPositionOffsetValue(RenderStyle* style, CSSProper
|
| return zoomAdjustedPixelValueForLength(l, style);
|
| }
|
|
|
| -PassRefPtr<CSSPrimitiveValue> CSSComputedStyleDeclaration::currentColorOrValidColor(RenderStyle* style, const Color& color) const
|
| +PassRefPtr<CSSPrimitiveValue> CSSComputedStyleDeclaration::currentColorOrValidColor(RenderStyle* style, const StyleColor& color) const
|
| {
|
| // This function does NOT look at visited information, so that computed style doesn't expose that.
|
| if (!color.isValid())
|
| @@ -655,6 +655,23 @@ PassRefPtr<CSSPrimitiveValue> CSSComputedStyleDeclaration::currentColorOrValidCo
|
| return cssValuePool().createColorValue(color.rgb());
|
| }
|
|
|
| +PassRefPtr<CSSPrimitiveValue> CSSComputedStyleDeclaration::currentColorOrValidColor(const RenderObject* renderer, const RenderStyle* style, int colorProperty) const
|
| +{
|
| + Color color;
|
| + if (renderer) {
|
| + if (m_allowVisitedStyle)
|
| + color = renderer->resolveColor(colorProperty);
|
| + else
|
| + color = renderer->resolveColor(style->colorIncludingFallback(colorProperty, false /* visited */));
|
| + } else {
|
| + if (m_allowVisitedStyle)
|
| + color = style->visitedDependentColor(colorProperty).color();
|
| + else
|
| + color = style->colorIncludingFallback(colorProperty, false /* visited */).color();
|
| + }
|
| + return cssValuePool().createColorValue(color.rgb());
|
| +}
|
| +
|
| static PassRefPtr<CSSValueList> getBorderRadiusCornerValues(LengthSize radius, const RenderStyle* style, RenderView* renderView)
|
| {
|
| RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated();
|
| @@ -911,7 +928,7 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::valueForFilter(const RenderObj
|
| filterValue = CSSFilterValue::create(CSSFilterValue::DropShadowFilterOperation);
|
| // We want our computed style to look like that of a text shadow (has neither spread nor inset style).
|
| OwnPtr<ShadowData> shadow = ShadowData::create(dropShadowOperation->location(), dropShadowOperation->stdDeviation(), 0, Normal, dropShadowOperation->color());
|
| - filterValue->append(valueForShadow(shadow.get(), CSSPropertyTextShadow, style));
|
| + filterValue->append(valueForShadow(renderer, shadow.get(), CSSPropertyTextShadow, style));
|
| break;
|
| }
|
| case FilterOperation::VALIDATED_CUSTOM:
|
| @@ -1257,7 +1274,7 @@ bool CSSComputedStyleDeclaration::useFixedFontDefaultSize() const
|
| return style->fontDescription().useFixedDefaultSize();
|
| }
|
|
|
| -PassRefPtr<CSSValue> CSSComputedStyleDeclaration::valueForShadow(const ShadowData* shadow, CSSPropertyID propertyID, const RenderStyle* style) const
|
| +PassRefPtr<CSSValue> CSSComputedStyleDeclaration::valueForShadow(const RenderObject* renderer, const ShadowData* shadow, CSSPropertyID propertyID, const RenderStyle* style) const
|
| {
|
| if (!shadow)
|
| return cssValuePool().createIdentifierValue(CSSValueNone);
|
| @@ -1269,7 +1286,7 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::valueForShadow(const ShadowDat
|
| RefPtr<CSSPrimitiveValue> blur = zoomAdjustedPixelValue(s->blur(), style);
|
| RefPtr<CSSPrimitiveValue> spread = propertyID == CSSPropertyTextShadow ? PassRefPtr<CSSPrimitiveValue>() : zoomAdjustedPixelValue(s->spread(), style);
|
| RefPtr<CSSPrimitiveValue> style = propertyID == CSSPropertyTextShadow || s->style() == Normal ? PassRefPtr<CSSPrimitiveValue>() : cssValuePool().createIdentifierValue(CSSValueInset);
|
| - RefPtr<CSSPrimitiveValue> color = cssValuePool().createColorValue(s->color().rgb());
|
| + RefPtr<CSSPrimitiveValue> color = cssValuePool().createColorValue(renderer ? renderer->resolveColor(s->color()).rgb() : s->color().rgb());
|
| list->prepend(ShadowValue::create(x.release(), y.release(), blur.release(), spread.release(), style.release(), color.release()));
|
| }
|
| return list.release();
|
| @@ -1602,7 +1619,7 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropert
|
| break;
|
|
|
| case CSSPropertyBackgroundColor:
|
| - return cssValuePool().createColorValue(m_allowVisitedStyle? style->visitedDependentColor(CSSPropertyBackgroundColor).rgb() : style->backgroundColor().rgb());
|
| + return cssValuePool().createColorValue(renderer->resolveColor(m_allowVisitedStyle? style->visitedDependentColor(CSSPropertyBackgroundColor).rgb() : style->backgroundColor()).rgb());
|
| case CSSPropertyBackgroundImage:
|
| case CSSPropertyWebkitMaskImage: {
|
| const FillLayer* layers = propertyID == CSSPropertyWebkitMaskImage ? style->maskLayers() : style->backgroundLayers();
|
| @@ -1748,13 +1765,13 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropert
|
| return style->borderImageSource()->cssValue();
|
| return cssValuePool().createIdentifierValue(CSSValueNone);
|
| case CSSPropertyBorderTopColor:
|
| - return m_allowVisitedStyle ? cssValuePool().createColorValue(style->visitedDependentColor(CSSPropertyBorderTopColor).rgb()) : currentColorOrValidColor(style.get(), style->borderTopColor());
|
| + return currentColorOrValidColor(renderer, style.get(), CSSPropertyBorderTopColor);
|
| case CSSPropertyBorderRightColor:
|
| - return m_allowVisitedStyle ? cssValuePool().createColorValue(style->visitedDependentColor(CSSPropertyBorderRightColor).rgb()) : currentColorOrValidColor(style.get(), style->borderRightColor());
|
| + return currentColorOrValidColor(renderer, style.get(), CSSPropertyBorderRightColor);
|
| case CSSPropertyBorderBottomColor:
|
| - return m_allowVisitedStyle ? cssValuePool().createColorValue(style->visitedDependentColor(CSSPropertyBorderBottomColor).rgb()) : currentColorOrValidColor(style.get(), style->borderBottomColor());
|
| + return currentColorOrValidColor(renderer, style.get(), CSSPropertyBorderBottomColor);
|
| case CSSPropertyBorderLeftColor:
|
| - return m_allowVisitedStyle ? cssValuePool().createColorValue(style->visitedDependentColor(CSSPropertyBorderLeftColor).rgb()) : currentColorOrValidColor(style.get(), style->borderLeftColor());
|
| + return currentColorOrValidColor(renderer, style.get(), CSSPropertyBorderLeftColor);
|
| case CSSPropertyBorderTopStyle:
|
| return cssValuePool().createValue(style->borderTopStyle());
|
| case CSSPropertyBorderRightStyle:
|
| @@ -1797,7 +1814,7 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropert
|
| return valueForReflection(style->boxReflect(), style.get());
|
| case CSSPropertyBoxShadow:
|
| case CSSPropertyWebkitBoxShadow:
|
| - return valueForShadow(style->boxShadow(), propertyID, style.get());
|
| + return valueForShadow(renderer, style->boxShadow(), propertyID, style.get());
|
| case CSSPropertyCaptionSide:
|
| return cssValuePool().createValue(style->captionSide());
|
| case CSSPropertyClear:
|
| @@ -1819,7 +1836,7 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropert
|
| case CSSPropertyWebkitColumnProgression:
|
| return cssValuePool().createValue(style->columnProgression());
|
| case CSSPropertyWebkitColumnRuleColor:
|
| - return m_allowVisitedStyle ? cssValuePool().createColorValue(style->visitedDependentColor(CSSPropertyOutlineColor).rgb()) : currentColorOrValidColor(style.get(), style->columnRuleColor());
|
| + return currentColorOrValidColor(renderer, style.get(), CSSPropertyWebkitColumnRuleColor);
|
| case CSSPropertyWebkitColumnRuleStyle:
|
| return cssValuePool().createValue(style->columnRuleStyle());
|
| case CSSPropertyWebkitColumnRuleWidth:
|
| @@ -2098,7 +2115,7 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropert
|
| return cssValuePool().createIdentifierValue(CSSValueAuto);
|
| return cssValuePool().createValue(style->orphans(), CSSPrimitiveValue::CSS_NUMBER);
|
| case CSSPropertyOutlineColor:
|
| - return m_allowVisitedStyle ? cssValuePool().createColorValue(style->visitedDependentColor(CSSPropertyOutlineColor).rgb()) : currentColorOrValidColor(style.get(), style->outlineColor());
|
| + return currentColorOrValidColor(renderer, style.get(), CSSPropertyOutlineColor);
|
| case CSSPropertyOutlineOffset:
|
| return zoomAdjustedPixelValue(style->outlineOffset(), style.get());
|
| case CSSPropertyOutlineStyle:
|
| @@ -2176,9 +2193,9 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropert
|
| case CSSPropertyWebkitTextDecorationsInEffect:
|
| return renderTextDecorationFlagsToCSSValue(style->textDecorationsInEffect());
|
| case CSSPropertyWebkitTextFillColor:
|
| - return currentColorOrValidColor(style.get(), style->textFillColor());
|
| + return currentColorOrValidColor(renderer, style.get(), CSSPropertyWebkitTextFillColor);
|
| case CSSPropertyWebkitTextEmphasisColor:
|
| - return currentColorOrValidColor(style.get(), style->textEmphasisColor());
|
| + return currentColorOrValidColor(renderer, style.get(), CSSPropertyWebkitTextEmphasisColor);
|
| case CSSPropertyWebkitTextEmphasisPosition:
|
| return cssValuePool().createValue(style->textEmphasisPosition());
|
| case CSSPropertyWebkitTextEmphasisStyle:
|
| @@ -2214,7 +2231,7 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropert
|
| return textIndent.release();
|
| }
|
| case CSSPropertyTextShadow:
|
| - return valueForShadow(style->textShadow(), propertyID, style.get());
|
| + return valueForShadow(renderer, style->textShadow(), propertyID, style.get());
|
| case CSSPropertyTextRendering:
|
| return cssValuePool().createValue(style->fontDescription().textRenderingMode());
|
| case CSSPropertyTextOverflow:
|
| @@ -2224,7 +2241,7 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropert
|
| case CSSPropertyWebkitTextSecurity:
|
| return cssValuePool().createValue(style->textSecurity());
|
| case CSSPropertyWebkitTextStrokeColor:
|
| - return currentColorOrValidColor(style.get(), style->textStrokeColor());
|
| + return currentColorOrValidColor(renderer, style.get(), CSSPropertyWebkitTextStrokeColor);
|
| case CSSPropertyWebkitTextStrokeWidth:
|
| return zoomAdjustedPixelValue(style->textStrokeWidth(), style.get());
|
| case CSSPropertyTextTransform:
|
| @@ -2470,7 +2487,7 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropert
|
| case CSSPropertyWebkitRtlOrdering:
|
| return cssValuePool().createIdentifierValue(style->rtlOrdering() ? CSSValueVisual : CSSValueLogical);
|
| case CSSPropertyWebkitTapHighlightColor:
|
| - return currentColorOrValidColor(style.get(), style->tapHighlightColor());
|
| + return currentColorOrValidColor(renderer, style.get(), CSSPropertyWebkitTapHighlightColor);
|
| case CSSPropertyWebkitUserDrag:
|
| return cssValuePool().createValue(style->userDrag());
|
| case CSSPropertyWebkitUserSelect:
|
|
|