diff options
Diffstat (limited to 'Source/WebCore/css/PropertySetCSSStyleDeclaration.h')
-rw-r--r-- | Source/WebCore/css/PropertySetCSSStyleDeclaration.h | 50 |
1 files changed, 30 insertions, 20 deletions
diff --git a/Source/WebCore/css/PropertySetCSSStyleDeclaration.h b/Source/WebCore/css/PropertySetCSSStyleDeclaration.h index 0edb98cf4..2b8f41295 100644 --- a/Source/WebCore/css/PropertySetCSSStyleDeclaration.h +++ b/Source/WebCore/css/PropertySetCSSStyleDeclaration.h @@ -32,9 +32,9 @@ namespace WebCore { class CSSRule; class CSSProperty; -class CSSStyleSheet; class CSSValue; class StylePropertySet; +class StyleSheetInternal; class StyledElement; class PropertySetCSSStyleDeclaration : public CSSStyleDeclaration { @@ -42,14 +42,13 @@ public: PropertySetCSSStyleDeclaration(StylePropertySet* propertySet) : m_propertySet(propertySet) { } virtual StyledElement* parentElement() const { return 0; } - virtual void clearParentRule() { ASSERT_NOT_REACHED(); } virtual void clearParentElement() { ASSERT_NOT_REACHED(); } - virtual CSSStyleSheet* contextStyleSheet() const { return 0; } + StyleSheetInternal* contextStyleSheet() const; -private: virtual void ref() OVERRIDE; virtual void deref() OVERRIDE; - + +private: virtual CSSRule* parentRule() const OVERRIDE { return 0; }; virtual unsigned length() const OVERRIDE; virtual String item(unsigned index) const OVERRIDE; @@ -67,30 +66,41 @@ private: virtual void setPropertyInternal(CSSPropertyID, const String& value, bool important, ExceptionCode&) OVERRIDE; virtual bool cssPropertyMatches(const CSSProperty*) const OVERRIDE; - virtual CSSStyleSheet* parentStyleSheet() const OVERRIDE; virtual PassRefPtr<StylePropertySet> copy() const OVERRIDE; virtual PassRefPtr<StylePropertySet> makeMutable() OVERRIDE; - virtual void setNeedsStyleRecalc() { } + virtual void setNeedsStyleRecalc() { } + + void didMutate(); + CSSValue* cloneAndCacheForCSSOM(CSSValue*); protected: StylePropertySet* m_propertySet; + OwnPtr<HashMap<CSSValue*, RefPtr<CSSValue> > > m_cssomCSSValueClones; }; -class RuleCSSStyleDeclaration : public PropertySetCSSStyleDeclaration +class StyleRuleCSSStyleDeclaration : public PropertySetCSSStyleDeclaration { public: - RuleCSSStyleDeclaration(StylePropertySet* propertySet, CSSRule* parentRule) - : PropertySetCSSStyleDeclaration(propertySet) - , m_parentRule(parentRule) + static PassRefPtr<StyleRuleCSSStyleDeclaration> create(StylePropertySet* propertySet, CSSRule* parentRule) { + return adoptRef(new StyleRuleCSSStyleDeclaration(propertySet, parentRule)); } + + void clearParentRule() { m_parentRule = 0; } -private: - virtual CSSRule* parentRule() const { return m_parentRule; }; - virtual void clearParentRule() { m_parentRule = 0; } - virtual void setNeedsStyleRecalc(); - virtual CSSStyleSheet* contextStyleSheet() const; + virtual void ref() OVERRIDE; + virtual void deref() OVERRIDE; + +private: + StyleRuleCSSStyleDeclaration(StylePropertySet*, CSSRule*); + virtual ~StyleRuleCSSStyleDeclaration(); + + virtual CSSStyleSheet* parentStyleSheet() const OVERRIDE; + + virtual CSSRule* parentRule() const OVERRIDE { return m_parentRule; } + virtual void setNeedsStyleRecalc() OVERRIDE; + unsigned m_refCount; CSSRule* m_parentRule; }; @@ -104,10 +114,10 @@ public: } private: - virtual StyledElement* parentElement() const { return m_parentElement; } - virtual void clearParentElement() { m_parentElement = 0; } - virtual void setNeedsStyleRecalc(); - virtual CSSStyleSheet* contextStyleSheet() const; + virtual CSSStyleSheet* parentStyleSheet() const OVERRIDE; + virtual StyledElement* parentElement() const OVERRIDE { return m_parentElement; } + virtual void clearParentElement() OVERRIDE { m_parentElement = 0; } + virtual void setNeedsStyleRecalc() OVERRIDE; StyledElement* m_parentElement; }; |