diff options
Diffstat (limited to 'Source/WebCore/css/CSSValue.cpp')
-rw-r--r-- | Source/WebCore/css/CSSValue.cpp | 423 |
1 files changed, 210 insertions, 213 deletions
diff --git a/Source/WebCore/css/CSSValue.cpp b/Source/WebCore/css/CSSValue.cpp index 760e8d0ad..c619e8f80 100644 --- a/Source/WebCore/css/CSSValue.cpp +++ b/Source/WebCore/css/CSSValue.cpp @@ -11,10 +11,10 @@ * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR @@ -28,34 +28,46 @@ #include "config.h" #include "CSSValue.h" +#include "CSSAnimationTriggerScrollValue.h" #include "CSSAspectRatioValue.h" #include "CSSBorderImageSliceValue.h" #include "CSSCalculationValue.h" #include "CSSCanvasValue.h" +#include "CSSContentDistributionValue.h" #include "CSSCrossfadeValue.h" #include "CSSCursorImageValue.h" +#include "CSSCustomIdentValue.h" +#include "CSSCustomPropertyValue.h" #include "CSSFilterImageValue.h" #include "CSSFontFaceSrcValue.h" #include "CSSFontFeatureValue.h" #include "CSSFontValue.h" +#include "CSSFontVariationValue.h" #include "CSSFunctionValue.h" #include "CSSGradientValue.h" -#include "CSSGridTemplateValue.h" #include "CSSImageSetValue.h" #include "CSSImageValue.h" #include "CSSInheritedValue.h" #include "CSSInitialValue.h" #include "CSSLineBoxContainValue.h" +#include "CSSNamedImageValue.h" +#include "CSSPendingSubstitutionValue.h" #include "CSSPrimitiveValue.h" +#include "CSSProperty.h" #include "CSSReflectValue.h" #include "CSSShadowValue.h" #include "CSSTimingFunctionValue.h" #include "CSSUnicodeRangeValue.h" +#include "CSSUnsetValue.h" #include "CSSValueList.h" -#include "SVGColor.h" -#include "SVGPaint.h" -#include "WebKitCSSFilterValue.h" -#include "WebKitCSSTransformValue.h" +#include "CSSVariableReferenceValue.h" + +#include "CSSGridAutoRepeatValue.h" +#include "CSSGridLineNamesValue.h" +#include "CSSGridTemplateAreasValue.h" + +#include "DeprecatedCSSOMPrimitiveValue.h" +#include "DeprecatedCSSOMValueList.h" namespace WebCore { @@ -65,29 +77,9 @@ struct SameSizeAsCSSValue : public RefCounted<SameSizeAsCSSValue> { COMPILE_ASSERT(sizeof(CSSValue) == sizeof(SameSizeAsCSSValue), CSS_value_should_stay_small); -class TextCloneCSSValue : public CSSValue { -public: - static PassRef<TextCloneCSSValue> create(ClassType classType, const String& text) - { - return adoptRef(*new TextCloneCSSValue(classType, text)); - } - - String cssText() const { return m_cssText; } - -private: - TextCloneCSSValue(ClassType classType, const String& text) - : CSSValue(classType, /*isCSSOMSafe*/ true) - , m_cssText(text) - { - m_isTextClone = true; - } - - String m_cssText; -}; - bool CSSValue::isImplicitInitialValue() const { - return m_classType == InitialClass && toCSSInitialValue(this)->isImplicit(); + return m_classType == InitialClass && downcast<CSSInitialValue>(*this).isImplicit(); } CSSValue::Type CSSValue::cssValueType() const @@ -100,45 +92,27 @@ CSSValue::Type CSSValue::cssValueType() const return CSS_VALUE_LIST; if (isInitialValue()) return CSS_INITIAL; + if (isUnsetValue()) + return CSS_UNSET; + if (isRevertValue()) + return CSS_REVERT; return CSS_CUSTOM; } -void CSSValue::addSubresourceStyleURLs(ListHashSet<URL>& urls, const StyleSheetContents* styleSheet) const +bool CSSValue::traverseSubresources(const std::function<bool (const CachedResource&)>& handler) const { - // This should get called for internal instances only. - ASSERT(!isCSSOMSafe()); - - if (isPrimitiveValue()) - toCSSPrimitiveValue(this)->addSubresourceStyleURLs(urls, styleSheet); - else if (isValueList()) - toCSSValueList(this)->addSubresourceStyleURLs(urls, styleSheet); - else if (classType() == FontFaceSrcClass) - toCSSFontFaceSrcValue(this)->addSubresourceStyleURLs(urls, styleSheet); - else if (classType() == ReflectClass) - toCSSReflectValue(this)->addSubresourceStyleURLs(urls, styleSheet); -} - -bool CSSValue::hasFailedOrCanceledSubresources() const -{ - // This should get called for internal instances only. - ASSERT(!isCSSOMSafe()); - - if (isValueList()) - return toCSSValueList(this)->hasFailedOrCanceledSubresources(); - if (classType() == FontFaceSrcClass) - return toCSSFontFaceSrcValue(this)->hasFailedOrCanceledSubresources(); - if (classType() == ImageClass) - return toCSSImageValue(this)->hasFailedOrCanceledSubresources(); - if (classType() == CrossfadeClass) - return toCSSCrossfadeValue(this)->hasFailedOrCanceledSubresources(); -#if ENABLE(CSS_FILTERS) - if (classType() == FilterImageClass) - return toCSSFilterImageValue(this)->hasFailedOrCanceledSubresources(); -#endif -#if ENABLE(CSS_IMAGE_SET) - if (classType() == ImageSetClass) - return toCSSImageSetValue(this)->hasFailedOrCanceledSubresources(); -#endif + if (is<CSSValueList>(*this)) + return downcast<CSSValueList>(*this).traverseSubresources(handler); + if (is<CSSFontFaceSrcValue>(*this)) + return downcast<CSSFontFaceSrcValue>(*this).traverseSubresources(handler); + if (is<CSSImageValue>(*this)) + return downcast<CSSImageValue>(*this).traverseSubresources(handler); + if (is<CSSCrossfadeValue>(*this)) + return downcast<CSSCrossfadeValue>(*this).traverseSubresources(handler); + if (is<CSSFilterImageValue>(*this)) + return downcast<CSSFilterImageValue>(*this).traverseSubresources(handler); + if (is<CSSImageSetValue>(*this)) + return downcast<CSSImageSetValue>(*this).traverseSubresources(handler); return false; } @@ -150,11 +124,6 @@ inline static bool compareCSSValues(const CSSValue& first, const CSSValue& secon bool CSSValue::equals(const CSSValue& other) const { - if (m_isTextClone) { - ASSERT(isCSSOMSafe()); - return static_cast<const TextCloneCSSValue*>(this)->cssText() == other.cssText(); - } - if (m_classType == other.m_classType) { switch (m_classType) { case AspectRatioClass: @@ -163,18 +132,22 @@ bool CSSValue::equals(const CSSValue& other) const return compareCSSValues<CSSBorderImageSliceValue>(*this, other); case CanvasClass: return compareCSSValues<CSSCanvasValue>(*this, other); + case NamedImageClass: + return compareCSSValues<CSSNamedImageValue>(*this, other); case CursorImageClass: return compareCSSValues<CSSCursorImageValue>(*this, other); -#if ENABLE(CSS_FILTERS) case FilterImageClass: return compareCSSValues<CSSFilterImageValue>(*this, other); -#endif case FontClass: return compareCSSValues<CSSFontValue>(*this, other); case FontFaceSrcClass: return compareCSSValues<CSSFontFaceSrcValue>(*this, other); case FontFeatureClass: return compareCSSValues<CSSFontFeatureValue>(*this, other); +#if ENABLE(VARIATION_FONTS) + case FontVariationClass: + return compareCSSValues<CSSFontVariationValue>(*this, other); +#endif case FunctionClass: return compareCSSValues<CSSFunctionValue>(*this, other); case LinearGradientClass: @@ -189,8 +162,16 @@ bool CSSValue::equals(const CSSValue& other) const return compareCSSValues<CSSInheritedValue>(*this, other); case InitialClass: return compareCSSValues<CSSInitialValue>(*this, other); - case GridTemplateClass: - return compareCSSValues<CSSGridTemplateValue>(*this, other); + case UnsetClass: + return compareCSSValues<CSSUnsetValue>(*this, other); + case RevertClass: + return compareCSSValues<CSSRevertValue>(*this, other); + case GridAutoRepeatClass: + return compareCSSValues<CSSGridAutoRepeatValue>(*this, other); + case GridLineNamesClass: + return compareCSSValues<CSSGridLineNamesValue>(*this, other); + case GridTemplateAreasClass: + return compareCSSValues<CSSGridTemplateAreasValue>(*this, other); case PrimitiveClass: return compareCSSValues<CSSPrimitiveValue>(*this, other); case ReflectClass: @@ -201,263 +182,279 @@ bool CSSValue::equals(const CSSValue& other) const return compareCSSValues<CSSCubicBezierTimingFunctionValue>(*this, other); case StepsTimingFunctionClass: return compareCSSValues<CSSStepsTimingFunctionValue>(*this, other); + case SpringTimingFunctionClass: + return compareCSSValues<CSSSpringTimingFunctionValue>(*this, other); case UnicodeRangeClass: return compareCSSValues<CSSUnicodeRangeValue>(*this, other); case ValueListClass: return compareCSSValues<CSSValueList>(*this, other); - case WebKitCSSTransformClass: - return compareCSSValues<WebKitCSSTransformValue>(*this, other); case LineBoxContainClass: return compareCSSValues<CSSLineBoxContainValue>(*this, other); case CalculationClass: return compareCSSValues<CSSCalcValue>(*this, other); -#if ENABLE(CSS_IMAGE_SET) case ImageSetClass: return compareCSSValues<CSSImageSetValue>(*this, other); +#if ENABLE(CSS_ANIMATIONS_LEVEL_2) + case AnimationTriggerScrollClass: + return compareCSSValues<CSSAnimationTriggerScrollValue>(*this, other); #endif -#if ENABLE(CSS_FILTERS) - case WebKitCSSFilterClass: - return compareCSSValues<WebKitCSSFilterValue>(*this, other); -#endif -#if ENABLE(SVG) - case SVGColorClass: - return compareCSSValues<SVGColor>(*this, other); - case SVGPaintClass: - return compareCSSValues<SVGPaint>(*this, other); -#endif + case CSSContentDistributionClass: + return compareCSSValues<CSSContentDistributionValue>(*this, other); + case CustomPropertyClass: + return compareCSSValues<CSSCustomPropertyValue>(*this, other); + case VariableReferenceClass: + return compareCSSValues<CSSVariableReferenceValue>(*this, other); + case PendingSubstitutionValueClass: + return compareCSSValues<CSSPendingSubstitutionValue>(*this, other); default: ASSERT_NOT_REACHED(); return false; } - } else if (m_classType == ValueListClass && other.m_classType != ValueListClass) - return toCSSValueList(this)->equals(other); - else if (m_classType != ValueListClass && other.m_classType == ValueListClass) + } else if (is<CSSValueList>(*this) && !is<CSSValueList>(other)) + return downcast<CSSValueList>(*this).equals(other); + else if (!is<CSSValueList>(*this) && is<CSSValueList>(other)) return static_cast<const CSSValueList&>(other).equals(*this); return false; } String CSSValue::cssText() const { - if (m_isTextClone) { - ASSERT(isCSSOMSafe()); - return static_cast<const TextCloneCSSValue*>(this)->cssText(); - } - ASSERT(!isCSSOMSafe() || isSubtypeExposedToCSSOM()); - switch (classType()) { case AspectRatioClass: - return toCSSAspectRatioValue(this)->customCSSText(); + return downcast<CSSAspectRatioValue>(*this).customCSSText(); case BorderImageSliceClass: - return toCSSBorderImageSliceValue(this)->customCSSText(); + return downcast<CSSBorderImageSliceValue>(*this).customCSSText(); case CanvasClass: - return toCSSCanvasValue(this)->customCSSText(); + return downcast<CSSCanvasValue>(*this).customCSSText(); + case NamedImageClass: + return downcast<CSSNamedImageValue>(*this).customCSSText(); case CursorImageClass: - return toCSSCursorImageValue(this)->customCSSText(); -#if ENABLE(CSS_FILTERS) + return downcast<CSSCursorImageValue>(*this).customCSSText(); case FilterImageClass: - return toCSSFilterImageValue(this)->customCSSText(); -#endif + return downcast<CSSFilterImageValue>(*this).customCSSText(); case FontClass: - return toCSSFontValue(this)->customCSSText(); + return downcast<CSSFontValue>(*this).customCSSText(); case FontFaceSrcClass: - return toCSSFontFaceSrcValue(this)->customCSSText(); + return downcast<CSSFontFaceSrcValue>(*this).customCSSText(); case FontFeatureClass: - return toCSSFontFeatureValue(this)->customCSSText(); + return downcast<CSSFontFeatureValue>(*this).customCSSText(); +#if ENABLE(VARIATION_FONTS) + case FontVariationClass: + return downcast<CSSFontVariationValue>(*this).customCSSText(); +#endif case FunctionClass: - return toCSSFunctionValue(this)->customCSSText(); + return downcast<CSSFunctionValue>(*this).customCSSText(); case LinearGradientClass: - return toCSSLinearGradientValue(this)->customCSSText(); + return downcast<CSSLinearGradientValue>(*this).customCSSText(); case RadialGradientClass: - return toCSSRadialGradientValue(this)->customCSSText(); + return downcast<CSSRadialGradientValue>(*this).customCSSText(); case CrossfadeClass: - return toCSSCrossfadeValue(this)->customCSSText(); + return downcast<CSSCrossfadeValue>(*this).customCSSText(); case ImageClass: - return toCSSImageValue(this)->customCSSText(); + return downcast<CSSImageValue>(*this).customCSSText(); case InheritedClass: - return toCSSInheritedValue(this)->customCSSText(); + return downcast<CSSInheritedValue>(*this).customCSSText(); case InitialClass: - return toCSSInitialValue(this)->customCSSText(); - case GridTemplateClass: - return toCSSGridTemplateValue(this)->customCSSText(); + return downcast<CSSInitialValue>(*this).customCSSText(); + case UnsetClass: + return downcast<CSSUnsetValue>(*this).customCSSText(); + case RevertClass: + return downcast<CSSRevertValue>(*this).customCSSText(); + case GridAutoRepeatClass: + return downcast<CSSGridAutoRepeatValue>(*this).customCSSText(); + case GridLineNamesClass: + return downcast<CSSGridLineNamesValue>(*this).customCSSText(); + case GridTemplateAreasClass: + return downcast<CSSGridTemplateAreasValue>(*this).customCSSText(); case PrimitiveClass: - return toCSSPrimitiveValue(this)->customCSSText(); + return downcast<CSSPrimitiveValue>(*this).customCSSText(); case ReflectClass: - return toCSSReflectValue(this)->customCSSText(); + return downcast<CSSReflectValue>(*this).customCSSText(); case ShadowClass: - return toCSSShadowValue(this)->customCSSText(); + return downcast<CSSShadowValue>(*this).customCSSText(); case CubicBezierTimingFunctionClass: - return toCSSCubicBezierTimingFunctionValue(this)->customCSSText(); + return downcast<CSSCubicBezierTimingFunctionValue>(*this).customCSSText(); case StepsTimingFunctionClass: - return toCSSStepsTimingFunctionValue(this)->customCSSText(); + return downcast<CSSStepsTimingFunctionValue>(*this).customCSSText(); + case SpringTimingFunctionClass: + return downcast<CSSSpringTimingFunctionValue>(*this).customCSSText(); case UnicodeRangeClass: - return toCSSUnicodeRangeValue(this)->customCSSText(); + return downcast<CSSUnicodeRangeValue>(*this).customCSSText(); case ValueListClass: - return toCSSValueList(this)->customCSSText(); - case WebKitCSSTransformClass: - return toWebKitCSSTransformValue(this)->customCSSText(); + return downcast<CSSValueList>(*this).customCSSText(); case LineBoxContainClass: - return toCSSLineBoxContainValue(this)->customCSSText(); + return downcast<CSSLineBoxContainValue>(*this).customCSSText(); case CalculationClass: - return toCSSCalcValue(this)->customCSSText(); -#if ENABLE(CSS_IMAGE_SET) + return downcast<CSSCalcValue>(*this).customCSSText(); case ImageSetClass: - return toCSSImageSetValue(this)->customCSSText(); -#endif -#if ENABLE(CSS_FILTERS) - case WebKitCSSFilterClass: - return toWebKitCSSFilterValue(this)->customCSSText(); -#endif -#if ENABLE(SVG) - case SVGColorClass: - return toSVGColor(this)->customCSSText(); - case SVGPaintClass: - return toSVGPaint(this)->customCSSText(); + return downcast<CSSImageSetValue>(*this).customCSSText(); +#if ENABLE(CSS_ANIMATIONS_LEVEL_2) + case AnimationTriggerScrollClass: + return downcast<CSSAnimationTriggerScrollValue>(*this).customCSSText(); #endif + case CSSContentDistributionClass: + return downcast<CSSContentDistributionValue>(*this).customCSSText(); + case CustomPropertyClass: + return downcast<CSSCustomPropertyValue>(*this).customCSSText(); + case CustomIdentClass: + return downcast<CSSCustomIdentValue>(*this).customCSSText(); + case VariableReferenceClass: + return downcast<CSSVariableReferenceValue>(*this).customCSSText(); + case PendingSubstitutionValueClass: + return downcast<CSSPendingSubstitutionValue>(*this).customCSSText(); } + ASSERT_NOT_REACHED(); return String(); } void CSSValue::destroy() { - if (m_isTextClone) { - ASSERT(isCSSOMSafe()); - delete static_cast<TextCloneCSSValue*>(this); - return; - } - ASSERT(!isCSSOMSafe() || isSubtypeExposedToCSSOM()); - switch (classType()) { case AspectRatioClass: - delete toCSSAspectRatioValue(this); + delete downcast<CSSAspectRatioValue>(this); return; case BorderImageSliceClass: - delete toCSSBorderImageSliceValue(this); + delete downcast<CSSBorderImageSliceValue>(this); return; case CanvasClass: - delete toCSSCanvasValue(this); + delete downcast<CSSCanvasValue>(this); + return; + case NamedImageClass: + delete downcast<CSSNamedImageValue>(this); return; case CursorImageClass: - delete toCSSCursorImageValue(this); + delete downcast<CSSCursorImageValue>(this); return; case FontClass: - delete toCSSFontValue(this); + delete downcast<CSSFontValue>(this); return; case FontFaceSrcClass: - delete toCSSFontFaceSrcValue(this); + delete downcast<CSSFontFaceSrcValue>(this); return; case FontFeatureClass: - delete toCSSFontFeatureValue(this); + delete downcast<CSSFontFeatureValue>(this); + return; +#if ENABLE(VARIATION_FONTS) + case FontVariationClass: + delete downcast<CSSFontVariationValue>(this); return; +#endif case FunctionClass: - delete toCSSFunctionValue(this); + delete downcast<CSSFunctionValue>(this); return; case LinearGradientClass: - delete toCSSLinearGradientValue(this); + delete downcast<CSSLinearGradientValue>(this); return; case RadialGradientClass: - delete toCSSRadialGradientValue(this); + delete downcast<CSSRadialGradientValue>(this); return; case CrossfadeClass: - delete toCSSCrossfadeValue(this); + delete downcast<CSSCrossfadeValue>(this); return; case ImageClass: - delete toCSSImageValue(this); + delete downcast<CSSImageValue>(this); return; case InheritedClass: - delete toCSSInheritedValue(this); + delete downcast<CSSInheritedValue>(this); return; case InitialClass: - delete toCSSInitialValue(this); + delete downcast<CSSInitialValue>(this); + return; + case UnsetClass: + delete downcast<CSSUnsetValue>(this); return; - case GridTemplateClass: - delete toCSSGridTemplateValue(this); + case RevertClass: + delete downcast<CSSRevertValue>(this); + return; + case GridAutoRepeatClass: + delete downcast<CSSGridAutoRepeatValue>(this); + return; + case GridLineNamesClass: + delete downcast<CSSGridLineNamesValue>(this); + return; + case GridTemplateAreasClass: + delete downcast<CSSGridTemplateAreasValue>(this); return; case PrimitiveClass: - delete toCSSPrimitiveValue(this); + delete downcast<CSSPrimitiveValue>(this); return; case ReflectClass: - delete toCSSReflectValue(this); + delete downcast<CSSReflectValue>(this); return; case ShadowClass: - delete toCSSShadowValue(this); + delete downcast<CSSShadowValue>(this); return; case CubicBezierTimingFunctionClass: - delete toCSSCubicBezierTimingFunctionValue(this); + delete downcast<CSSCubicBezierTimingFunctionValue>(this); return; case StepsTimingFunctionClass: - delete toCSSStepsTimingFunctionValue(this); + delete downcast<CSSStepsTimingFunctionValue>(this); + return; + case SpringTimingFunctionClass: + delete downcast<CSSSpringTimingFunctionValue>(this); return; case UnicodeRangeClass: - delete toCSSUnicodeRangeValue(this); + delete downcast<CSSUnicodeRangeValue>(this); return; case ValueListClass: - delete toCSSValueList(this); - return; - case WebKitCSSTransformClass: - delete toWebKitCSSTransformValue(this); + delete downcast<CSSValueList>(this); return; case LineBoxContainClass: - delete toCSSLineBoxContainValue(this); + delete downcast<CSSLineBoxContainValue>(this); return; case CalculationClass: - delete toCSSCalcValue(this); + delete downcast<CSSCalcValue>(this); return; -#if ENABLE(CSS_IMAGE_SET) case ImageSetClass: - delete toCSSImageSetValue(this); + delete downcast<CSSImageSetValue>(this); return; -#endif -#if ENABLE(CSS_FILTERS) case FilterImageClass: - delete toCSSFilterImageValue(this); + delete downcast<CSSFilterImageValue>(this); return; - case WebKitCSSFilterClass: - delete toWebKitCSSFilterValue(this); +#if ENABLE(CSS_ANIMATIONS_LEVEL_2) + case AnimationTriggerScrollClass: + delete downcast<CSSAnimationTriggerScrollValue>(this); return; #endif -#if ENABLE(SVG) - case SVGColorClass: - delete toSVGColor(this); + case CSSContentDistributionClass: + delete downcast<CSSContentDistributionValue>(this); return; - case SVGPaintClass: - delete toSVGPaint(this); + case CustomPropertyClass: + delete downcast<CSSCustomPropertyValue>(this); + return; + case CustomIdentClass: + delete downcast<CSSCustomIdentValue>(this); + return; + case VariableReferenceClass: + delete downcast<CSSVariableReferenceValue>(this); + return; + case PendingSubstitutionValueClass: + delete downcast<CSSPendingSubstitutionValue>(this); return; -#endif } ASSERT_NOT_REACHED(); } -PassRefPtr<CSSValue> CSSValue::cloneForCSSOM() const +Ref<DeprecatedCSSOMValue> CSSValue::createDeprecatedCSSOMWrapper() const { - switch (classType()) { - case PrimitiveClass: - return toCSSPrimitiveValue(this)->cloneForCSSOM(); - case ValueListClass: - return toCSSValueList(this)->cloneForCSSOM(); - case ImageClass: - case CursorImageClass: - return toCSSImageValue(this)->cloneForCSSOM(); -#if ENABLE(CSS_FILTERS) - case WebKitCSSFilterClass: - return toWebKitCSSFilterValue(this)->cloneForCSSOM(); -#endif - case WebKitCSSTransformClass: - return toWebKitCSSTransformValue(this)->cloneForCSSOM(); -#if ENABLE(CSS_IMAGE_SET) - case ImageSetClass: - return toCSSImageSetValue(this)->cloneForCSSOM(); -#endif -#if ENABLE(SVG) - case SVGColorClass: - return toSVGColor(this)->cloneForCSSOM(); - case SVGPaintClass: - return toSVGPaint(this)->cloneForCSSOM(); -#endif - default: - ASSERT(!isSubtypeExposedToCSSOM()); - return TextCloneCSSValue::create(classType(), cssText()); - } + if (isImageValue() || isCursorImageValue()) + return downcast<CSSImageValue>(this)->createDeprecatedCSSOMWrapper(); + if (isPrimitiveValue()) + return DeprecatedCSSOMPrimitiveValue::create(downcast<CSSPrimitiveValue>(*this)); + if (isValueList()) + return DeprecatedCSSOMValueList::create(downcast<CSSValueList>(*this)); + return DeprecatedCSSOMComplexValue::create(*this); +} + +bool CSSValue::treatAsInheritedValue(CSSPropertyID propertyID) const +{ + return classType() == InheritedClass || (classType() == UnsetClass && CSSProperty::isInheritedProperty(propertyID)); +} + +bool CSSValue::treatAsInitialValue(CSSPropertyID propertyID) const +{ + return classType() == InitialClass || (classType() == UnsetClass && !CSSProperty::isInheritedProperty(propertyID)); } } |