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

Unified Diff: components/favicon/core/favicon_handler.h

Issue 2799273002: Add support to process favicons from Web Manifests (Closed)
Patch Set: Created 3 years, 8 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/favicon/core/favicon_handler.h
diff --git a/components/favicon/core/favicon_handler.h b/components/favicon/core/favicon_handler.h
index 9e6e22b9f97126bc1762aa49db194d4225a8f635..e2a904b11e146b4811cef386955957c7f6cef04e 100644
--- a/components/favicon/core/favicon_handler.h
+++ b/components/favicon/core/favicon_handler.h
@@ -13,6 +13,7 @@
#include "base/cancelable_callback.h"
#include "base/macros.h"
#include "base/memory/ref_counted.h"
+#include "base/optional.h"
#include "base/task/cancelable_task_tracker.h"
#include "components/favicon/core/favicon_driver_observer.h"
#include "components/favicon/core/favicon_url.h"
@@ -86,6 +87,10 @@ class FaviconHandler {
const std::vector<gfx::Size>& original_bitmap_sizes)>
ImageDownloadCallback;
+ typedef base::Callback<void(
+ const std::vector<favicon::FaviconURL>& favicons)>
+ ManifestDownloadCallback;
+
// Starts the download for the given favicon. When finished, the callback
// is called with the results. Returns the unique id of the download
// request, which will also be passed to the callback. In case of error, 0
@@ -98,6 +103,10 @@ class FaviconHandler {
int max_image_size,
ImageDownloadCallback callback) = 0;
+ // Downloads a WebManifest and returns the favicons listed there.
+ virtual void DownloadManifest(const GURL& url,
+ ManifestDownloadCallback callback) = 0;
+
// Returns whether the user is operating in an off-the-record context.
virtual bool IsOffTheRecord() = 0;
@@ -124,10 +133,11 @@ class FaviconHandler {
// Initiates loading the favicon for the specified url.
void FetchFavicon(const GURL& url);
- // Message Handler. Must be public, because also called from
- // PrerenderContents. Collects the |image_urls| list.
- void OnUpdateFaviconURL(const GURL& page_url,
- const std::vector<favicon::FaviconURL>& candidates);
+ // Collects the candidate favicons as listed in the HTML head, as well as
+ // the WebManifest URL if available.
+ void OnUpdateCandidates(const GURL& page_url,
+ const std::vector<favicon::FaviconURL>& candidates,
+ const base::Optional<GURL>& manifest_url);
// For testing.
const std::vector<GURL> GetIconURLs() const;
@@ -174,6 +184,11 @@ class FaviconHandler {
static int GetIconTypesFromHandlerType(
FaviconDriverObserver::NotificationIconType handler_type);
+ // Called a list of favicon candidates to be processed is available, which can
+ // be either icon URLs listed in the HTML head instead or, if a Web Manifest
+ // was provided, the list of icons there.
+ void OnGotFinalIconURLCandidates(const std::vector<FaviconURL>& candidates);
+
// Called when the history request for favicon data mapped to |url_| has
// completed and the renderer has told us the icon URLs used by |url_|
void OnGotInitialHistoryDataAndIconURLCandidates();
@@ -182,6 +197,10 @@ class FaviconHandler {
void OnFaviconDataForInitialURLFromFaviconService(const std::vector<
favicon_base::FaviconRawBitmapResult>& favicon_bitmap_results);
+ void OnFaviconDataForManifestURLFromFaviconService(
+ const std::vector<favicon_base::FaviconRawBitmapResult>&
+ favicon_bitmap_results);
+
// If the favicon currently mapped to |url_| has expired, downloads the
// current candidate favicon from the renderer. Otherwise requests data for
// the current favicon from history. If data is requested from history,
@@ -265,9 +284,13 @@ class FaviconHandler {
// |image_urls_| one by one.
bool redownload_icons_;
+ // Requests to the renderer to download a manifest.
+ base::CancelableCallback<Delegate::ManifestDownloadCallback::RunType>
+ manifest_download_request_;
+
// Requests to the renderer to download favicons.
base::CancelableCallback<Delegate::ImageDownloadCallback::RunType>
- download_request_;
+ image_download_request_;
// The combination of the supported icon types.
const int icon_types_;
@@ -275,6 +298,9 @@ class FaviconHandler {
// Whether the largest icon should be downloaded.
const bool download_largest_icon_;
+ // The manifest URL from the renderer.
+ base::Optional<GURL> manifest_url_;
+
// The prioritized favicon candidates from the page back from the renderer.
std::vector<FaviconCandidate> candidates_;

Powered by Google App Engine
This is Rietveld 408576698