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. 4 5 #ifndef ANDROID_WEBVIEW_BROWSER_ICON_HELPER_H_ 6 #define ANDROID_WEBVIEW_BROWSER_ICON_HELPER_H_ 7 8 #include <string> 9 #include "base/containers/hash_tables.h" 10 #include "content/public/browser/web_contents_observer.h" 11 #include "url/gurl.h" 12 13 class SkBitmap; 14 15 namespace content { 16 struct FaviconURL; 17 } 18 19 namespace gfx { 20 class Size; 21 } 22 23 namespace android_webview { 24 25 // A helper that observes favicon changes for Webview. 26 class IconHelper : public content::WebContentsObserver { 27 public: 28 class Listener { 29 public: 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; 35 protected: 36 virtual ~Listener() {} 37 }; 38 39 explicit IconHelper(content::WebContents* web_contents); 40 virtual ~IconHelper(); 41 42 void SetListener(Listener* listener); 43 44 // From WebContentsObserver 45 virtual void DidUpdateFaviconURL( 46 const std::vector<content::FaviconURL>& candidates) OVERRIDE; 47 virtual void DidStartNavigationToPendingEntry( 48 const GURL& url, 49 content::NavigationController::ReloadType reload_type) OVERRIDE; 50 51 void DownloadFaviconCallback( 52 int id, 53 int http_status_code, 54 const GURL& image_url, 55 const std::vector<SkBitmap>& bitmaps, 56 const std::vector<gfx::Size>& original_bitmap_sizes); 57 58 private: 59 void MarkUnableToDownloadFavicon(const GURL& icon_url); 60 bool WasUnableToDownloadFavicon(const GURL& icon_url) const; 61 void ClearUnableToDownloadFavicons(); 62 63 Listener* listener_; 64 65 typedef uint32 MissingFaviconURLHash; 66 base::hash_set<MissingFaviconURLHash> missing_favicon_urls_; 67 68 DISALLOW_COPY_AND_ASSIGN(IconHelper); 69 }; 70 71 } // namespace android_webview 72 73 #endif // ANDROID_WEBVIEW_BROWSER_ICON_HELPER_H_ 74