Home | History | Annotate | Download | only in extensions
      1 // Copyright (c) 2011 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_uninstall_dialog.h"
      6 
      7 #include "base/logging.h"
      8 #include "base/message_loop.h"
      9 #include "chrome/browser/profiles/profile.h"
     10 #include "chrome/common/extensions/extension.h"
     11 #include "chrome/common/extensions/extension_icon_set.h"
     12 #include "chrome/common/extensions/extension_resource.h"
     13 #include "grit/generated_resources.h"
     14 #include "grit/theme_resources.h"
     15 #include "ui/base/resource/resource_bundle.h"
     16 
     17 // Size of extension icon in top left of dialog.
     18 static const int kIconSize = 69;
     19 
     20 ExtensionUninstallDialog::ExtensionUninstallDialog(Profile* profile)
     21     : profile_(profile),
     22       ui_loop_(MessageLoop::current()),
     23       delegate_(NULL),
     24       extension_(NULL),
     25       ALLOW_THIS_IN_INITIALIZER_LIST(tracker_(this)) {
     26 }
     27 
     28 ExtensionUninstallDialog::~ExtensionUninstallDialog() {
     29 }
     30 
     31 void ExtensionUninstallDialog::ConfirmUninstall(Delegate* delegate,
     32                                                 const Extension* extension) {
     33   DCHECK(ui_loop_ == MessageLoop::current());
     34   delegate_ = delegate;
     35   extension_ = extension;
     36 
     37   ExtensionResource image =
     38       extension_->GetIconResource(Extension::EXTENSION_ICON_LARGE,
     39                                   ExtensionIconSet::MATCH_EXACTLY);
     40   // Load the image asynchronously. The response will be sent to OnImageLoaded.
     41   tracker_.LoadImage(extension_, image,
     42                      gfx::Size(kIconSize, kIconSize),
     43                      ImageLoadingTracker::DONT_CACHE);
     44 }
     45 
     46 void ExtensionUninstallDialog::SetIcon(SkBitmap* image) {
     47   if (image)
     48     icon_ = *image;
     49   else
     50     icon_ = SkBitmap();
     51   if (icon_.empty()) {
     52     if (extension_->is_app()) {
     53       icon_ = *ResourceBundle::GetSharedInstance().GetBitmapNamed(
     54           IDR_APP_DEFAULT_ICON);
     55     } else {
     56       icon_ = *ResourceBundle::GetSharedInstance().GetBitmapNamed(
     57           IDR_EXTENSION_DEFAULT_ICON);
     58     }
     59   }
     60 }
     61 
     62 void ExtensionUninstallDialog::OnImageLoaded(SkBitmap* image,
     63                                              const ExtensionResource& resource,
     64                                              int index) {
     65   SetIcon(image);
     66 
     67   Show(profile_, delegate_, extension_, &icon_);
     68 }
     69