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. 18static const int kIconSize = 69; 19 20ExtensionUninstallDialog::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 28ExtensionUninstallDialog::~ExtensionUninstallDialog() { 29} 30 31void 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 46void 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 62void ExtensionUninstallDialog::OnImageLoaded(SkBitmap* image, 63 const ExtensionResource& resource, 64 int index) { 65 SetIcon(image); 66 67 Show(profile_, delegate_, extension_, &icon_); 68} 69