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> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_contents_observer.h" 10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "url/gurl.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SkBitmap; 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct FaviconURL; 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace gfx { 19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)class Size; 20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace android_webview { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A helper that observes favicon changes for Webview. 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class IconHelper : public content::WebContentsObserver { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class Listener { 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual bool ShouldDownloadFavicon(const GURL& icon_url) = 0; 30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual void OnReceivedIcon(const GURL& icon_url, 31ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const SkBitmap& bitmap) = 0; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnReceivedTouchIconUrl(const std::string& url, 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const bool precomposed) = 0; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~Listener() {} 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit IconHelper(content::WebContents* web_contents); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~IconHelper(); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetListener(Listener* listener); 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // From WebContentsObserver 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DidUpdateFaviconURL(int32 page_id, 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<content::FaviconURL>& candidates) OVERRIDE; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) void DownloadFaviconCallback( 48d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int id, 49d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int http_status_code, 50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const GURL& image_url, 51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const std::vector<SkBitmap>& bitmaps, 52d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const std::vector<gfx::Size>& original_bitmap_sizes); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Listener* listener_; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(IconHelper); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace android_webview 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // ANDROID_WEBVIEW_BROWSER_ICON_HELPER_H_ 63