| Index: chrome/browser/extensions/extension_install_ui.cc
|
| ===================================================================
|
| --- chrome/browser/extensions/extension_install_ui.cc (revision 42429)
|
| +++ chrome/browser/extensions/extension_install_ui.cc (working copy)
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| @@ -127,16 +127,22 @@
|
| } // namespace
|
|
|
| ExtensionInstallUI::ExtensionInstallUI(Profile* profile)
|
| - : profile_(profile), ui_loop_(MessageLoop::current())
|
| + : profile_(profile),
|
| + ui_loop_(MessageLoop::current()),
|
| + extension_(NULL),
|
| + delegate_(NULL),
|
| + prompt_type_(NUM_PROMPT_TYPES),
|
| + ALLOW_THIS_IN_INITIALIZER_LIST(tracker_(this))
|
| #if defined(TOOLKIT_GTK)
|
| - ,previous_use_gtk_theme_(false)
|
| + , previous_use_gtk_theme_(false)
|
| #endif
|
| {}
|
|
|
| void ExtensionInstallUI::ConfirmInstall(Delegate* delegate,
|
| - Extension* extension,
|
| - SkBitmap* install_icon) {
|
| + Extension* extension) {
|
| DCHECK(ui_loop_ == MessageLoop::current());
|
| + extension_ = extension;
|
| + delegate_ = delegate;
|
|
|
| // We special-case themes to not show any confirm UI. Instead they are
|
| // immediately installed, and then we show an infobar (see OnInstallSuccess)
|
| @@ -148,7 +154,7 @@
|
| previous_theme_id_ = previous_theme->id();
|
|
|
| #if defined(TOOLKIT_GTK)
|
| - // On linux, we also need to take the user's system settings into account
|
| + // On Linux, we also need to take the user's system settings into account
|
| // to undo theme installation.
|
| previous_use_gtk_theme_ =
|
| GtkThemeProvider::GetFrom(profile_)->UseGtkTheme();
|
| @@ -158,53 +164,25 @@
|
| return;
|
| }
|
|
|
| - if (!install_icon) {
|
| - install_icon = ResourceBundle::GetSharedInstance().GetBitmapNamed(
|
| - IDR_EXTENSION_DEFAULT_ICON);
|
| - }
|
| - icon_ = *install_icon;
|
| -
|
| - NotificationService* service = NotificationService::current();
|
| - service->Notify(NotificationType::EXTENSION_WILL_SHOW_CONFIRM_DIALOG,
|
| - Source<ExtensionInstallUI>(this),
|
| - NotificationService::NoDetails());
|
| -
|
| - ShowExtensionInstallUIPromptImpl(
|
| - profile_, delegate, extension, &icon_,
|
| - WideToUTF16Hack(GetInstallWarning(extension)), INSTALL_PROMPT);
|
| + ShowConfirmation(INSTALL_PROMPT);
|
| }
|
|
|
| void ExtensionInstallUI::ConfirmUninstall(Delegate* delegate,
|
| - Extension* extension,
|
| - SkBitmap* icon) {
|
| + Extension* extension) {
|
| DCHECK(ui_loop_ == MessageLoop::current());
|
| + extension_ = extension;
|
| + delegate_ = delegate;
|
|
|
| - if (!icon) {
|
| - icon = ResourceBundle::GetSharedInstance().GetBitmapNamed(
|
| - IDR_EXTENSION_DEFAULT_ICON);
|
| - }
|
| -
|
| - string16 message =
|
| - l10n_util::GetStringUTF16(IDS_EXTENSION_UNINSTALL_CONFIRMATION);
|
| - ShowExtensionInstallUIPromptImpl(profile_, delegate, extension, icon,
|
| - message, UNINSTALL_PROMPT);
|
| + ShowConfirmation(UNINSTALL_PROMPT);
|
| }
|
|
|
| void ExtensionInstallUI::ConfirmEnableIncognito(Delegate* delegate,
|
| - Extension* extension,
|
| - SkBitmap* icon) {
|
| + Extension* extension) {
|
| DCHECK(ui_loop_ == MessageLoop::current());
|
| + extension_ = extension;
|
| + delegate_ = delegate;
|
|
|
| - if (!icon) {
|
| - icon = ResourceBundle::GetSharedInstance().GetBitmapNamed(
|
| - IDR_EXTENSION_DEFAULT_ICON);
|
| - }
|
| -
|
| - string16 message =
|
| - l10n_util::GetStringFUTF16(IDS_EXTENSION_PROMPT_WARNING_INCOGNITO,
|
| - l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
|
| - ShowExtensionInstallUIPromptImpl(profile_, delegate, extension, icon,
|
| - message, ENABLE_INCOGNITO_PROMPT);
|
| + ShowConfirmation(ENABLE_INCOGNITO_PROMPT);
|
| }
|
|
|
| void ExtensionInstallUI::OnInstallSuccess(Extension* extension) {
|
| @@ -213,7 +191,7 @@
|
| return;
|
| }
|
|
|
| - // GetLastActiveWithProfile will fail on the build bots. This needs to
|
| + // GetLastActiveWithProfile will fail on the build bots. This needs to be
|
| // implemented differently if any test is created which depends on
|
| // ExtensionInstalledBubble showing.
|
| #if defined(TOOLKIT_VIEWS)
|
| @@ -258,6 +236,50 @@
|
| ShowThemeInfoBar(extension);
|
| }
|
|
|
| +void ExtensionInstallUI::OnImageLoaded(
|
| + SkBitmap* image, ExtensionResource resource, int index) {
|
| + if (image)
|
| + icon_ = *image;
|
| + else
|
| + icon_ = SkBitmap();
|
| + if (icon_.empty()) {
|
| + icon_ = *ResourceBundle::GetSharedInstance().GetBitmapNamed(
|
| + IDR_EXTENSION_DEFAULT_ICON);
|
| + }
|
| +
|
| + switch (prompt_type_) {
|
| + case INSTALL_PROMPT: {
|
| + NotificationService* service = NotificationService::current();
|
| + service->Notify(NotificationType::EXTENSION_WILL_SHOW_CONFIRM_DIALOG,
|
| + Source<ExtensionInstallUI>(this),
|
| + NotificationService::NoDetails());
|
| +
|
| + ShowExtensionInstallUIPromptImpl(
|
| + profile_, delegate_, extension_, &icon_,
|
| + WideToUTF16Hack(GetInstallWarning(extension_)), INSTALL_PROMPT);
|
| + break;
|
| + }
|
| + case UNINSTALL_PROMPT: {
|
| + string16 message =
|
| + l10n_util::GetStringUTF16(IDS_EXTENSION_UNINSTALL_CONFIRMATION);
|
| + ShowExtensionInstallUIPromptImpl(profile_, delegate_, extension_, &icon_,
|
| + message, UNINSTALL_PROMPT);
|
| + break;
|
| + }
|
| + case ENABLE_INCOGNITO_PROMPT: {
|
| + string16 message =
|
| + l10n_util::GetStringFUTF16(IDS_EXTENSION_PROMPT_WARNING_INCOGNITO,
|
| + l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
|
| + ShowExtensionInstallUIPromptImpl(profile_, delegate_, extension_, &icon_,
|
| + message, ENABLE_INCOGNITO_PROMPT);
|
| + break;
|
| + }
|
| + default:
|
| + NOTREACHED() << "Unknown message";
|
| + break;
|
| + }
|
| +}
|
| +
|
| void ExtensionInstallUI::ShowThemeInfoBar(Extension* new_theme) {
|
| if (!new_theme->IsTheme())
|
| return;
|
| @@ -290,6 +312,16 @@
|
| tab_contents->AddInfoBar(new_delegate);
|
| }
|
|
|
| +void ExtensionInstallUI::ShowConfirmation(PromptType prompt_type) {
|
| + // Load the image asynchronously. For the response, check OnImageLoaded.
|
| + prompt_type_ = prompt_type;
|
| + ExtensionResource image =
|
| + extension_->GetIconPath(Extension::EXTENSION_ICON_LARGE);
|
| + tracker_.LoadImage(image,
|
| + gfx::Size(Extension::EXTENSION_ICON_LARGE,
|
| + Extension::EXTENSION_ICON_LARGE));
|
| +}
|
| +
|
| #if defined(OS_MACOSX)
|
| void ExtensionInstallUI::ShowGenericExtensionInstalledInfoBar(
|
| Extension* new_extension) {
|
|
|