| Index: components/ntp_tiles/icon_cacher_impl.cc
|
| diff --git a/components/ntp_tiles/icon_cacher_impl.cc b/components/ntp_tiles/icon_cacher_impl.cc
|
| index cb957ea010e58bcd9e70444e6dc578aed426c45e..d2289f4f2a3ec9f6d14b9fa5955b685cf739510b 100644
|
| --- a/components/ntp_tiles/icon_cacher_impl.cc
|
| +++ b/components/ntp_tiles/icon_cacher_impl.cc
|
| @@ -11,6 +11,7 @@
|
| #include "components/favicon_base/favicon_types.h"
|
| #include "components/favicon_base/favicon_util.h"
|
| #include "components/image_fetcher/image_fetcher.h"
|
| +#include "ui/base/resource/resource_bundle.h"
|
| #include "ui/gfx/image/image.h"
|
| #include "url/gurl.h"
|
|
|
| @@ -30,6 +31,14 @@ const GURL& IconURL(const PopularSites::Site& site) {
|
|
|
| } // namespace
|
|
|
| +struct IconCacherImpl::DefaultIcon {
|
| + DefaultIcon(const PopularSites::Site& popular_site, int image_resource_id)
|
| + : site(popular_site), image_resource(image_resource_id) {}
|
| +
|
| + PopularSites::Site site;
|
| + int image_resource;
|
| +};
|
| +
|
| IconCacherImpl::IconCacherImpl(
|
| favicon::FaviconService* favicon_service,
|
| std::unique_ptr<image_fetcher::ImageFetcher> image_fetcher)
|
| @@ -59,6 +68,11 @@ void IconCacherImpl::OnGetFaviconImageForPageURLFinished(
|
| return;
|
| }
|
|
|
| + if (ProvideDefaultIcon(site)) {
|
| + done.Run(true);
|
| + // Don't return. We want to fetch to update possibly stale images.
|
| + }
|
| +
|
| image_fetcher_->StartOrQueueNetworkRequest(
|
| std::string(), IconURL(site),
|
| base::Bind(&IconCacherImpl::OnFaviconDownloaded, base::Unretained(this),
|
| @@ -74,10 +88,31 @@ void IconCacherImpl::OnFaviconDownloaded(PopularSites::Site site,
|
| return;
|
| }
|
|
|
| - gfx::Image image = fetched_image;
|
| + SaveIconForSite(site, fetched_image);
|
| + done.Run(true);
|
| +}
|
| +
|
| +void IconCacherImpl::SaveIconForSite(const PopularSites::Site& site,
|
| + gfx::Image image) {
|
| favicon_base::SetFaviconColorSpace(&image);
|
| favicon_service_->SetFavicons(site.url, IconURL(site), IconType(site), image);
|
| - done.Run(true);
|
| +}
|
| +
|
| +bool IconCacherImpl::ProvideDefaultIcon(const PopularSites::Site& site) {
|
| + auto it = default_icons_.find(site.url.spec());
|
| + if (it == default_icons_.end()) {
|
| + return false;
|
| + }
|
| + const DefaultIcon& icon = it->second;
|
| + SaveIconForSite(icon.site, ResourceBundle::GetSharedInstance().GetImageNamed(
|
| + icon.image_resource));
|
| + return true;
|
| +}
|
| +
|
| +void IconCacherImpl::AddDefaultImage(const PopularSites::Site& site,
|
| + int image_resource_id) {
|
| + default_icons_.insert(
|
| + std::make_pair(site.url.spec(), DefaultIcon(site, image_resource_id)));
|
| }
|
|
|
| } // namespace ntp_tiles
|
|
|