| Index: components/favicon/core/favicon_handler.h
|
| diff --git a/components/favicon/core/favicon_handler.h b/components/favicon/core/favicon_handler.h
|
| index 0e579b3ceaf97bf429979b23590f36a032deb1c5..6199880fbb45f53a156bccefb55d8a811a41d602 100644
|
| --- a/components/favicon/core/favicon_handler.h
|
| +++ b/components/favicon/core/favicon_handler.h
|
| @@ -23,10 +23,16 @@
|
|
|
| class SkBitmap;
|
|
|
| +namespace base {
|
| +struct Feature;
|
| +} // namespace base
|
| +
|
| namespace favicon {
|
|
|
| class FaviconService;
|
|
|
| +extern const base::Feature kFaviconsFromWebManifest;
|
| +
|
| // FaviconHandler works with FaviconDriver to fetch the specific type of
|
| // favicon.
|
| //
|
| @@ -99,6 +105,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
|
| @@ -111,6 +121,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;
|
|
|
| @@ -137,10 +151,15 @@ 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.
|
| + // Collects the candidate favicons as listed in the HTML head, as well as
|
| + // the WebManifest URL if available (or empty URL otherwise).
|
| void OnUpdateCandidates(const GURL& page_url,
|
| - const std::vector<favicon::FaviconURL>& candidates);
|
| + const std::vector<favicon::FaviconURL>& candidates,
|
| + const GURL& manifest_url);
|
| +
|
| + // Returns the supported icon types, inferred from the handler type as passed
|
| + // in the constructor.
|
| + int icon_types() const { return icon_types_; }
|
|
|
| // For testing.
|
| const std::vector<GURL> GetIconURLs() const;
|
| @@ -161,12 +180,6 @@ class FaviconHandler {
|
| const favicon::FaviconURL& favicon_url,
|
| const std::vector<int>& desired_pixel_sizes);
|
|
|
| - friend bool operator==(const FaviconCandidate& lhs,
|
| - const FaviconCandidate& rhs) {
|
| - return lhs.icon_url == rhs.icon_url && lhs.icon_type == rhs.icon_type &&
|
| - lhs.score == rhs.score;
|
| - }
|
| -
|
| // Compare function used for std::stable_sort to sort in descending order.
|
| static bool CompareScore(const FaviconCandidate& lhs,
|
| const FaviconCandidate& rhs) {
|
| @@ -187,6 +200,20 @@ class FaviconHandler {
|
| static int GetIconTypesFromHandlerType(
|
| FaviconDriverObserver::NotificationIconType handler_type);
|
|
|
| + // Called with the result of looking up cached icon data for the manifest's
|
| + // URL, which is used as icon URL.
|
| + void OnFaviconDataForManifestFromFaviconService(
|
| + const std::vector<favicon_base::FaviconRawBitmapResult>&
|
| + favicon_bitmap_results);
|
| +
|
| + // Called when the dowloading of a manifest completes.
|
| + void OnDidDownloadManifest(const std::vector<FaviconURL>& candidates);
|
| +
|
| + // Called when the actual 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();
|
| @@ -201,6 +228,13 @@ class FaviconHandler {
|
| // OnFaviconData() is called with the history data once it has been retrieved.
|
| void DownloadCurrentCandidateOrAskFaviconService();
|
|
|
| + // Requests the favicon for |icon_url| from the favicon service. Unless in
|
| + // incognito, it also updates the page URL (url_) to |icon_url| mappings.
|
| + void GetFaviconAndUpdateMappingsUnlessIncognito(
|
| + const GURL& icon_url,
|
| + favicon_base::IconType icon_type,
|
| + const favicon_base::FaviconResultsCallback& callback);
|
| +
|
| // See description above class for details.
|
| void OnFaviconData(const std::vector<favicon_base::FaviconRawBitmapResult>&
|
| favicon_bitmap_results);
|
| @@ -283,6 +317,10 @@ 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>
|
| image_download_request_;
|
| @@ -293,6 +331,14 @@ class FaviconHandler {
|
| // Whether the largest icon should be downloaded.
|
| const bool download_largest_icon_;
|
|
|
| + // The manifest URL from the renderer (or empty URL if none).
|
| + GURL manifest_url_;
|
| +
|
| + // Original list of candidates provided to OnUpdateCandidates(), stored to
|
| + // be able to fall back to, in case a manifest was provided and downloading it
|
| + // failed (or provided no icons).
|
| + std::vector<FaviconURL> non_manifest_original_candidates_;
|
| +
|
| // The prioritized favicon candidates from the page back from the renderer.
|
| std::vector<FaviconCandidate> candidates_;
|
|
|
|
|