Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(383)

Unified Diff: components/ntp_tiles/icon_cacher_impl.cc

Issue 2695713004: Add baked-in favicons for default popular sites on NTP (Closed)
Patch Set: Have python script adhere to guidelines Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698