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