Index: components/favicon/core/favicon_handler.cc |
diff --git a/components/favicon/core/favicon_handler.cc b/components/favicon/core/favicon_handler.cc |
index 5e2d8ad1e70c47c6c934d49db59482bf17ad33a3..0f0c18431156066491a60107a8c93db26505b773 100644 |
--- a/components/favicon/core/favicon_handler.cc |
+++ b/components/favicon/core/favicon_handler.cc |
@@ -395,6 +395,25 @@ void FaviconHandler::OnUpdateFaviconURL( |
OnGotInitialHistoryDataAndIconURLCandidates(); |
} |
+// static |
+int FaviconHandler::GetMaximalIconSize(favicon_base::IconType icon_type) { |
+ switch (icon_type) { |
+ case favicon_base::FAVICON: |
+#if defined(OS_ANDROID) |
+ return 192; |
+#else |
+ return gfx::ImageSkia::GetMaxSupportedScale() * gfx::kFaviconSize; |
+#endif |
+ case favicon_base::TOUCH_ICON: |
+ case favicon_base::TOUCH_PRECOMPOSED_ICON: |
+ return kTouchIconSize; |
+ case favicon_base::INVALID_ICON: |
+ return 0; |
+ } |
+ NOTREACHED(); |
+ return 0; |
+} |
+ |
void FaviconHandler::OnGotInitialHistoryDataAndIconURLCandidates() { |
if (!initial_history_result_expired_or_incomplete_ && |
DoUrlAndIconMatch(*current_candidate(), notification_icon_url_, |
@@ -555,24 +574,6 @@ bool FaviconHandler::ShouldSaveFavicon() { |
return delegate_->IsBookmarked(url_); |
} |
-int FaviconHandler::GetMaximalIconSize(favicon_base::IconType icon_type) { |
- switch (icon_type) { |
- case favicon_base::FAVICON: |
-#if defined(OS_ANDROID) |
- return 192; |
-#else |
- return gfx::ImageSkia::GetMaxSupportedScale() * gfx::kFaviconSize; |
-#endif |
- case favicon_base::TOUCH_ICON: |
- case favicon_base::TOUCH_PRECOMPOSED_ICON: |
- return kTouchIconSize; |
- case favicon_base::INVALID_ICON: |
- return 0; |
- } |
- NOTREACHED(); |
- return 0; |
-} |
- |
void FaviconHandler::OnFaviconDataForInitialURLFromFaviconService( |
const std::vector<favicon_base::FaviconRawBitmapResult>& |
favicon_bitmap_results) { |
@@ -661,31 +662,24 @@ void FaviconHandler::OnFaviconData(const std::vector< |
void FaviconHandler::ScheduleDownload(const GURL& image_url, |
favicon_base::IconType icon_type) { |
DCHECK(image_url.is_valid()); |
- if (service_ && service_->WasUnableToDownloadFavicon(image_url)) { |
- DVLOG(1) << "Skip Failed FavIcon: " << image_url; |
- OnDidDownloadFavicon(0, 0, image_url, std::vector<SkBitmap>(), |
- std::vector<gfx::Size>()); |
- return; |
+ int download_id = 0; |
+ if (service_ && !service_->WasUnableToDownloadFavicon(image_url)) { |
+ // A max bitmap size is specified to avoid receiving huge bitmaps in |
+ // OnDidDownloadFavicon(). See FaviconDriver::StartDownload() |
+ // for more details about the max bitmap size. |
+ download_id = delegate_->DownloadImage( |
+ image_url, GetMaximalIconSize(icon_type), |
+ base::Bind(&FaviconHandler::OnDidDownloadFavicon, |
+ weak_ptr_factory_.GetWeakPtr())); |
} |
- // A max bitmap size is specified to avoid receiving huge bitmaps in |
- // OnDidDownloadFavicon(). See FaviconDriver::StartDownload() |
- // for more details about the max bitmap size. |
- const int download_id = |
- delegate_->DownloadImage(image_url, GetMaximalIconSize(icon_type), |
- base::Bind(&FaviconHandler::OnDidDownloadFavicon, |
- weak_ptr_factory_.GetWeakPtr())); |
// Download ids should be unique. |
DCHECK(download_requests_.find(download_id) == download_requests_.end()); |
download_requests_[download_id] = DownloadRequest(image_url, icon_type); |
- // TODO(mastiz): Remove the download_id == 0 handling because it's not used |
- // in production code, only tests. |
if (download_id == 0) { |
- // If DownloadFavicon() did not start a download, it returns a download id |
- // of 0. We still need to call OnDidDownloadFavicon() because the method is |
- // responsible for initiating the data request for the next candidate. |
- OnDidDownloadFavicon(download_id, 0, image_url, std::vector<SkBitmap>(), |
+ DVLOG(1) << "Skip Failed FavIcon: " << image_url; |
+ OnDidDownloadFavicon(0, 404, image_url, std::vector<SkBitmap>(), |
std::vector<gfx::Size>()); |
} |
} |