1// Copyright (c) 2010 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_EXTENSIONS_EXTENSION_ICON_MANAGER_H_
6#define CHROME_BROWSER_EXTENSIONS_EXTENSION_ICON_MANAGER_H_
7#pragma once
8
9#include <map>
10#include <set>
11#include <string>
12
13#include "base/basictypes.h"
14#include "chrome/browser/extensions/image_loading_tracker.h"
15#include "third_party/skia/include/core/SkBitmap.h"
16#include "ui/gfx/insets.h"
17
18class Extension;
19
20class ExtensionIconManager : public ImageLoadingTracker::Observer {
21 public:
22  ExtensionIconManager();
23  virtual ~ExtensionIconManager();
24
25  // Start loading the icon for the given extension.
26  void LoadIcon(const Extension* extension);
27
28  // This returns a bitmap of width/height kFaviconSize, loaded either from an
29  // entry specified in the extension's 'icon' section of the manifest, or a
30  // default extension icon.
31  const SkBitmap& GetIcon(const std::string& extension_id);
32
33  // Removes the extension's icon from memory.
34  void RemoveIcon(const std::string& extension_id);
35
36  // Implements the ImageLoadingTracker::Observer interface.
37  virtual void OnImageLoaded(SkBitmap* image, const ExtensionResource& resource,
38                             int index);
39
40  void set_monochrome(bool value) { monochrome_ = value; }
41  void set_padding(const gfx::Insets& value) { padding_ = value; }
42
43 private:
44  // Makes sure we've done one-time initialization of the default extension icon
45  // default_icon_.
46  void EnsureDefaultIcon();
47
48  // Helper function to return a copy of |src| with the proper scaling and
49  // coloring.
50  SkBitmap ApplyTransforms(const SkBitmap& src);
51
52  // Used for loading extension icons.
53  ImageLoadingTracker image_tracker_;
54
55  // Maps extension id to an SkBitmap with the icon for that extension.
56  std::map<std::string, SkBitmap> icons_;
57
58  // Set of extension IDs waiting for icons to load.
59  std::set<std::string> pending_icons_;
60
61  // The default icon we'll use if an extension doesn't have one.
62  SkBitmap default_icon_;
63
64  // If true, we will desaturate the icons to make them monochromatic.
65  bool monochrome_;
66
67  // Specifies the amount of empty padding to place around the icon.
68  gfx::Insets padding_;
69
70  DISALLOW_COPY_AND_ASSIGN(ExtensionIconManager);
71};
72
73#endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_ICON_MANAGER_H_
74