Home | History | Annotate | Download | only in browser
      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