Index: Source/core/css/StylePropertySet.h |
diff --git a/Source/core/css/StylePropertySet.h b/Source/core/css/StylePropertySet.h |
index 7d8be4f50ad4ae1c20962a8e897feb0fb3521343..9389611f8761b2734ddf03810711575d53e330e4 100644 |
--- a/Source/core/css/StylePropertySet.h |
+++ b/Source/core/css/StylePropertySet.h |
@@ -25,6 +25,7 @@ |
#include "core/css/CSSParserMode.h" |
#include "core/css/CSSPrimitiveValue.h" |
#include "core/css/CSSProperty.h" |
+#include "core/css/CSSVariablesIterator.h" |
#include "core/css/PropertySetCSSStyleDeclaration.h" |
#include "wtf/ListHashSet.h" |
#include "wtf/Vector.h" |
@@ -171,6 +172,7 @@ inline const StylePropertyMetadata* ImmutableStylePropertySet::metadataArray() c |
class MutableStylePropertySet : public StylePropertySet { |
public: |
+ ~MutableStylePropertySet(); |
static PassRefPtr<MutableStylePropertySet> create(CSSParserMode = CSSQuirksMode); |
static PassRefPtr<MutableStylePropertySet> create(const CSSProperty* properties, unsigned count); |
@@ -201,6 +203,8 @@ public: |
bool removeVariable(const AtomicString& name); |
bool clearVariables(); |
+ PassRefPtr<CSSVariablesIterator> variablesIterator() { return VariablesIterator::create(this); } |
+ |
void mergeAndOverrideOnConflict(const StylePropertySet*); |
void clear(); |
@@ -212,6 +216,31 @@ public: |
Vector<CSSProperty, 4> m_propertyVector; |
private: |
+ class VariablesIterator : public CSSVariablesIterator { |
+ public: |
+ virtual ~VariablesIterator(); |
+ static PassRefPtr<VariablesIterator> create(MutableStylePropertySet*); |
+ void addedVariable(const AtomicString& name); |
+ void removedVariable(const AtomicString& name); |
+ void clearedVariables(); |
+ private: |
+ explicit VariablesIterator(MutableStylePropertySet* propertySet) : m_propertySet(propertySet) { } |
+ virtual void advance() OVERRIDE; |
+ virtual bool atEnd() const OVERRIDE { return m_remainingNames.isEmpty(); } |
+ virtual AtomicString name() const OVERRIDE { return m_remainingNames.last(); } |
+ virtual String value() const OVERRIDE { return m_propertySet->variableValue(name()); } |
+ |
+ |
+ Vector<AtomicString> m_remainingNames; |
+ Vector<AtomicString> m_newNames; |
+ RefPtr<MutableStylePropertySet> m_propertySet; |
+ }; |
+ |
+ typedef Vector<RefPtr<VariablesIterator> > VariablesIterators; |
+ VariablesIterators* activeVariablesIterators(); |
+ typedef HashMap<MutableStylePropertySet*, VariablesIterators > VariablesIteratorsMap; |
+ static VariablesIteratorsMap* activeVariablesIteratorsMap(); |
+ |
explicit MutableStylePropertySet(CSSParserMode); |
explicit MutableStylePropertySet(const StylePropertySet&); |
MutableStylePropertySet(const CSSProperty* properties, unsigned count); |