Index: content/renderer/image_downloader/image_downloader_base.cc |
diff --git a/content/renderer/image_downloader/image_downloader_base.cc b/content/renderer/image_downloader/image_downloader_base.cc |
index fffdeb3e724cb1591ebe08126399da537f2bc8dc..9814b389985d97934c50e9fa24bd03967afd66f3 100644 |
--- a/content/renderer/image_downloader/image_downloader_base.cc |
+++ b/content/renderer/image_downloader/image_downloader_base.cc |
@@ -9,6 +9,7 @@ |
#include "base/bind.h" |
#include "base/location.h" |
#include "base/logging.h" |
+#include "base/memory/ptr_util.h" |
#include "content/child/image_decoder.h" |
#include "content/public/renderer/render_frame.h" |
#include "content/public/renderer/render_thread.h" |
@@ -93,13 +94,15 @@ bool ImageDownloaderBase::FetchImage(const GURL& image_url, |
DCHECK(frame); |
// Create an image resource fetcher and assign it with a call back object. |
- image_fetchers_.push_back(new MultiResolutionImageResourceFetcher( |
- image_url, frame, 0, is_favicon ? WebURLRequest::RequestContextFavicon |
- : WebURLRequest::RequestContextImage, |
- bypass_cache ? WebCachePolicy::BypassingCache |
- : WebCachePolicy::UseProtocolCachePolicy, |
- base::Bind(&ImageDownloaderBase::DidFetchImage, base::Unretained(this), |
- callback))); |
+ image_fetchers_.push_back( |
+ base::MakeUnique<MultiResolutionImageResourceFetcher>( |
+ image_url, frame, 0, |
+ is_favicon ? WebURLRequest::RequestContextFavicon |
+ : WebURLRequest::RequestContextImage, |
+ bypass_cache ? WebCachePolicy::BypassingCache |
+ : WebCachePolicy::UseProtocolCachePolicy, |
+ base::Bind(&ImageDownloaderBase::DidFetchImage, |
+ base::Unretained(this), callback))); |
return true; |
} |
@@ -111,11 +114,14 @@ void ImageDownloaderBase::DidFetchImage( |
// Remove the image fetcher from our pending list. We're in the callback from |
// MultiResolutionImageResourceFetcher, best to delay deletion. |
- ImageResourceFetcherList::iterator iter = |
- std::find(image_fetchers_.begin(), image_fetchers_.end(), fetcher); |
- if (iter != image_fetchers_.end()) { |
- image_fetchers_.weak_erase(iter); |
- base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, fetcher); |
+ for (auto iter = image_fetchers_.begin(); iter != image_fetchers_.end(); |
+ ++iter) { |
+ if (iter->get() == fetcher) { |
+ iter->release(); |
+ image_fetchers_.erase(iter); |
+ base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, fetcher); |
+ break; |
+ } |
} |
// |this| may be destructed after callback is run. |
@@ -123,7 +129,7 @@ void ImageDownloaderBase::DidFetchImage( |
} |
void ImageDownloaderBase::OnDestruct() { |
- for (auto* fetchers : image_fetchers_) { |
+ for (const auto& fetchers : image_fetchers_) { |
// Will run callbacks with an empty image vector. |
fetchers->OnRenderFrameDestruct(); |
} |