Index: third_party/WebKit/Source/core/dom/DOMTokenList.h |
diff --git a/third_party/WebKit/Source/core/dom/DOMTokenList.h b/third_party/WebKit/Source/core/dom/DOMTokenList.h |
index 80bcfbf155293a682140bfaff2db2fb88dd90e8c..f0d36611b555dce17dedd76493f32a47a770ec55 100644 |
--- a/third_party/WebKit/Source/core/dom/DOMTokenList.h |
+++ b/third_party/WebKit/Source/core/dom/DOMTokenList.h |
@@ -27,6 +27,7 @@ |
#include "bindings/core/v8/Iterable.h" |
#include "bindings/core/v8/ScriptWrappable.h" |
+#include "core/dom/SpaceSplitString.h" |
#include "platform/heap/Handle.h" |
#include "wtf/Vector.h" |
#include "wtf/text/AtomicString.h" |
@@ -36,21 +37,30 @@ namespace blink { |
class Element; |
class ExceptionState; |
-class CORE_EXPORT DOMTokenList : public NoBaseWillBeGarbageCollectedFinalized<DOMTokenList>, public ScriptWrappable, public ValueIterable<String> { |
+class CORE_EXPORT DOMTokenListObserver : public WillBeGarbageCollectedMixin { |
+public: |
+ // Called when the value property is set, even if the tokens in |
+ // the set have not changed. |
+ virtual void valueWasSet() = 0; |
+ |
+ DEFINE_INLINE_VIRTUAL_TRACE() { } |
+}; |
+ |
+class CORE_EXPORT DOMTokenList : public RefCountedWillBeGarbageCollectedFinalized<DOMTokenList>, |
+ public ScriptWrappable, public ValueIterable<String> { |
DEFINE_WRAPPERTYPEINFO(); |
USING_FAST_MALLOC_WILL_BE_REMOVED(DOMTokenList); |
WTF_MAKE_NONCOPYABLE(DOMTokenList); |
public: |
- DOMTokenList() { } |
- virtual ~DOMTokenList() { } |
+ static PassRefPtrWillBeRawPtr<DOMTokenList> create(DOMTokenListObserver* observer = nullptr) |
+ { |
+ return adoptRefWillBeNoop(new DOMTokenList(observer)); |
+ } |
-#if !ENABLE(OILPAN) |
- virtual void ref() = 0; |
- virtual void deref() = 0; |
-#endif |
+ virtual ~DOMTokenList() { } |
- virtual unsigned length() const = 0; |
- virtual const AtomicString item(unsigned index) const = 0; |
+ virtual unsigned length() const { return m_tokens.size(); } |
+ virtual const AtomicString item(unsigned index) const; |
bool contains(const AtomicString&, ExceptionState&) const; |
virtual void add(const Vector<String>&, ExceptionState&); |
@@ -61,19 +71,28 @@ public: |
bool toggle(const AtomicString&, bool force, ExceptionState&); |
bool supports(const AtomicString&, ExceptionState&); |
+ virtual const AtomicString& value() const { return m_value; } |
+ virtual void setValue(const AtomicString&); |
+ |
+ const SpaceSplitString& tokens() const { return m_tokens; } |
+ void setObserver(DOMTokenListObserver* observer) { m_observer = observer; } |
+ |
const AtomicString& toString() const { return value(); } |
virtual Element* element() { return 0; } |
- DEFINE_INLINE_VIRTUAL_TRACE() { } |
+ DEFINE_INLINE_VIRTUAL_TRACE() { |
+ visitor->trace(m_observer); |
+ } |
protected: |
- |
- virtual const AtomicString& value() const = 0; |
- virtual void setValue(const AtomicString&) = 0; |
+ DOMTokenList(DOMTokenListObserver* observer) |
+ : m_observer(observer) |
+ { |
+ } |
virtual void addInternal(const AtomicString&); |
- virtual bool containsInternal(const AtomicString&) const = 0; |
+ virtual bool containsInternal(const AtomicString&) const; |
virtual void removeInternal(const AtomicString&); |
bool validateToken(const String&, ExceptionState&) const; |
@@ -86,6 +105,9 @@ protected: |
private: |
IterationSource* startIteration(ScriptState*, ExceptionState&) override; |
+ SpaceSplitString m_tokens; |
+ AtomicString m_value; |
+ RawPtrWillBeWeakMember<DOMTokenListObserver> m_observer; |
}; |
} // namespace blink |