Chromium Code Reviews| 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..3c91b3f85d94e73e4e2503057ba8c2becd27195f 100644 | 
| --- a/third_party/WebKit/Source/core/fetch/ResourceClientOrObserverWalker.h | 
| +++ b/third_party/WebKit/Source/core/fetch/ResourceClientWalker.h | 
| @@ -22,56 +22,47 @@ | 
| 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 { | 
| 
 
haraken
2016/08/12 10:45:20
I'd prefer removing this class in a follow-up CL i
 
yhirano
2016/08/16 08:57:24
Please see https://codereview.chromium.org/2191633
 
 | 
| 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; | 
| + m_clientVector.reserveCapacity(set.size()); | 
| + for (const auto& keyvalue : set) | 
| + m_clientVector.append(keyvalue.key); | 
| } | 
| 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 |