summaryrefslogtreecommitdiff
path: root/Source/WebCore/css/CSSValue.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-05-07 11:21:11 +0200
committerSimon Hausmann <simon.hausmann@nokia.com>2012-05-07 11:21:11 +0200
commit2cf6c8816a73e0132bd8fa3b509d62d7c51b6e47 (patch)
tree988e8c5b116dd0466244ae2fe5af8ee9be926d76 /Source/WebCore/css/CSSValue.cpp
parentdd91e772430dc294e3bf478c119ef8d43c0a3358 (diff)
downloadqtwebkit-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.cpp85
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());
+ }
+}
+
}