#include "base/basictypes.h"
#include "base/callback.h"
-#include "chrome/browser/favicon/favicon_handler_delegate.h"
+#include "base/observer_list.h"
+#include "components/favicon/core/browser/favicon_client.h"
+#include "components/favicon/core/favicon_driver.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h"
#include "content/public/common/favicon_url.h"
class Image;
}
+namespace content {
+struct FaviconStatus;
+}
+
class GURL;
class FaviconHandler;
+class FaviconTabHelperObserver;
class Profile;
class SkBitmap;
// downloaded and saved in the history backend.
//
class FaviconTabHelper : public content::WebContentsObserver,
- public FaviconHandlerDelegate,
+ public FaviconDriver,
public content::WebContentsUserData<FaviconTabHelper> {
public:
- virtual ~FaviconTabHelper();
+ ~FaviconTabHelper() override;
// Initiates loading the favicon for the specified url.
void FetchFavicon(const GURL& url);
return favicon_urls_;
}
- // Allows the client to determine if they want to fetch the Favicons as
- // they are discovered.
- void set_should_fetch_icons(bool fetch) {
- should_fetch_icons_ = fetch;
- }
-
// content::WebContentsObserver override. Must be public, because also
// called from PrerenderContents.
- virtual void DidUpdateFaviconURL(
- int32 page_id,
- const std::vector<content::FaviconURL>& candidates) OVERRIDE;
+ void DidUpdateFaviconURL(
+ const std::vector<content::FaviconURL>& candidates) override;
// Saves the favicon for the current page.
void SaveFavicon();
- // FaviconHandlerDelegate methods.
- virtual content::NavigationEntry* GetActiveEntry() OVERRIDE;
- virtual int StartDownload(const GURL& url, int max_bitmap_size) OVERRIDE;
- virtual void NotifyFaviconUpdated(bool icon_url_changed) OVERRIDE;
+ void AddObserver(FaviconTabHelperObserver* observer);
+ void RemoveObserver(FaviconTabHelperObserver* observer);
+
+ // FaviconDriver methods.
+ int StartDownload(const GURL& url, int max_bitmap_size) override;
+ bool IsOffTheRecord() override;
+ const gfx::Image GetActiveFaviconImage() override;
+ const GURL GetActiveFaviconURL() override;
+ bool GetActiveFaviconValidity() override;
+ const GURL GetActiveURL() override;
+ void OnFaviconAvailable(const gfx::Image& image,
+ const GURL& url,
+ bool is_active_favicon) override;
// Favicon download callback.
void DidDownloadFavicon(
friend class content::WebContentsUserData<FaviconTabHelper>;
// content::WebContentsObserver overrides.
- virtual void DidStartNavigationToPendingEntry(
+ void DidStartNavigationToPendingEntry(
const GURL& url,
- content::NavigationController::ReloadType reload_type) OVERRIDE;
- virtual void DidNavigateMainFrame(
+ content::NavigationController::ReloadType reload_type) override;
+ void DidNavigateMainFrame(
const content::LoadCommittedDetails& details,
- const content::FrameNavigateParams& params) OVERRIDE;
+ const content::FrameNavigateParams& params) override;
+
+ // Sets whether the page's favicon is valid (if false, the default favicon is
+ // being used). Requires GetActiveURL() to be valid.
+ void SetActiveFaviconValidity(bool validity);
+
+ // Sets the URL of the favicon's bitmap.
+ void SetActiveFaviconURL(GURL url);
+
+ // Sets the bitmap of the current page's favicon.
+ void SetActiveFaviconImage(gfx::Image image);
+
+ // Helper method that returns the active navigation entry's favicon.
+ content::FaviconStatus& GetFaviconStatus();
Profile* profile_;
- bool should_fetch_icons_;
+
+ FaviconClient* client_;
std::vector<content::FaviconURL> favicon_urls_;
// browser_defaults::kEnableTouchIcon is false.
scoped_ptr<FaviconHandler> touch_icon_handler_;
+ ObserverList<FaviconTabHelperObserver> observer_list_;
+
DISALLOW_COPY_AND_ASSIGN(FaviconTabHelper);
};