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 #include "chrome/browser/extensions/extension_action_icon_factory.h"
6
7 #include "chrome/browser/extensions/extension_action.h"
8 #include "chrome/browser/profiles/profile.h"
9 #include "extensions/common/extension.h"
10 #include "extensions/common/extension_icon_set.h"
11 #include "grit/theme_resources.h"
12 #include "ui/base/resource/resource_bundle.h"
13 #include "ui/gfx/image/image_skia.h"
14
15 using extensions::Extension;
16 using extensions::IconImage;
17
18 namespace {
19
GetDefaultIcon()20 gfx::ImageSkia GetDefaultIcon() {
21 return *ui::ResourceBundle::GetSharedInstance().GetImageNamed(
22 IDR_EXTENSIONS_FAVICON).ToImageSkia();
23 }
24
25 } // namespace
26
ExtensionActionIconFactory(Profile * profile,const Extension * extension,const ExtensionAction * action,Observer * observer)27 ExtensionActionIconFactory::ExtensionActionIconFactory(
28 Profile* profile,
29 const Extension* extension,
30 const ExtensionAction* action,
31 Observer* observer)
32 : extension_(extension),
33 action_(action),
34 observer_(observer) {
35 if (action_->default_icon()) {
36 default_icon_.reset(new IconImage(
37 profile,
38 extension_,
39 *action_->default_icon(),
40 ExtensionAction::GetIconSizeForType(action_->action_type()),
41 GetDefaultIcon(),
42 this));
43 }
44 }
45
~ExtensionActionIconFactory()46 ExtensionActionIconFactory::~ExtensionActionIconFactory() {}
47
48 // extensions::IconImage::Observer overrides.
OnExtensionIconImageChanged(IconImage * image)49 void ExtensionActionIconFactory::OnExtensionIconImageChanged(IconImage* image) {
50 if (observer_)
51 observer_->OnIconUpdated();
52 }
53
GetIcon(int tab_id)54 gfx::Image ExtensionActionIconFactory::GetIcon(int tab_id) {
55 gfx::ImageSkia base_icon = GetBaseIconFromAction(tab_id);
56 return gfx::Image(base_icon);
57 }
58
GetBaseIconFromAction(int tab_id)59 gfx::ImageSkia ExtensionActionIconFactory::GetBaseIconFromAction(int tab_id) {
60 gfx::ImageSkia icon = action_->GetExplicitlySetIcon(tab_id);
61 if (!icon.isNull())
62 return icon;
63
64 if (default_icon_)
65 return default_icon_->image_skia();
66
67 return GetDefaultIcon();
68 }
69