diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-05-07 11:21:11 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-05-07 11:21:11 +0200 |
commit | 2cf6c8816a73e0132bd8fa3b509d62d7c51b6e47 (patch) | |
tree | 988e8c5b116dd0466244ae2fe5af8ee9be926d76 /Source/WebCore/css/CSSValue.cpp | |
parent | dd91e772430dc294e3bf478c119ef8d43c0a3358 (diff) | |
download | qtwebkit-2cf6c8816a73e0132bd8fa3b509d62d7c51b6e47.tar.gz |
Imported WebKit commit 7e538425aa020340619e927792f3d895061fb54b (http://svn.webkit.org/repository/webkit/trunk@116286)
Diffstat (limited to 'Source/WebCore/css/CSSValue.cpp')
-rw-r--r-- | Source/WebCore/css/CSSValue.cpp | 85 |
1 files changed, 77 insertions, 8 deletions
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<SameSizeAsCSSValue> { - 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<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 { @@ -82,8 +99,11 @@ CSSValue::Type CSSValue::cssValueType() const return CSS_CUSTOM; } -void CSSValue::addSubresourceStyleURLs(ListHashSet<KURL>& urls, const CSSStyleSheet* styleSheet) +void CSSValue::addSubresourceStyleURLs(ListHashSet<KURL>& urls, const StyleSheetInternal* styleSheet) { + // This should get called for internal instances only. + ASSERT(!isCSSOMSafe()); + if (isPrimitiveValue()) static_cast<CSSPrimitiveValue*>(this)->addSubresourceStyleURLs(urls, styleSheet); else if (isValueList()) @@ -96,6 +116,12 @@ void CSSValue::addSubresourceStyleURLs(ListHashSet<KURL>& urls, const CSSStyleSh String CSSValue::cssText() const { + if (m_isTextClone) { + ASSERT(isCSSOMSafe()); + return static_cast<const TextCloneCSSValue*>(this)->cssText(); + } + ASSERT(!isCSSOMSafe() || isSubtypeExposedToCSSOM()); + switch (classType()) { case AspectRatioClass: return static_cast<const CSSAspectRatioValue*>(this)->customCssText(); @@ -145,10 +171,12 @@ String CSSValue::cssText() const return static_cast<const WebKitCSSTransformValue*>(this)->customCssText(); case LineBoxContainClass: return static_cast<const CSSLineBoxContainValue*>(this)->customCssText(); - case FlexClass: - return static_cast<const CSSFlexValue*>(this)->customCssText(); case CalculationClass: return static_cast<const CSSCalcValue*>(this)->customCssText(); +#if ENABLE(CSS_IMAGE_SET) + case ImageSetClass: + return static_cast<const CSSImageSetValue*>(this)->customCssText(); +#endif #if ENABLE(CSS_FILTERS) case WebKitCSSFilterClass: return static_cast<const WebKitCSSFilterValue*>(this)->customCssText(); @@ -170,6 +198,13 @@ String CSSValue::cssText() const void CSSValue::destroy() { + if (m_isTextClone) { + ASSERT(isCSSOMSafe()); + delete static_cast<TextCloneCSSValue*>(this); + return; + } + ASSERT(!isCSSOMSafe() || isSubtypeExposedToCSSOM()); + switch (classType()) { case AspectRatioClass: delete static_cast<CSSAspectRatioValue*>(this); @@ -243,12 +278,14 @@ void CSSValue::destroy() case LineBoxContainClass: delete static_cast<CSSLineBoxContainValue*>(this); return; - case FlexClass: - delete static_cast<CSSFlexValue*>(this); - return; case CalculationClass: delete static_cast<CSSCalcValue*>(this); return; +#if ENABLE(CSS_IMAGE_SET) + case ImageSetClass: + delete static_cast<CSSImageSetValue*>(this); + return; +#endif #if ENABLE(CSS_FILTERS) case WebKitCSSFilterClass: delete static_cast<WebKitCSSFilterValue*>(this); @@ -271,4 +308,36 @@ void CSSValue::destroy() ASSERT_NOT_REACHED(); } +PassRefPtr<CSSValue> CSSValue::cloneForCSSOM() const +{ + switch (classType()) { + case PrimitiveClass: + return static_cast<const CSSPrimitiveValue*>(this)->cloneForCSSOM(); + case ValueListClass: + return static_cast<const CSSValueList*>(this)->cloneForCSSOM(); + case ImageClass: + case CursorImageClass: + return static_cast<const CSSImageValue*>(this)->cloneForCSSOM(); +#if ENABLE(CSS_FILTERS) + case WebKitCSSFilterClass: + return static_cast<const WebKitCSSFilterValue*>(this)->cloneForCSSOM(); +#endif + case WebKitCSSTransformClass: + return static_cast<const WebKitCSSTransformValue*>(this)->cloneForCSSOM(); +#if ENABLE(CSS_IMAGE_SET) + case ImageSetClass: + return static_cast<const CSSImageSetValue*>(this)->cloneForCSSOM(); +#endif +#if ENABLE(SVG) + case SVGColorClass: + return static_cast<const SVGColor*>(this)->cloneForCSSOM(); + case SVGPaintClass: + return static_cast<const SVGPaint*>(this)->cloneForCSSOM(); +#endif + default: + ASSERT(!isSubtypeExposedToCSSOM()); + return TextCloneCSSValue::create(classType(), cssText()); + } +} + } |