From 2cf6c8816a73e0132bd8fa3b509d62d7c51b6e47 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Mon, 7 May 2012 11:21:11 +0200 Subject: Imported WebKit commit 7e538425aa020340619e927792f3d895061fb54b (http://svn.webkit.org/repository/webkit/trunk@116286) --- Source/WebCore/css/CSSValue.cpp | 85 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 77 insertions(+), 8 deletions(-) (limited to 'Source/WebCore/css/CSSValue.cpp') diff --git a/Source/WebCore/css/CSSValue.cpp b/Source/WebCore/css/CSSValue.cpp index aea4ee4fd..018a26788 100644 --- a/Source/WebCore/css/CSSValue.cpp +++ b/Source/WebCore/css/CSSValue.cpp @@ -33,11 +33,11 @@ #include "CSSCanvasValue.h" #include "CSSCrossfadeValue.h" #include "CSSCursorImageValue.h" -#include "CSSFlexValue.h" #include "CSSFontFaceSrcValue.h" #include "CSSFunctionValue.h" #include "CSSGradientValue.h" #include "CSSImageGeneratorValue.h" +#include "CSSImageSetValue.h" #include "CSSImageValue.h" #include "CSSInheritedValue.h" #include "CSSInitialValue.h" @@ -59,10 +59,27 @@ namespace WebCore { class SameSizeAsCSSValue : public RefCounted { - unsigned char bitfields[2]; + uint32_t bitfields; }; COMPILE_ASSERT(sizeof(CSSValue) == sizeof(SameSizeAsCSSValue), CSS_value_should_stay_small); + +class TextCloneCSSValue : public CSSValue { +public: + static PassRefPtr 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 { @@ -82,8 +99,11 @@ CSSValue::Type CSSValue::cssValueType() const return CSS_CUSTOM; } -void CSSValue::addSubresourceStyleURLs(ListHashSet& urls, const CSSStyleSheet* styleSheet) +void CSSValue::addSubresourceStyleURLs(ListHashSet& urls, const StyleSheetInternal* styleSheet) { + // This should get called for internal instances only. + ASSERT(!isCSSOMSafe()); + if (isPrimitiveValue()) static_cast(this)->addSubresourceStyleURLs(urls, styleSheet); else if (isValueList()) @@ -96,6 +116,12 @@ void CSSValue::addSubresourceStyleURLs(ListHashSet& urls, const CSSStyleSh String CSSValue::cssText() const { + if (m_isTextClone) { + ASSERT(isCSSOMSafe()); + return static_cast(this)->cssText(); + } + ASSERT(!isCSSOMSafe() || isSubtypeExposedToCSSOM()); + switch (classType()) { case AspectRatioClass: return static_cast(this)->customCssText(); @@ -145,10 +171,12 @@ String CSSValue::cssText() const return static_cast(this)->customCssText(); case LineBoxContainClass: return static_cast(this)->customCssText(); - case FlexClass: - return static_cast(this)->customCssText(); case CalculationClass: return static_cast(this)->customCssText(); +#if ENABLE(CSS_IMAGE_SET) + case ImageSetClass: + return static_cast(this)->customCssText(); +#endif #if ENABLE(CSS_FILTERS) case WebKitCSSFilterClass: return static_cast(this)->customCssText(); @@ -170,6 +198,13 @@ String CSSValue::cssText() const void CSSValue::destroy() { + if (m_isTextClone) { + ASSERT(isCSSOMSafe()); + delete static_cast(this); + return; + } + ASSERT(!isCSSOMSafe() || isSubtypeExposedToCSSOM()); + switch (classType()) { case AspectRatioClass: delete static_cast(this); @@ -243,12 +278,14 @@ void CSSValue::destroy() case LineBoxContainClass: delete static_cast(this); return; - case FlexClass: - delete static_cast(this); - return; case CalculationClass: delete static_cast(this); return; +#if ENABLE(CSS_IMAGE_SET) + case ImageSetClass: + delete static_cast(this); + return; +#endif #if ENABLE(CSS_FILTERS) case WebKitCSSFilterClass: delete static_cast(this); @@ -271,4 +308,36 @@ void CSSValue::destroy() ASSERT_NOT_REACHED(); } +PassRefPtr CSSValue::cloneForCSSOM() const +{ + switch (classType()) { + case PrimitiveClass: + return static_cast(this)->cloneForCSSOM(); + case ValueListClass: + return static_cast(this)->cloneForCSSOM(); + case ImageClass: + case CursorImageClass: + return static_cast(this)->cloneForCSSOM(); +#if ENABLE(CSS_FILTERS) + case WebKitCSSFilterClass: + return static_cast(this)->cloneForCSSOM(); +#endif + case WebKitCSSTransformClass: + return static_cast(this)->cloneForCSSOM(); +#if ENABLE(CSS_IMAGE_SET) + case ImageSetClass: + return static_cast(this)->cloneForCSSOM(); +#endif +#if ENABLE(SVG) + case SVGColorClass: + return static_cast(this)->cloneForCSSOM(); + case SVGPaintClass: + return static_cast(this)->cloneForCSSOM(); +#endif + default: + ASSERT(!isSubtypeExposedToCSSOM()); + return TextCloneCSSValue::create(classType(), cssText()); + } +} + } -- cgit v1.2.1