Chromium Code Reviews| Index: third_party/WebKit/Source/core/fetch/ImageResource.cpp | 
| diff --git a/third_party/WebKit/Source/core/fetch/ImageResource.cpp b/third_party/WebKit/Source/core/fetch/ImageResource.cpp | 
| index 6dd509093db71a9d4420a0a9352366f97443c136..2985bbee2200cf524275e1e0b584bd5e8a150ea8 100644 | 
| --- a/third_party/WebKit/Source/core/fetch/ImageResource.cpp | 
| +++ b/third_party/WebKit/Source/core/fetch/ImageResource.cpp | 
| @@ -26,7 +26,6 @@ | 
| #include "core/fetch/ImageResourceObserver.h" | 
| #include "core/fetch/MemoryCache.h" | 
| #include "core/fetch/ResourceClient.h" | 
| -#include "core/fetch/ResourceClientOrObserverWalker.h" | 
| #include "core/fetch/ResourceFetcher.h" | 
| #include "core/fetch/ResourceLoader.h" | 
| #include "core/svg/graphics/SVGImage.h" | 
| @@ -38,12 +37,24 @@ | 
| #include "public/platform/Platform.h" | 
| #include "public/platform/WebCachePolicy.h" | 
| #include "wtf/CurrentTime.h" | 
| +#include "wtf/HashCountedSet.h" | 
| #include "wtf/StdLibExtras.h" | 
| +#include "wtf/Vector.h" | 
| #include <memory> | 
| namespace blink { | 
| -using ImageResourceObserverWalker = ResourceClientOrObserverWalker<ImageResourceObserver, ImageResourceObserver>; | 
| +namespace { | 
| + | 
| +template <typename T> | 
| +Vector<T*> asVector(const HashCountedSet<T*>& set) | 
| 
 
haraken
2016/08/12 10:45:20
I'd move this helper function to HashCountedSet.
 
yhirano
2016/08/16 08:57:24
Done.
 
 | 
| +{ | 
| + Vector<T*> vector; | 
| + copyToVector(set, vector); | 
| + return vector; | 
| +} | 
| + | 
| +} // namespace | 
| ImageResource* ImageResource::fetch(FetchRequest& request, ResourceFetcher* fetcher) | 
| { | 
| @@ -97,9 +108,9 @@ void ImageResource::checkNotify() | 
| if (isLoading()) | 
| return; | 
| - ImageResourceObserverWalker walker(m_observers); | 
| - while (auto* observer = walker.next()) { | 
| - observer->imageNotifyFinished(this); | 
| + for (auto* observer : asVector(m_observers)) { | 
| + if (m_observers.contains(observer)) | 
| + observer->imageNotifyFinished(this); | 
| } | 
| Resource::checkNotify(); | 
| @@ -180,14 +191,13 @@ ResourcePriority ImageResource::priorityFromObservers() | 
| { | 
| ResourcePriority priority; | 
| - ImageResourceObserverWalker finishedWalker(m_finishedObservers); | 
| - while (const auto* observer = finishedWalker.next()) { | 
| - priorityFromObserver(observer, priority); | 
| + for (auto* observer : asVector(m_finishedObservers)) { | 
| + if (m_finishedObservers.contains(observer)) | 
| + priorityFromObserver(observer, priority); | 
| } | 
| - | 
| - ImageResourceObserverWalker walker(m_observers); | 
| - while (const auto* observer = walker.next()) { | 
| - priorityFromObserver(observer, priority); | 
| + for (auto* observer : asVector(m_observers)) { | 
| + if (m_observers.contains(observer)) | 
| + priorityFromObserver(observer, priority); | 
| } | 
| return priority; | 
| @@ -334,14 +344,13 @@ LayoutSize ImageResource::imageSize(RespectImageOrientationEnum shouldRespectIma | 
| void ImageResource::notifyObservers(const IntRect* changeRect) | 
| { | 
| - ImageResourceObserverWalker finishedWalker(m_finishedObservers); | 
| - while (auto* observer = finishedWalker.next()) { | 
| - observer->imageChanged(this, changeRect); | 
| + for (auto* observer : asVector(m_finishedObservers)) { | 
| + if (m_finishedObservers.contains(observer)) | 
| + observer->imageChanged(this, changeRect); | 
| } | 
| - | 
| - ImageResourceObserverWalker walker(m_observers); | 
| - while (auto* observer = walker.next()) { | 
| - observer->imageChanged(this, changeRect); | 
| + for (auto* observer : asVector(m_observers)) { | 
| + if (m_observers.contains(observer)) | 
| + observer->imageChanged(this, changeRect); | 
| } | 
| } | 
| @@ -489,15 +498,13 @@ bool ImageResource::shouldPauseAnimation(const blink::Image* image) | 
| if (!image || image != m_image) | 
| return false; | 
| - ImageResourceObserverWalker finishedWalker(m_finishedObservers); | 
| - while (auto* observer = finishedWalker.next()) { | 
| - if (observer->willRenderImage()) | 
| + for (auto* observer : asVector(m_finishedObservers)) { | 
| + if (m_finishedObservers.contains(observer) && observer->willRenderImage()) | 
| return false; | 
| } | 
| - ImageResourceObserverWalker walker(m_observers); | 
| - while (auto* observer = walker.next()) { | 
| - if (observer->willRenderImage()) | 
| + for (auto* observer : asVector(m_observers)) { | 
| + if (m_observers.contains(observer) && observer->willRenderImage()) | 
| return false; | 
| } | 
| @@ -517,16 +524,12 @@ void ImageResource::updateImageAnimationPolicy() | 
| return; | 
| ImageAnimationPolicy newPolicy = ImageAnimationPolicyAllowed; | 
| - | 
| - ImageResourceObserverWalker finishedWalker(m_finishedObservers); | 
| - while (auto* observer = finishedWalker.next()) { | 
| - if (observer->getImageAnimationPolicy(newPolicy)) | 
| + for (auto* observer : asVector(m_finishedObservers)) { | 
| + if (m_finishedObservers.contains(observer) && observer->getImageAnimationPolicy(newPolicy)) | 
| break; | 
| } | 
| - | 
| - ImageResourceObserverWalker walker(m_observers); | 
| - while (auto* observer = walker.next()) { | 
| - if (observer->getImageAnimationPolicy(newPolicy)) | 
| + for (auto* observer : asVector(m_observers)) { | 
| + if (m_observers.contains(observer) && observer->getImageAnimationPolicy(newPolicy)) | 
| break; | 
| } |