2008-12-07 Antti Koivisto <antti@apple.com>
authorantti@apple.com <antti@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 8 Dec 2008 01:27:48 +0000 (01:27 +0000)
committerantti@apple.com <antti@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 8 Dec 2008 01:27:48 +0000 (01:27 +0000)
        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22717
        Make CSS values use less memory

        Get CSSValues off from the common StyleBase base class. They don't
        need a parent pointer or anything else there and there is no real
        reason to have them in same data structures with other CSSOM objects.

        Disabled (instead of refactoring around the lack of common base) the ability
        to have style declaration blocks as CSS variable values. They don't exist in
        the spec so I wasn't sure if they have future or not. It would not be hard to
        get them back. CSS variables are in any case an experimental feature and
        not enabled by default.

        * css/CSSInitialValue.h:
        (WebCore::CSSInitialValue::createExplicit):
        (WebCore::CSSInitialValue::createImplicit):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::addVariableDeclarationBlock):
        * css/CSSParser.h:
        * css/CSSValue.h:
        (WebCore::CSSValue::~CSSValue):
        (WebCore::CSSValue::parserValue):
        * css/CSSVariablesDeclaration.cpp:
        (WebCore::CSSVariablesDeclaration::CSSVariablesDeclaration):
        (WebCore::CSSVariablesDeclaration::getVariableValue):
        (WebCore::CSSVariablesDeclaration::removeVariable):
        (WebCore::CSSVariablesDeclaration::addParsedVariable):
        (WebCore::CSSVariablesDeclaration::getParsedVariable):
        (WebCore::CSSVariablesDeclaration::getParsedVariableDeclarationBlock):
        * css/CSSVariablesDeclaration.h:
        (WebCore::CSSVariablesDeclaration::create):
        * css/StyleBase.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@39086 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/css/CSSInitialValue.h
WebCore/css/CSSParser.cpp
WebCore/css/CSSParser.h
WebCore/css/CSSValue.h
WebCore/css/CSSVariablesDeclaration.cpp
WebCore/css/CSSVariablesDeclaration.h
WebCore/css/StyleBase.h

index 35d9813..bb38152 100644 (file)
@@ -1,3 +1,40 @@
+2008-12-07  Antti Koivisto  <antti@apple.com>
+
+        Reviewed by Darin Adler.
+
+        https://bugs.webkit.org/show_bug.cgi?id=22717
+        Make CSS values use less memory
+
+        Get CSSValues off from the common StyleBase base class. They don't
+        need a parent pointer or anything else there and there is no real
+        reason to have them in same data structures with other CSSOM objects.
+        
+        Disabled (instead of refactoring around the lack of common base) the ability 
+        to have style declaration blocks as CSS variable values. They don't exist in 
+        the spec so I wasn't sure if they have future or not. It would not be hard to 
+        get them back. CSS variables are in any case an experimental feature and 
+        not enabled by default.
+
+        * css/CSSInitialValue.h:
+        (WebCore::CSSInitialValue::createExplicit):
+        (WebCore::CSSInitialValue::createImplicit):
+        * css/CSSParser.cpp:
+        (WebCore::CSSParser::addVariableDeclarationBlock):
+        * css/CSSParser.h:
+        * css/CSSValue.h:
+        (WebCore::CSSValue::~CSSValue):
+        (WebCore::CSSValue::parserValue):
+        * css/CSSVariablesDeclaration.cpp:
+        (WebCore::CSSVariablesDeclaration::CSSVariablesDeclaration):
+        (WebCore::CSSVariablesDeclaration::getVariableValue):
+        (WebCore::CSSVariablesDeclaration::removeVariable):
+        (WebCore::CSSVariablesDeclaration::addParsedVariable):
+        (WebCore::CSSVariablesDeclaration::getParsedVariable):
+        (WebCore::CSSVariablesDeclaration::getParsedVariableDeclarationBlock):
+        * css/CSSVariablesDeclaration.h:
+        (WebCore::CSSVariablesDeclaration::create):
+        * css/StyleBase.h:
+
 2008-12-07  Dirk Schulze  <krit@webkit.org>
 
         Reviewed by Oliver Hunt.
