1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef ANDROID_WEBVIEW_BROWSER_ICON_HELPER_H_
6 #define ANDROID_WEBVIEW_BROWSER_ICON_HELPER_H_
9 #include "base/containers/hash_tables.h"
10 #include "content/public/browser/web_contents_observer.h"
23 namespace android_webview
{
25 // A helper that observes favicon changes for Webview.
26 class IconHelper
: public content::WebContentsObserver
{
30 virtual bool ShouldDownloadFavicon(const GURL
& icon_url
) = 0;
31 virtual void OnReceivedIcon(const GURL
& icon_url
,
32 const SkBitmap
& bitmap
) = 0;
33 virtual void OnReceivedTouchIconUrl(const std::string
& url
,
34 const bool precomposed
) = 0;
36 virtual ~Listener() {}
39 explicit IconHelper(content::WebContents
* web_contents
);
40 ~IconHelper() override
;
42 void SetListener(Listener
* listener
);
44 // From WebContentsObserver
45 void DidUpdateFaviconURL(
46 const std::vector
<content::FaviconURL
>& candidates
) override
;
47 void DidStartNavigationToPendingEntry(
49 content::NavigationController::ReloadType reload_type
) override
;
51 void DownloadFaviconCallback(
54 const GURL
& image_url
,
55 const std::vector
<SkBitmap
>& bitmaps
,
56 const std::vector
<gfx::Size
>& original_bitmap_sizes
);
59 void MarkUnableToDownloadFavicon(const GURL
& icon_url
);
60 bool WasUnableToDownloadFavicon(const GURL
& icon_url
) const;
61 void ClearUnableToDownloadFavicons();
65 typedef uint32 MissingFaviconURLHash
;
66 base::hash_set
<MissingFaviconURLHash
> missing_favicon_urls_
;
68 DISALLOW_COPY_AND_ASSIGN(IconHelper
);
71 } // namespace android_webview
73 #endif // ANDROID_WEBVIEW_BROWSER_ICON_HELPER_H_