12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef ANDROID_WEBVIEW_BROWSER_ICON_HELPER_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ANDROID_WEBVIEW_BROWSER_ICON_HELPER_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/containers/hash_tables.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_contents_observer.h" 11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "url/gurl.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SkBitmap; 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct FaviconURL; 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace gfx { 20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)class Size; 21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace android_webview { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A helper that observes favicon changes for Webview. 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class IconHelper : public content::WebContentsObserver { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class Listener { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual bool ShouldDownloadFavicon(const GURL& icon_url) = 0; 31ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual void OnReceivedIcon(const GURL& icon_url, 32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const SkBitmap& bitmap) = 0; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnReceivedTouchIconUrl(const std::string& url, 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const bool precomposed) = 0; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~Listener() {} 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit IconHelper(content::WebContents* web_contents); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~IconHelper(); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetListener(Listener* listener); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // From WebContentsObserver 45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void DidUpdateFaviconURL( 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<content::FaviconURL>& candidates) OVERRIDE; 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void DidStartNavigationToPendingEntry( 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const GURL& url, 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu content::NavigationController::ReloadType reload_type) OVERRIDE; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) void DownloadFaviconCallback( 52d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int id, 53d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int http_status_code, 54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const GURL& image_url, 55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const std::vector<SkBitmap>& bitmaps, 56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const std::vector<gfx::Size>& original_bitmap_sizes); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void MarkUnableToDownloadFavicon(const GURL& icon_url); 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool WasUnableToDownloadFavicon(const GURL& icon_url) const; 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void ClearUnableToDownloadFavicons(); 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Listener* listener_; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu typedef uint32 MissingFaviconURLHash; 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::hash_set<MissingFaviconURLHash> missing_favicon_urls_; 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(IconHelper); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace android_webview 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // ANDROID_WEBVIEW_BROWSER_ICON_HELPER_H_ 74