index c099a3c..96bc2a5 100644 (file)
@@ -30,11 +30,13 @@ class CSSInitialValue : public CSSValue {
 public:
     static PassRefPtr<CSSInitialValue> createExplicit()
     {
-        return adoptRef(new CSSInitialValue(false));
+        static CSSInitialValue* explicitValue = new CSSInitialValue(false);
+        return explicitValue;
     }
     static PassRefPtr<CSSInitialValue> createImplicit()
     {
-        return adoptRef(new CSSInitialValue(true));
+        static CSSInitialValue* explicitValue = new CSSInitialValue(true);
+        return explicitValue;
     }
 
     virtual String cssText() const;
index 164c9f1..48d2233 100644 (file)
@@ -4598,7 +4598,8 @@ bool CSSParser::addVariable(const CSSParserString& name, CSSParserValueList* val
 
 bool CSSParser::addVariableDeclarationBlock(const CSSParserString& name)
 {
-#if ENABLE(CSS_VARIABLES)
+// FIXME: Disabling declarations as variable values for now since they no longer have a common base class with CSSValues.
+#if ENABLE(CSS_VARIABLES) && 0
     m_variableNames.append(String(name));
     m_variableValues.append(CSSMutableStyleDeclaration::create(0, m_parsedProperties, m_numParsedProperties));
     clearProperties();
index 63bbff0..83aafa4 100644 (file)
@@ -210,7 +210,7 @@ namespace WebCore {
         bool m_hasFontFaceOnlyValues;
 
         Vector<String> m_variableNames;
-        Vector<RefPtr<StyleBase> > m_variableValues;
+        Vector<RefPtr<CSSValue> > m_variableValues;
 
         AtomicString m_defaultNamespace;
 
index 4fadfab..a774eb2 100644 (file)
@@ -30,7 +30,7 @@ namespace WebCore {
 
 typedef int ExceptionCode;
 
-class CSSValue : public StyleBase {
+class CSSValue : public RefCounted<CSSValue> {
 public:
     // FIXME: Change name to Type.
     enum UnitTypes {
@@ -41,6 +41,8 @@ public:
         CSS_INITIAL = 4
     };
 
+    virtual ~CSSValue() { }
+
     // FIXME: Change this to return UnitTypes.
     virtual unsigned short cssValueType() const { return CSS_CUSTOM; }
 
@@ -63,9 +65,6 @@ public:
 
     virtual bool isVariableDependentValue() const { return false; }
     virtual CSSParserValue parserValue() const { ASSERT_NOT_REACHED(); return CSSParserValue(); }
-
-protected:
-    CSSValue() : StyleBase(0) { }
 };
 
 } // namespace WebCore
index bfd5e08..d1a0d78 100644 (file)
@@ -34,7 +34,7 @@
 
 namespace WebCore {
 
-CSSVariablesDeclaration::CSSVariablesDeclaration(StyleBase* parent, const Vector<String>& names, const Vector<RefPtr<StyleBase> >& values)
+CSSVariablesDeclaration::CSSVariablesDeclaration(StyleBase* parent, const Vector<String>& names, const Vector<RefPtr<CSSValue> >& values)
     : StyleBase(parent)
 {
     m_variableNames = names;
@@ -50,7 +50,7 @@ CSSVariablesDeclaration::~CSSVariablesDeclaration()
 
 String CSSVariablesDeclaration::getVariableValue(const String& variableName)
 {
-    StyleBase* val = m_variablesMap.get(variableName).get();
+    CSSValue* val = m_variablesMap.get(variableName).get();
     if (val)
         return val->cssText();
     return "";
@@ -60,7 +60,7 @@ String CSSVariablesDeclaration::removeVariable(const String& variableName, Excep
 {
     // FIXME: The spec has this method taking an exception code but no exceptions are
     // specified as being thrown.
-    RefPtr<StyleBase> val = m_variablesMap.take(variableName);
+    RefPtr<CSSValue> val = m_variablesMap.take(variableName);
     String result = val ? val->cssText() : "";
     if (val) {
         int s = m_variableNames.size();
@@ -89,13 +89,16 @@ void CSSVariablesDeclaration::setVariable(const String& variableName, const Stri
         setChanged();
 }
 
-void CSSVariablesDeclaration::addParsedVariable(const String& variableName, PassRefPtr<StyleBase> variableValue, bool updateNamesList)
+void CSSVariablesDeclaration::addParsedVariable(const String& variableName, PassRefPtr<CSSValue> variableValue, bool updateNamesList)
 {
+// FIXME: Disabling declarations as variable values for now since they no longer have a common base class with CSSValues.
+#if 0
     variableValue->setParent(this); // Needed to connect variables that are CSSMutableStyleDeclarations, since the parent couldn't be set until now.
+#endif
 
     // Don't leak duplicates.  For multiple variables with the same name, the last one
     // declared will win.
-    StyleBase* current = m_variablesMap.take(variableName).get();
+    CSSValue* current = m_variablesMap.take(variableName).get();
     if (!current && updateNamesList)
         m_variableNames.append(variableName);
     m_variablesMap.set(variableName, variableValue);
@@ -105,7 +108,7 @@ void CSSVariablesDeclaration::addParsedVariable(const String& variableName, Pass
 
 CSSValueList* CSSVariablesDeclaration::getParsedVariable(const String& variableName)
 {
-    StyleBase* result = m_variablesMap.get(variableName).get();
+    CSSValue* result = m_variablesMap.get(variableName).get();
     if (result->isValueList())
         return static_cast<CSSValueList*>(result);
     return 0;
@@ -113,9 +116,13 @@ CSSValueList* CSSVariablesDeclaration::getParsedVariable(const String& variableN
 
 CSSMutableStyleDeclaration* CSSVariablesDeclaration::getParsedVariableDeclarationBlock(const String& variableName)
 {
+// FIXME: Disabling declarations as variable values for now since they no longer have a common base class with CSSValues.
+#if 0
     StyleBase* result = m_variablesMap.get(variableName).get();
+
     if (result->isMutableStyleDeclaration())
         return static_cast<CSSMutableStyleDeclaration*>(result);
+#endif
     return 0;
 }
 
index 5357bf0..aa98158 100644 (file)
@@ -39,11 +39,12 @@ typedef int ExceptionCode;
 
 class CSSMutableStyleDeclaration;
 class CSSRule;
+class CSSValue;
 class CSSValueList;
 
 class CSSVariablesDeclaration : public StyleBase {
 public:
-    static PassRefPtr<CSSVariablesDeclaration> create(StyleBase* owningRule, const Vector<String>& names, const Vector<RefPtr<StyleBase> >& values)
+    static PassRefPtr<CSSVariablesDeclaration> create(StyleBase* owningRule, const Vector<String>& names, const Vector<RefPtr<CSSValue> >& values)
     {
         return adoptRef(new CSSVariablesDeclaration(owningRule, names, values));
     }
@@ -61,19 +62,19 @@ public:
     String cssText() const;
     void setCssText(const String&); // FIXME: The spec contradicts itself regarding whether or not cssText is settable.
 
-    void addParsedVariable(const String& variableName, PassRefPtr<StyleBase> variableValue, bool updateNamesList = true);
+    void addParsedVariable(const String& variableName, PassRefPtr<CSSValue> variableValue, bool updateNamesList = true);
     
     CSSValueList* getParsedVariable(const String& variableName);
     CSSMutableStyleDeclaration* getParsedVariableDeclarationBlock(const String& variableName);
 
 private:
-    CSSVariablesDeclaration(StyleBase* owningRule, const Vector<String>& names, const Vector<RefPtr<StyleBase> >& values);
+    CSSVariablesDeclaration(StyleBase* owningRule, const Vector<String>& names, const Vector<RefPtr<CSSValue> >& values);
 
     void setChanged();
 
 protected:
     Vector<String> m_variableNames;
-    HashMap<String, RefPtr<StyleBase> > m_variablesMap;
+    HashMap<String, RefPtr<CSSValue> > m_variablesMap;
 };
 
 } // namespace WebCore
index fe0c86d..a2f1002 100644 (file)
@@ -60,7 +60,6 @@ namespace WebCore {
         virtual bool isStyleSheet() const { return false; }
         virtual bool isXSLStyleSheet() const { return false; }
 
-        virtual bool isValueList() const { return false; }
         virtual bool isMutableStyleDeclaration() const { return false; }
 
         virtual String cssText() const;