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 15using extensions::Extension; 16using extensions::IconImage; 17 18namespace { 19 20gfx::ImageSkia GetDefaultIcon() { 21 return *ui::ResourceBundle::GetSharedInstance().GetImageNamed( 22 IDR_EXTENSIONS_FAVICON).ToImageSkia(); 23} 24 25} // namespace 26 27ExtensionActionIconFactory::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 46ExtensionActionIconFactory::~ExtensionActionIconFactory() {} 47 48// extensions::IconImage::Observer overrides. 49void ExtensionActionIconFactory::OnExtensionIconImageChanged(IconImage* image) { 50 if (observer_) 51 observer_->OnIconUpdated(); 52} 53 54gfx::Image ExtensionActionIconFactory::GetIcon(int tab_id) { 55 gfx::ImageSkia base_icon = GetBaseIconFromAction(tab_id); 56 return gfx::Image(base_icon); 57} 58 59gfx::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