Index: Source/core/html/HTMLCollection.h |
diff --git a/Source/core/html/HTMLCollection.h b/Source/core/html/HTMLCollection.h |
index 4f6d52a467a501c0402f0784c8d0a8aa38677569..6fd0eaf751a471445ceedbd193146ebfe9b0b6c4 100644 |
--- a/Source/core/html/HTMLCollection.h |
+++ b/Source/core/html/HTMLCollection.h |
@@ -33,14 +33,15 @@ |
namespace WebCore { |
-class HTMLCollection : public ScriptWrappable, public RefCounted<HTMLCollection>, public LiveNodeListBase { |
+class HTMLCollection : public RefCountedWillBeGarbageCollectedFinalized<HTMLCollection>, public ScriptWrappable, public LiveNodeListBase { |
+ WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(HTMLCollection); |
public: |
enum ItemAfterOverrideType { |
OverridesItemAfter, |
DoesNotOverrideItemAfter, |
}; |
- static PassRefPtr<HTMLCollection> create(ContainerNode& base, CollectionType); |
+ static PassRefPtrWillBeRawPtr<HTMLCollection> create(ContainerNode& base, CollectionType); |
virtual ~HTMLCollection(); |
virtual void invalidateCache(Document* oldDocument = 0) const OVERRIDE; |
void invalidateCacheForAttribute(const QualifiedName*) const; |
@@ -53,7 +54,7 @@ public: |
void namedPropertyEnumerator(Vector<String>& names, ExceptionState&); |
// Non-DOM API |
- void namedItems(const AtomicString& name, Vector<RefPtr<Element> >&) const; |
+ void namedItems(const AtomicString& name, WillBeHeapVector<RefPtrWillBeMember<Element> >&) const; |
bool isEmpty() const { return m_collectionIndexCache.isEmpty(*this); } |
bool hasExactlyOneItem() const { return m_collectionIndexCache.hasExactlyOneNode(*this); } |
@@ -64,29 +65,37 @@ public: |
Element* traverseForwardToOffset(unsigned offset, Element& currentElement, unsigned& currentOffset) const; |
Element* traverseBackwardToOffset(unsigned offset, Element& currentElement, unsigned& currentOffset) const; |
+ virtual void trace(Visitor*); |
+ |
protected: |
HTMLCollection(ContainerNode& base, CollectionType, ItemAfterOverrideType); |
- class NamedItemCache { |
+ class NamedItemCache FINAL : public NoBaseWillBeGarbageCollected<NamedItemCache> { |
public: |
- static PassOwnPtr<NamedItemCache> create() |
+ static PassOwnPtrWillBeRawPtr<NamedItemCache> create() |
{ |
- return adoptPtr(new NamedItemCache); |
+ return adoptPtrWillBeNoop(new NamedItemCache); |
} |
- Vector<Element*>* getElementsById(const AtomicString& id) const { return m_idCache.get(id.impl()); } |
- Vector<Element*>* getElementsByName(const AtomicString& name) const { return m_nameCache.get(name.impl()); } |
+ WillBeHeapVector<RawPtrWillBeMember<Element> >* getElementsById(const AtomicString& id) const { return m_idCache.get(id.impl()); } |
+ WillBeHeapVector<RawPtrWillBeMember<Element> >* getElementsByName(const AtomicString& name) const { return m_nameCache.get(name.impl()); } |
void addElementWithId(const AtomicString& id, Element* element) { addElementToMap(m_idCache, id, element); } |
void addElementWithName(const AtomicString& name, Element* element) { addElementToMap(m_nameCache, name, element); } |
+ void trace(Visitor* visitor) |
+ { |
+ visitor->trace(m_idCache); |
+ visitor->trace(m_nameCache); |
+ } |
+ |
private: |
NamedItemCache(); |
- typedef HashMap<StringImpl*, OwnPtr<Vector<Element*> > > StringToElementsMap; |
+ typedef WillBeHeapHashMap<StringImpl*, OwnPtrWillBeMember<WillBeHeapVector<RawPtrWillBeMember<Element> > > > StringToElementsMap; |
static void addElementToMap(StringToElementsMap& map, const AtomicString& key, Element* element) |
{ |
- OwnPtr<Vector<Element*> >& vector = map.add(key.impl(), nullptr).storedValue->value; |
+ OwnPtrWillBeMember<WillBeHeapVector<RawPtrWillBeMember<Element> > >& vector = map.add(key.impl(), nullptr).storedValue->value; |
if (!vector) |
- vector = adoptPtr(new Vector<Element*>); |
+ vector = adoptPtrWillBeNoop(new WillBeHeapVector<RawPtrWillBeMember<Element> >); |
vector->append(element); |
} |
@@ -102,10 +111,10 @@ protected: |
virtual void updateIdNameCache() const; |
bool hasValidIdNameCache() const { return m_namedItemCache; } |
- void setNamedItemCache(PassOwnPtr<NamedItemCache> cache) const |
+ void setNamedItemCache(PassOwnPtrWillBeRawPtr<NamedItemCache> cache) const |
{ |
ASSERT(!m_namedItemCache); |
- document().incrementNodeListWithIdNameCacheCount(); |
+ document().registerNodeListWithIdNameCache(this); |
m_namedItemCache = cache; |
} |
@@ -134,12 +143,12 @@ private: |
void unregisterIdNameCacheFromDocument(Document& document) const |
{ |
ASSERT(hasValidIdNameCache()); |
- document.decrementNodeListWithIdNameCacheCount(); |
+ document.unregisterNodeListWithIdNameCache(this); |
} |
const unsigned m_overridesItemAfter : 1; |
const unsigned m_shouldOnlyIncludeDirectChildren : 1; |
- mutable OwnPtr<NamedItemCache> m_namedItemCache; |
+ mutable OwnPtrWillBeMember<NamedItemCache> m_namedItemCache; |
mutable CollectionIndexCache<HTMLCollection, Element> m_collectionIndexCache; |
}; |