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 13class SkBitmap; 14 15namespace content { 16struct FaviconURL; 17} 18 19namespace gfx { 20class Size; 21} 22 23namespace android_webview { 24 25// A helper that observes favicon changes for Webview. 26class 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