Index: third_party/WebKit/Source/core/fetch/ResourceClientWalker.h |
diff --git a/third_party/WebKit/Source/core/fetch/ResourceClientOrObserverWalker.h b/third_party/WebKit/Source/core/fetch/ResourceClientWalker.h |
similarity index 58% |
rename from third_party/WebKit/Source/core/fetch/ResourceClientOrObserverWalker.h |
rename to third_party/WebKit/Source/core/fetch/ResourceClientWalker.h |
index 24f55046ea33c88d02641156630106a080d0a197..3737f7d0c487550d369023145f9ed77c44bfb5ad 100644 |
--- a/third_party/WebKit/Source/core/fetch/ResourceClientOrObserverWalker.h |
+++ b/third_party/WebKit/Source/core/fetch/ResourceClientWalker.h |
@@ -22,56 +22,45 @@ |
pages from the web. It has a memory cache for these objects. |
*/ |
-#ifndef ResourceClientOrObserverWalker_h |
-#define ResourceClientOrObserverWalker_h |
+#ifndef ResourceClientWalker_h |
+#define ResourceClientWalker_h |
#include "core/fetch/ResourceClient.h" |
+#include "platform/heap/Handle.h" |
#include "wtf/Allocator.h" |
-#include "wtf/HashCountedSet.h" |
-#include "wtf/Vector.h" |
namespace blink { |
// Call this "walker" instead of iterator so people won't expect Qt or STL-style iterator interface. |
// Just keep calling next() on this. It's safe from deletions of items. |
-// ClientOrObserver is either ResourceClient or ImageResourceObserver, so that |
-// this walker can be used both for ResourceClient and ImageResourceObserver. |
-template<typename ClientOrObserver, typename T> |
-class ResourceClientOrObserverWalker { |
+template <typename T> |
+class ResourceClientWalker { |
STACK_ALLOCATED(); |
public: |
- explicit ResourceClientOrObserverWalker(const HashCountedSet<ClientOrObserver*>& set) |
- : m_clientSet(set), m_clientVector(set.size()), m_index(0) |
+ explicit ResourceClientWalker(const HeapHashCountedSet<WeakMember<ResourceClient>>& set) |
+ : m_clientSet(set) |
{ |
- size_t clientIndex = 0; |
- for (const auto& resourceClient : set) |
- m_clientVector[clientIndex++] = resourceClient.key; |
+ copyToVector(m_clientSet, m_clientVector); |
} |
T* next() |
{ |
size_t size = m_clientVector.size(); |
while (m_index < size) { |
- ClientOrObserver* next = m_clientVector[m_index++]; |
+ ResourceClient* next = m_clientVector[m_index++]; |
+ DCHECK(next); |
if (m_clientSet.contains(next)) { |
- ASSERT(T::isExpectedType(next)); |
+ DCHECK(T::isExpectedType(next)); |
return static_cast<T*>(next); |
} |
} |
- |
- return 0; |
+ return nullptr; |
} |
-private: |
- const HashCountedSet<ClientOrObserver*>& m_clientSet; |
- Vector<ClientOrObserver*> m_clientVector; |
- size_t m_index; |
-}; |
-template<typename T> |
-struct ResourceClientWalker : public ResourceClientOrObserverWalker<ResourceClient, T> { |
-public: |
- explicit ResourceClientWalker(const HashCountedSet<ResourceClient*>& set) |
- : ResourceClientOrObserverWalker<ResourceClient, T>(set) { } |
+private: |
+ const HeapHashCountedSet<WeakMember<ResourceClient>>& m_clientSet; |
+ HeapVector<Member<ResourceClient>> m_clientVector; |
+ size_t m_index = 0; |
}; |
} // namespace blink |