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