1// Copyright (c) 2012 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 CHROME_BROWSER_UI_ASH_LAUNCHER_LAUNCHER_FAVICON_LOADER_H_
6#define CHROME_BROWSER_UI_ASH_LAUNCHER_LAUNCHER_FAVICON_LOADER_H_
7
8#include <vector>
9
10#include "base/basictypes.h"
11#include "base/callback.h"
12#include "content/public/common/favicon_url.h"
13
14class GURL;
15class SkBitmap;
16
17namespace internal {
18class FaviconRawBitmapHandler;
19}
20
21namespace content {
22class WebContents;
23}
24
25// LauncherFaviconLoader handles updates to the list of favicon urls and
26// retrieves the appropriately sized favicon for panels in the Launcher.
27
28class LauncherFaviconLoader {
29 public:
30  class Delegate {
31   public:
32    virtual void FaviconUpdated() = 0;
33
34   protected:
35    virtual ~Delegate() {}
36  };
37
38  LauncherFaviconLoader(Delegate* delegate,
39                        content::WebContents* web_contents);
40  virtual ~LauncherFaviconLoader();
41
42  content::WebContents* web_contents() {
43    return web_contents_;
44  }
45
46  // Returns an appropriately sized favicon for the Launcher. If none are
47  // available will return an isNull bitmap.
48  SkBitmap GetFavicon() const;
49
50  // Returns true if the loader is waiting for downloads to finish.
51  bool HasPendingDownloads() const;
52
53 private:
54  content::WebContents* web_contents_;
55  scoped_ptr<internal::FaviconRawBitmapHandler> favicon_handler_;
56
57  DISALLOW_COPY_AND_ASSIGN(LauncherFaviconLoader);
58};
59
60#endif  // CHROME_BROWSER_UI_ASH_LAUNCHER_LAUNCHER_FAVICON_LOADER_H_
61