| Index: components/favicon/core/favicon_handler.h
|
| diff --git a/components/favicon/core/favicon_handler.h b/components/favicon/core/favicon_handler.h
|
| index bbd470c16ae54cece9673fe7490b3374bad98ee8..12f6c4eada284c597844c93219bfdfbf36e4b4ca 100644
|
| --- a/components/favicon/core/favicon_handler.h
|
| +++ b/components/favicon/core/favicon_handler.h
|
| @@ -13,6 +13,7 @@
|
| #include "base/callback_forward.h"
|
| #include "base/macros.h"
|
| #include "base/memory/ref_counted.h"
|
| +#include "base/memory/weak_ptr.h"
|
| #include "base/task/cancelable_task_tracker.h"
|
| #include "components/favicon/core/favicon_driver_observer.h"
|
| #include "components/favicon/core/favicon_url.h"
|
| @@ -25,7 +26,6 @@ class SkBitmap;
|
|
|
| namespace favicon {
|
|
|
| -class FaviconDriver;
|
| class FaviconService;
|
| class TestFaviconHandler;
|
|
|
| @@ -77,15 +77,51 @@ class TestFaviconHandler;
|
|
|
| class FaviconHandler {
|
| public:
|
| + class Delegate {
|
| + public:
|
| + // Mimics WebContents::ImageDownloadCallback.
|
| + typedef base::Callback<void(
|
| + int id,
|
| + int status_code,
|
| + const GURL& image_url,
|
| + const std::vector<SkBitmap>& bitmaps,
|
| + const std::vector<gfx::Size>& original_bitmap_sizes)>
|
| + ImageDownloadCallback;
|
| +
|
| + // 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
|
| + // is returned and no callback will be called.
|
| + // Bitmaps with pixel sizes larger than |max_bitmap_size| are filtered out
|
| + // from the bitmap results. If there are no bitmap results <=
|
| + // |max_bitmap_size|, the smallest bitmap is resized to |max_bitmap_size|
|
| + // and is the only result. A |max_bitmap_size| of 0 means unlimited.
|
| + virtual int DownloadImage(const GURL& url,
|
| + int max_image_size,
|
| + ImageDownloadCallback callback) = 0;
|
| +
|
| + // Returns whether the user is operating in an off-the-record context.
|
| + virtual bool IsOffTheRecord() = 0;
|
| +
|
| + // Notifies that the favicon image has been updated.
|
| + // See comment for FaviconDriverObserver::OnFaviconUpdated() for more
|
| + // details.
|
| + virtual void OnFaviconUpdated(
|
| + const GURL& page_url,
|
| + FaviconDriverObserver::NotificationIconType notification_icon_type,
|
| + const GURL& icon_url,
|
| + bool icon_url_changed,
|
| + const gfx::Image& image) = 0;
|
| + };
|
| +
|
| + // |service| and |delegate| must not be nullptr and must outlive this object.
|
| FaviconHandler(FaviconService* service,
|
| - FaviconDriver* driver,
|
| + Delegate* delegate,
|
| FaviconDriverObserver::NotificationIconType handler_type);
|
| + // TODO(mastiz): Remove subclasses and instead inject a FaviconService,
|
| + // mocked or facked.
|
| virtual ~FaviconHandler();
|
|
|
| - // Returns the bit mask of favicon_base::IconType based on the handler's type.
|
| - static int GetIconTypesFromHandlerType(
|
| - FaviconDriverObserver::NotificationIconType handler_type);
|
| -
|
| // Initiates loading the favicon for the specified url.
|
| void FetchFavicon(const GURL& url);
|
|
|
| @@ -94,21 +130,6 @@ class FaviconHandler {
|
| void OnUpdateFaviconURL(const GURL& page_url,
|
| const std::vector<favicon::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();
|
| -
|
| - // Message handler for ImageHostMsg_DidDownloadImage. Called when the image
|
| - // at |image_url| has been downloaded.
|
| - // |bitmaps| is a list of all the frames of the image at |image_url|.
|
| - // |original_bitmap_sizes| are the sizes of |bitmaps| before they were resized
|
| - // to the maximum bitmap size passed to DownloadFavicon().
|
| - void OnDidDownloadFavicon(
|
| - int id,
|
| - const GURL& image_url,
|
| - const std::vector<SkBitmap>& bitmaps,
|
| - const std::vector<gfx::Size>& original_bitmap_sizes);
|
| -
|
| // For testing.
|
| const std::vector<favicon::FaviconURL>& image_urls() const {
|
| return image_urls_;
|
| @@ -122,9 +143,6 @@ class FaviconHandler {
|
| // These virtual methods make FaviconHandler testable and are overridden by
|
| // TestFaviconHandler.
|
|
|
| - // Asks the render to download favicon, returns the request id.
|
| - virtual int DownloadFavicon(const GURL& image_url, int max_bitmap_size);
|
| -
|
| // Ask the favicon from history
|
| virtual void UpdateFaviconMappingAndFetch(
|
| const GURL& page_url,
|
| @@ -184,10 +202,18 @@ class FaviconHandler {
|
| favicon_base::IconType icon_type;
|
| };
|
|
|
| + // Returns the bit mask of favicon_base::IconType based on the handler's type.
|
| + static int GetIconTypesFromHandlerType(
|
| + FaviconDriverObserver::NotificationIconType handler_type);
|
| +
|
| // Get the maximal icon size in pixels for a icon of type |icon_type| for the
|
| // current platform.
|
| static int GetMaximalIconSize(favicon_base::IconType icon_type);
|
|
|
| + // 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();
|
| +
|
| // See description above class for details.
|
| void OnFaviconDataForInitialURLFromFaviconService(const std::vector<
|
| favicon_base::FaviconRawBitmapResult>& favicon_bitmap_results);
|
| @@ -207,6 +233,13 @@ class FaviconHandler {
|
| void ScheduleDownload(const GURL& image_url,
|
| favicon_base::IconType icon_type);
|
|
|
| + // Triggered when a download of an image has finished.
|
| + void DidDownloadFavicon(int id,
|
| + int http_status_code,
|
| + const GURL& image_url,
|
| + const std::vector<SkBitmap>& bitmaps,
|
| + const std::vector<gfx::Size>& original_bitmap_sizes);
|
| +
|
| // Updates |favicon_candidate_| and returns true if it is an exact match.
|
| bool UpdateFaviconCandidate(const GURL& image_url,
|
| const gfx::Image& image,
|
| @@ -288,8 +321,8 @@ class FaviconHandler {
|
| // testing.
|
| FaviconService* service_;
|
|
|
| - // This handler's driver, owns this object.
|
| - FaviconDriver* driver_;
|
| + // This handler's delegate.
|
| + Delegate* delegate_;
|
|
|
| // The index of the favicon URL in |image_urls_| which is currently being
|
| // requested from history or downloaded.
|
| @@ -301,6 +334,8 @@ class FaviconHandler {
|
| // the image is for a favicon).
|
| FaviconCandidate best_favicon_candidate_;
|
|
|
| + base::WeakPtrFactory<FaviconHandler> weak_ptr_factory_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(FaviconHandler);
|
| };
|
|
|
|
|