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