diff options
19 files changed, 378 insertions, 262 deletions
diff --git a/chrome/browser/extensions/extension_browsertest.cc b/chrome/browser/extensions/extension_browsertest.cc index a644eb7..bbadbfa4 100644 --- a/chrome/browser/extensions/extension_browsertest.cc +++ b/chrome/browser/extensions/extension_browsertest.cc @@ -175,9 +175,6 @@ class MockAbortExtensionInstallUI : public ExtensionInstallUI { MessageLoopForUI::current()->Quit(); } - virtual void ConfirmUninstall(Delegate* delegate, - const Extension* extension) {} - virtual void OnInstallSuccess(const Extension* extension, SkBitmap* icon) {} virtual void OnInstallFailure(const std::string& error) {} diff --git a/chrome/browser/extensions/extension_context_menu_model.cc b/chrome/browser/extensions/extension_context_menu_model.cc index 3dd09b2..b4f215a 100644 --- a/chrome/browser/extensions/extension_context_menu_model.cc +++ b/chrome/browser/extensions/extension_context_menu_model.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 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. @@ -10,9 +10,9 @@ #include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" +#include "chrome/common/extensions/extension.h" #include "chrome/common/extensions/extension_action.h" #include "chrome/common/extensions/extension_constants.h" -#include "chrome/common/extensions/extension.h" #include "chrome/common/pref_names.h" #include "chrome/common/url_constants.h" #include "grit/generated_resources.h" @@ -127,9 +127,9 @@ void ExtensionContextMenuModel::ExecuteCommand(int command_id) { break; } case UNINSTALL: { - AddRef(); // Balanced in InstallUIProceed and InstallUIAbort. - install_ui_.reset(new ExtensionInstallUI(profile_)); - install_ui_->ConfirmUninstall(this, extension); + AddRef(); // Balanced in Accepted() and Canceled() + extension_uninstall_dialog_.reset(new ExtensionUninstallDialog(profile_)); + extension_uninstall_dialog_->ConfirmUninstall(this, extension); break; } case MANAGE: { @@ -147,14 +147,14 @@ void ExtensionContextMenuModel::ExecuteCommand(int command_id) { } } -void ExtensionContextMenuModel::InstallUIProceed() { +void ExtensionContextMenuModel::ExtensionDialogAccepted() { if (GetExtension()) profile_->GetExtensionService()->UninstallExtension(extension_id_, false); Release(); } -void ExtensionContextMenuModel::InstallUIAbort() { +void ExtensionContextMenuModel::ExtensionDialogCanceled() { Release(); } diff --git a/chrome/browser/extensions/extension_context_menu_model.h b/chrome/browser/extensions/extension_context_menu_model.h index 34f8e48..9dbf8556 100644 --- a/chrome/browser/extensions/extension_context_menu_model.h +++ b/chrome/browser/extensions/extension_context_menu_model.h @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 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. @@ -8,7 +8,7 @@ #include <string> -#include "chrome/browser/extensions/extension_install_ui.h" +#include "chrome/browser/extensions/extension_uninstall_dialog.h" #include "ui/base/models/simple_menu_model.h" class Browser; @@ -22,7 +22,7 @@ class ExtensionContextMenuModel : public base::RefCounted<ExtensionContextMenuModel>, public ui::SimpleMenuModel, public ui::SimpleMenuModel::Delegate, - public ExtensionInstallUI::Delegate { + public ExtensionUninstallDialog::Delegate { public: // Delegate to handle showing an ExtensionAction popup. class PopupDelegate { @@ -51,9 +51,9 @@ class ExtensionContextMenuModel ui::Accelerator* accelerator); virtual void ExecuteCommand(int command_id); - // ExtensionInstallUI::Delegate overrides. - virtual void InstallUIProceed(); - virtual void InstallUIAbort(); + // ExtensionUninstallDialog::Delegate: + virtual void ExtensionDialogAccepted(); + virtual void ExtensionDialogCanceled(); private: void InitCommonCommands(); @@ -75,8 +75,8 @@ class ExtensionContextMenuModel // The delegate which handles the 'inspect popup' menu command (or NULL). PopupDelegate* delegate_; - // Keeps track of the extension install UI. - scoped_ptr<ExtensionInstallUI> install_ui_; + // Keeps track of the extension uninstall dialog. + scoped_ptr<ExtensionUninstallDialog> extension_uninstall_dialog_; DISALLOW_COPY_AND_ASSIGN(ExtensionContextMenuModel); }; diff --git a/chrome/browser/extensions/extension_install_dialog.h b/chrome/browser/extensions/extension_install_dialog.h deleted file mode 100644 index 3ac7df1..0000000 --- a/chrome/browser/extensions/extension_install_dialog.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) 2011 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. - -#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_DIALOG_H_ -#define CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_DIALOG_H_ -#pragma once - -#include "chrome/browser/extensions/extension_install_ui.h" - -class Extension; -class Profile; -class SkBitmap; - -// The implementations of this function are platform-specific. -void ShowExtensionInstallDialog(Profile* profile, - ExtensionInstallUI::Delegate* delegate, - const Extension* extension, - SkBitmap* icon, - ExtensionInstallUI::PromptType type); - -#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_DIALOG_H_ diff --git a/chrome/browser/extensions/extension_install_ui.cc b/chrome/browser/extensions/extension_install_ui.cc index 41dacd3..026b338 100644 --- a/chrome/browser/extensions/extension_install_ui.cc +++ b/chrome/browser/extensions/extension_install_ui.cc @@ -14,7 +14,6 @@ #include "base/utf_string_conversions.h" #include "chrome/browser/browser_list.h" #include "chrome/browser/browser_window.h" -#include "chrome/browser/extensions/extension_install_dialog.h" #include "chrome/browser/extensions/extension_install_dialog2.h" #include "chrome/browser/extensions/theme_installed_infobar_delegate.h" #include "chrome/browser/platform_util.h" @@ -44,25 +43,21 @@ // static const int ExtensionInstallUI::kTitleIds[NUM_PROMPT_TYPES] = { IDS_EXTENSION_INSTALL_PROMPT_TITLE, - IDS_EXTENSION_UNINSTALL_PROMPT_TITLE, IDS_EXTENSION_RE_ENABLE_PROMPT_TITLE }; // static const int ExtensionInstallUI::kHeadingIds[NUM_PROMPT_TYPES] = { IDS_EXTENSION_INSTALL_PROMPT_HEADING, - IDS_EXTENSION_UNINSTALL_PROMPT_HEADING, IDS_EXTENSION_RE_ENABLE_PROMPT_HEADING }; // static const int ExtensionInstallUI::kButtonIds[NUM_PROMPT_TYPES] = { IDS_EXTENSION_PROMPT_INSTALL_BUTTON, - IDS_EXTENSION_PROMPT_UNINSTALL_BUTTON, IDS_EXTENSION_PROMPT_RE_ENABLE_BUTTON }; // static const int ExtensionInstallUI::kWarningIds[NUM_PROMPT_TYPES] = { IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO, - 0, // No warning label when uninstalling. IDS_EXTENSION_PROMPT_WILL_NOW_HAVE_ACCESS_TO }; @@ -140,15 +135,6 @@ void ExtensionInstallUI::ConfirmInstall(Delegate* delegate, ShowConfirmation(INSTALL_PROMPT); } -void ExtensionInstallUI::ConfirmUninstall(Delegate* delegate, - const Extension* extension) { - DCHECK(ui_loop_ == MessageLoop::current()); - extension_ = extension; - delegate_ = delegate; - - ShowConfirmation(UNINSTALL_PROMPT); -} - void ExtensionInstallUI::ConfirmReEnable(Delegate* delegate, const Extension* extension) { DCHECK(ui_loop_ == MessageLoop::current()); @@ -230,11 +216,6 @@ void ExtensionInstallUI::OnImageLoaded( profile_, delegate_, extension_, &icon_, warnings, prompt_type_); break; } - case UNINSTALL_PROMPT: { - ShowExtensionInstallDialog( - profile_, delegate_, extension_, &icon_, UNINSTALL_PROMPT); - break; - } default: NOTREACHED() << "Unknown message"; break; diff --git a/chrome/browser/extensions/extension_install_ui.h b/chrome/browser/extensions/extension_install_ui.h index 0b4b968..ed7dea4 100644 --- a/chrome/browser/extensions/extension_install_ui.h +++ b/chrome/browser/extensions/extension_install_ui.h @@ -27,7 +27,6 @@ class ExtensionInstallUI : public ImageLoadingTracker::Observer { enum PromptType { UNSET_PROMPT_TYPE = -1, INSTALL_PROMPT = 0, - UNINSTALL_PROMPT, RE_ENABLE_PROMPT, NUM_PROMPT_TYPES }; @@ -40,12 +39,10 @@ class ExtensionInstallUI : public ImageLoadingTracker::Observer { class Delegate { public: - // We call this method after ConfirmInstall()/ConfirmUninstall() to signal - // that the installation/uninstallation should continue. + // We call this method to signal that the installation should continue. virtual void InstallUIProceed() = 0; - // We call this method after ConfirmInstall()/ConfirmUninstall() to signal - // that the installation/uninstallation should stop. + // We call this method to signal that the installation should stop. virtual void InstallUIAbort() = 0; protected: @@ -53,23 +50,14 @@ class ExtensionInstallUI : public ImageLoadingTracker::Observer { }; explicit ExtensionInstallUI(Profile* profile); - virtual ~ExtensionInstallUI(); // This is called by the installer to verify whether the installation should // proceed. This is declared virtual for testing. // - // We *MUST* eventually call either Proceed() or Abort() - // on |delegate|. + // We *MUST* eventually call either Proceed() or Abort() on |delegate|. virtual void ConfirmInstall(Delegate* delegate, const Extension* extension); - // This is called by the extensions management page to verify whether the - // uninstallation should proceed. This is declared virtual for testing. - // - // We *MUST* eventually call either Proceed() or Abort() - // on |delegate|. - virtual void ConfirmUninstall(Delegate* delegate, const Extension* extension); - // This is called by the app handler launcher to verify whether the app // should be re-enabled. This is declared virtual for testing. // @@ -82,7 +70,7 @@ class ExtensionInstallUI : public ImageLoadingTracker::Observer { // Installation failed. This is declared virtual for testing. virtual void OnInstallFailure(const std::string& error); - // ImageLoadingTracker::Observer overrides. + // ImageLoadingTracker::Observer: virtual void OnImageLoaded( SkBitmap* image, const ExtensionResource& resource, int index); @@ -109,8 +97,10 @@ class ExtensionInstallUI : public ImageLoadingTracker::Observer { // Returns the delegate to control the browser's info bar. This is // within its own function due to its platform-specific nature. static InfoBarDelegate* GetNewThemeInstalledInfoBarDelegate( - TabContents* tab_contents, const Extension* new_theme, - const std::string& previous_theme_id, bool previous_use_system_theme); + TabContents* tab_contents, + const Extension* new_theme, + const std::string& previous_theme_id, + bool previous_use_system_theme); Profile* profile_; MessageLoop* ui_loop_; @@ -119,11 +109,17 @@ class ExtensionInstallUI : public ImageLoadingTracker::Observer { std::string previous_theme_id_; bool previous_use_system_theme_; - SkBitmap icon_; // The extensions installation icon. - const Extension* extension_; // The extension we are showing the UI for. - Delegate* delegate_; // The delegate we will call Proceed/Abort on after - // confirmation UI. - PromptType prompt_type_; // The type of prompt we are going to show. + // The extensions installation icon. + SkBitmap icon_; + + // The extension we are showing the UI for. + const Extension* extension_; + + // The delegate we will call Proceed/Abort on after confirmation UI. + Delegate* delegate_; + + // The type of prompt we are going to show. + PromptType prompt_type_; // Keeps track of extension images being loaded on the File thread for the // purpose of showing the install UI. diff --git a/chrome/browser/extensions/extension_uninstall_dialog.cc b/chrome/browser/extensions/extension_uninstall_dialog.cc new file mode 100644 index 0000000..ef1e3bc --- /dev/null +++ b/chrome/browser/extensions/extension_uninstall_dialog.cc @@ -0,0 +1,68 @@ +// Copyright (c) 2011 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. + +#include "chrome/browser/extensions/extension_uninstall_dialog.h" + +#include "base/logging.h" +#include "base/message_loop.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/common/extensions/extension.h" +#include "chrome/common/extensions/extension_icon_set.h" +#include "chrome/common/extensions/extension_resource.h" +#include "grit/generated_resources.h" +#include "grit/theme_resources.h" +#include "ui/base/resource/resource_bundle.h" + +// Size of extension icon in top left of dialog. +static const int kIconSize = 69; + +ExtensionUninstallDialog::ExtensionUninstallDialog(Profile* profile) + : profile_(profile), + ui_loop_(MessageLoop::current()), + delegate_(NULL), + extension_(NULL), + ALLOW_THIS_IN_INITIALIZER_LIST(tracker_(this)) { +} + +ExtensionUninstallDialog::~ExtensionUninstallDialog() { +} + +void ExtensionUninstallDialog::ConfirmUninstall(Delegate* delegate, + const Extension* extension) { + DCHECK(ui_loop_ == MessageLoop::current()); + delegate_ = delegate; + extension_ = extension; + + ExtensionResource image = + extension_->GetIconResource(Extension::EXTENSION_ICON_LARGE, + ExtensionIconSet::MATCH_EXACTLY); + // Load the image asynchronously. The response will be sent to OnImageLoaded. + tracker_.LoadImage(extension_, image, + gfx::Size(kIconSize, kIconSize), + ImageLoadingTracker::DONT_CACHE); +} + +void ExtensionUninstallDialog::SetIcon(SkBitmap* image) { + if (image) + icon_ = *image; + else + icon_ = SkBitmap(); + if (icon_.empty()) { + if (extension_->is_app()) { + icon_ = *ResourceBundle::GetSharedInstance().GetBitmapNamed( + IDR_APP_DEFAULT_ICON); + } else { + icon_ = *ResourceBundle::GetSharedInstance().GetBitmapNamed( + IDR_EXTENSION_DEFAULT_ICON); + } + } +} + +void ExtensionUninstallDialog::OnImageLoaded(SkBitmap* image, + const ExtensionResource& resource, + int index) { + SetIcon(image); + + Show(profile_, delegate_, extension_, &icon_); +} diff --git a/chrome/browser/extensions/extension_uninstall_dialog.h b/chrome/browser/extensions/extension_uninstall_dialog.h new file mode 100644 index 0000000..086f219 --- /dev/null +++ b/chrome/browser/extensions/extension_uninstall_dialog.h @@ -0,0 +1,76 @@ +// Copyright (c) 2011 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. + +#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_UNINSTALL_DIALOG_H_ +#define CHROME_BROWSER_EXTENSIONS_EXTENSION_UNINSTALL_DIALOG_H_ +#pragma once + +#include "base/basictypes.h" +#include "base/compiler_specific.h" +#include "chrome/browser/extensions/image_loading_tracker.h" +#include "third_party/skia/include/core/SkBitmap.h" + +class MessageLoop; +class Profile; + +class ExtensionUninstallDialog : public ImageLoadingTracker::Observer { + public: + class Delegate { + public: + // We call this method to signal that the uninstallation should continue. + virtual void ExtensionDialogAccepted() = 0; + + // We call this method to signal that the uninstallation should stop. + virtual void ExtensionDialogCanceled() = 0; + + protected: + virtual ~Delegate() {} + }; + + explicit ExtensionUninstallDialog(Profile* profile); + virtual ~ExtensionUninstallDialog(); + + // This is called by the extensions management page to verify whether the + // uninstallation should proceed. + // Starts the process of showing a confirmation UI, which is split into two. + // 1) Set off a 'load icon' task. + // 2) Handle the load icon response and show the UI (OnImageLoaded). + void ConfirmUninstall(Delegate* delegate, const Extension* extension); + + private: + // Creates an appropriate ExtensionUninstallDialog for the platform. + static void Show(Profile* profile, + Delegate* delegate, + const Extension* extension, + SkBitmap* icon); + + // Sets the icon that will be used in any UI. If |icon| is NULL, or contains + // an empty bitmap, then a default icon will be used instead. + void SetIcon(SkBitmap* icon); + + // ImageLoadingTracker::Observer: + virtual void OnImageLoaded(SkBitmap* image, + const ExtensionResource& resource, + int index) OVERRIDE; + + Profile* profile_; + MessageLoop* ui_loop_; + + // The delegate we will call Accepted/Canceled on after confirmation UI. + Delegate* delegate_; + + // The extension we are showing the UI for. + const Extension* extension_; + + // Keeps track of extension images being loaded on the File thread for the + // purpose of showing the install UI. + ImageLoadingTracker tracker_; + + // The extensions icon. + SkBitmap icon_; + + DISALLOW_COPY_AND_ASSIGN(ExtensionUninstallDialog); +}; + +#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_UNINSTALL_DIALOG_H_ diff --git a/chrome/browser/extensions/extensions_ui.cc b/chrome/browser/extensions/extensions_ui.cc index f56c732..8bdbdc4 100644 --- a/chrome/browser/extensions/extensions_ui.cc +++ b/chrome/browser/extensions/extensions_ui.cc @@ -318,10 +318,12 @@ void ExtensionsDOMHandler::RegisterForNotifications() { NotificationService::AllSources()); } -ExtensionInstallUI* ExtensionsDOMHandler::GetExtensionInstallUI() { - if (!install_ui_.get()) - install_ui_.reset(new ExtensionInstallUI(web_ui_->GetProfile())); - return install_ui_.get(); +ExtensionUninstallDialog* ExtensionsDOMHandler::GetExtensionUninstallDialog() { + if (!extension_uninstall_dialog_.get()) { + extension_uninstall_dialog_.reset( + new ExtensionUninstallDialog(web_ui_->GetProfile())); + } + return extension_uninstall_dialog_.get(); } void ExtensionsDOMHandler::HandleToggleDeveloperMode(const ListValue* args) { @@ -429,10 +431,10 @@ void ExtensionsDOMHandler::HandleUninstallMessage(const ListValue* args) { extension_id_prompting_ = extension_id; - GetExtensionInstallUI()->ConfirmUninstall(this, extension); + GetExtensionUninstallDialog()->ConfirmUninstall(this, extension); } -void ExtensionsDOMHandler::InstallUIProceed() { +void ExtensionsDOMHandler::ExtensionDialogAccepted() { DCHECK(!extension_id_prompting_.empty()); bool was_terminated = false; @@ -459,7 +461,7 @@ void ExtensionsDOMHandler::InstallUIProceed() { HandleRequestExtensionsData(NULL); } -void ExtensionsDOMHandler::InstallUIAbort() { +void ExtensionsDOMHandler::ExtensionDialogCanceled() { extension_id_prompting_ = ""; } diff --git a/chrome/browser/extensions/extensions_ui.h b/chrome/browser/extensions/extensions_ui.h index 37a9d58..76c5080 100644 --- a/chrome/browser/extensions/extensions_ui.h +++ b/chrome/browser/extensions/extensions_ui.h @@ -10,7 +10,7 @@ #include <vector> #include "base/scoped_ptr.h" -#include "chrome/browser/extensions/extension_install_ui.h" +#include "chrome/browser/extensions/extension_uninstall_dialog.h" #include "chrome/browser/extensions/pack_extension_job.h" #include "chrome/browser/ui/shell_dialogs.h" #include "chrome/browser/ui/webui/chrome_url_data_manager.h" @@ -60,14 +60,12 @@ class ExtensionsUIHTMLSource : public ChromeURLDataManager::DataSource { }; // The handler for JavaScript messages related to the "extensions" view. -class ExtensionsDOMHandler - : public WebUIMessageHandler, - public NotificationObserver, - public PackExtensionJob::Client, - public SelectFileDialog::Listener, - public ExtensionInstallUI::Delegate { +class ExtensionsDOMHandler : public WebUIMessageHandler, + public NotificationObserver, + public PackExtensionJob::Client, + public SelectFileDialog::Listener, + public ExtensionUninstallDialog::Delegate { public: - explicit ExtensionsDOMHandler(ExtensionService* extension_service); virtual ~ExtensionsDOMHandler(); @@ -94,10 +92,9 @@ class ExtensionsDOMHandler virtual void OnPackFailure(const std::string& error); - // ExtensionInstallUI::Delegate implementation, used for receiving - // notification about uninstall confirmation dialog selections. - virtual void InstallUIProceed(); - virtual void InstallUIAbort(); + // ExtensionUninstallDialog::Delegate: + virtual void ExtensionDialogAccepted(); + virtual void ExtensionDialogCanceled(); private: // Callback for "requestExtensionsData" message. @@ -174,9 +171,9 @@ class ExtensionsDOMHandler const Extension* extension, std::vector<ExtensionPage> *result); - // Returns the ExtensionInstallUI object for this class, creating it if + // Returns the ExtensionUninstallDialog object for this class, creating it if // needed. - ExtensionInstallUI* GetExtensionInstallUI(); + ExtensionUninstallDialog* GetExtensionUninstallDialog(); // Our model. scoped_refptr<ExtensionService> extensions_service_; @@ -187,9 +184,8 @@ class ExtensionsDOMHandler // Used to package the extension. scoped_refptr<PackExtensionJob> pack_job_; - // Used to show confirmation UI for uninstalling/enabling extensions in - // incognito mode. - scoped_ptr<ExtensionInstallUI> install_ui_; + // Used to show confirmation UI for uninstalling extensions in incognito mode. + scoped_ptr<ExtensionUninstallDialog> extension_uninstall_dialog_; // The id of the extension we are prompting the user about. std::string extension_id_prompting_; diff --git a/chrome/browser/ui/cocoa/extensions/extension_action_context_menu.mm b/chrome/browser/ui/cocoa/extensions/extension_action_context_menu.mm index 442aac0..a01b98e 100644 --- a/chrome/browser/ui/cocoa/extensions/extension_action_context_menu.mm +++ b/chrome/browser/ui/cocoa/extensions/extension_action_context_menu.mm @@ -7,9 +7,9 @@ #include "base/sys_string_conversions.h" #include "base/task.h" #include "chrome/browser/browser_list.h" -#include "chrome/browser/extensions/extension_install_ui.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_tabs_module.h" +#include "chrome/browser/extensions/extension_uninstall_dialog.h" #include "chrome/browser/prefs/pref_change_registrar.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/profiles/profile.h" @@ -35,24 +35,23 @@ // A class that loads the extension icon on the I/O thread before showing the // confirmation dialog to uninstall the given extension. // Also acts as the extension's UI delegate in order to display the dialog. -class AsyncUninstaller : public ExtensionInstallUI::Delegate { +class AsyncUninstaller : public ExtensionUninstallDialog::Delegate { public: AsyncUninstaller(const Extension* extension, Profile* profile) : extension_(extension), profile_(profile) { - install_ui_.reset(new ExtensionInstallUI(profile)); - install_ui_->ConfirmUninstall(this, extension_); + extension_uninstall_dialog_.reset(new ExtensionUninstallDialog(profile)); + extension_uninstall_dialog_->ConfirmUninstall(this, extension_); } ~AsyncUninstaller() {} - // Overridden by ExtensionInstallUI::Delegate. - virtual void InstallUIProceed() { + // ExtensionUninstallDialog::Delegate: + virtual void ExtensionDialogAccepted() { profile_->GetExtensionService()-> UninstallExtension(extension_->id(), false); } - - virtual void InstallUIAbort() {} + virtual void ExtensionDialogCanceled() {} private: // The extension that we're loading the icon for. Weak. @@ -61,7 +60,7 @@ class AsyncUninstaller : public ExtensionInstallUI::Delegate { // The current profile. Weak. Profile* profile_; - scoped_ptr<ExtensionInstallUI> install_ui_; + scoped_ptr<ExtensionUninstallDialog> extension_uninstall_dialog_; DISALLOW_COPY_AND_ASSIGN(AsyncUninstaller); }; diff --git a/chrome/browser/ui/cocoa/extensions/extension_install_prompt.mm b/chrome/browser/ui/cocoa/extensions/extension_uninstall_dialog_cocoa.mm index 21bb634..825fc9dcc 100644 --- a/chrome/browser/ui/cocoa/extensions/extension_install_prompt.mm +++ b/chrome/browser/ui/cocoa/extensions/extension_uninstall_dialog_cocoa.mm @@ -8,7 +8,7 @@ #include "base/sys_string_conversions.h" #include "base/utf_string_conversions.h" -#include "chrome/browser/extensions/extension_install_dialog.h" +#include "chrome/browser/extensions/extension_uninstall_dialog.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/extensions/extension.h" #include "grit/chromium_strings.h" @@ -17,15 +17,16 @@ #include "ui/base/l10n/l10n_util_mac.h" #include "ui/base/resource/resource_bundle.h" -void ShowExtensionInstallDialog(Profile* profile, - ExtensionInstallUI::Delegate* delegate, - const Extension* extension, - SkBitmap* icon, - ExtensionInstallUI::PromptType type) { +// static +void ExtensionUninstallDialog::Show( + Profile* profile, + ExtensionUninstallDialog::Delegate* delegate, + const Extension* extension, + SkBitmap* icon) { NSAlert* alert = [[[NSAlert alloc] init] autorelease]; NSButton* continueButton = [alert addButtonWithTitle:l10n_util::GetNSString( - ExtensionInstallUI::kButtonIds[type])]; + IDS_EXTENSION_PROMPT_UNINSTALL_BUTTON)]; // Clear the key equivalent (currently 'Return') because cancel is the default // button. [continueButton setKeyEquivalent:@""]; @@ -35,14 +36,13 @@ void ShowExtensionInstallDialog(Profile* profile, [cancelButton setKeyEquivalent:@"\r"]; [alert setMessageText:l10n_util::GetNSStringF( - ExtensionInstallUI::kHeadingIds[type], + IDS_EXTENSION_UNINSTALL_PROMPT_HEADING, UTF8ToUTF16(extension->name()))]; [alert setAlertStyle:NSWarningAlertStyle]; [alert setIcon:gfx::SkBitmapToNSImage(*icon)]; - if ([alert runModal] == NSAlertFirstButtonReturn) { - delegate->InstallUIProceed(); - } else { - delegate->InstallUIAbort(); - } + if ([alert runModal] == NSAlertFirstButtonReturn) + delegate->ExtensionDialogAccepted(); + else + delegate->ExtensionDialogCanceled(); } diff --git a/chrome/browser/ui/gtk/extensions/extension_install_prompt_gtk.cc b/chrome/browser/ui/gtk/extensions/extension_uninstall_dialog_gtk.cc index 9c56341..eb3eea3 100644 --- a/chrome/browser/ui/gtk/extensions/extension_install_prompt_gtk.cc +++ b/chrome/browser/ui/gtk/extensions/extension_uninstall_dialog_gtk.cc @@ -11,7 +11,7 @@ #include "base/utf_string_conversions.h" #include "chrome/browser/browser_list.h" #include "chrome/browser/browser_window.h" -#include "chrome/browser/extensions/extension_install_dialog.h" +#include "chrome/browser/extensions/extension_uninstall_dialog.h" #include "chrome/browser/ui/gtk/browser_window_gtk.h" #include "chrome/browser/ui/gtk/gtk_util.h" #include "chrome/common/extensions/extension.h" @@ -27,31 +27,27 @@ namespace { const int kPanelHorizMargin = 13; void OnResponse(GtkWidget* dialog, int response_id, - ExtensionInstallUI::Delegate* delegate) { - if (response_id == GTK_RESPONSE_ACCEPT) { - delegate->InstallUIProceed(); - } else { - delegate->InstallUIAbort(); - } + ExtensionUninstallDialog::Delegate* delegate) { + if (response_id == GTK_RESPONSE_ACCEPT) + delegate->ExtensionDialogAccepted(); + else + delegate->ExtensionDialogCanceled(); gtk_widget_destroy(dialog); } -void ShowInstallPromptDialog(GtkWindow* parent, - SkBitmap* skia_icon, - const Extension* extension, - ExtensionInstallUI::Delegate *delegate, - ExtensionInstallUI::PromptType type) { +void ShowUninstallDialogGtk(GtkWindow* parent, + SkBitmap* skia_icon, + const Extension* extension, + ExtensionUninstallDialog::Delegate *delegate) { // Build the dialog. - int title_id = ExtensionInstallUI::kTitleIds[type]; - int button_id = ExtensionInstallUI::kButtonIds[type]; GtkWidget* dialog = gtk_dialog_new_with_buttons( - l10n_util::GetStringUTF8(title_id).c_str(), + l10n_util::GetStringUTF8(IDS_EXTENSION_UNINSTALL_PROMPT_TITLE).c_str(), parent, GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_CLOSE, - l10n_util::GetStringUTF8(button_id).c_str(), + l10n_util::GetStringUTF8(IDS_EXTENSION_PROMPT_UNINSTALL_BUTTON).c_str(), GTK_RESPONSE_ACCEPT, NULL); gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); @@ -73,9 +69,8 @@ void ShowInstallPromptDialog(GtkWindow* parent, GtkWidget* right_column_area = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(icon_hbox), right_column_area, TRUE, TRUE, 0); - int heading_id = ExtensionInstallUI::kHeadingIds[type]; std::string heading_text = l10n_util::GetStringFUTF8( - heading_id, UTF8ToUTF16(extension->name())); + IDS_EXTENSION_UNINSTALL_PROMPT_HEADING, UTF8ToUTF16(extension->name())); GtkWidget* heading_label = gtk_label_new(heading_text.c_str()); gtk_misc_set_alignment(GTK_MISC(heading_label), 0.0, 0.5); gtk_box_pack_start(GTK_BOX(right_column_area), heading_label, TRUE, TRUE, 0); @@ -87,24 +82,24 @@ void ShowInstallPromptDialog(GtkWindow* parent, } // namespace -void ShowExtensionInstallDialog(Profile* profile, - ExtensionInstallUI::Delegate* delegate, - const Extension* extension, - SkBitmap* icon, - ExtensionInstallUI::PromptType type) { +// static +void ExtensionUninstallDialog::Show( + Profile* profile, + ExtensionUninstallDialog::Delegate* delegate, + const Extension* extension, + SkBitmap* icon) { Browser* browser = BrowserList::GetLastActiveWithProfile(profile); if (!browser) { - delegate->InstallUIAbort(); + delegate->ExtensionDialogCanceled(); return; } BrowserWindowGtk* browser_window = static_cast<BrowserWindowGtk*>( browser->window()); if (!browser_window) { - delegate->InstallUIAbort(); + delegate->ExtensionDialogCanceled(); return; } - ShowInstallPromptDialog(browser_window->window(), icon, extension, delegate, - type); + ShowUninstallDialogGtk(browser_window->window(), icon, extension, delegate); } diff --git a/chrome/browser/ui/views/extensions/extension_install_prompt.cc b/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view.cc index d29a243..00ed3f5 100644 --- a/chrome/browser/ui/views/extensions/extension_install_prompt.cc +++ b/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view.cc @@ -2,12 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "base/file_util.h" +#include "base/basictypes.h" +#include "base/compiler_specific.h" #include "base/string_util.h" #include "base/utf_string_conversions.h" #include "chrome/browser/browser_list.h" #include "chrome/browser/browser_window.h" -#include "chrome/browser/extensions/extension_install_dialog.h" +#include "chrome/browser/extensions/extension_uninstall_dialog.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/views/window.h" #include "chrome/common/extensions/extension.h" @@ -27,14 +28,14 @@ namespace { const int kRightColumnWidth = 210; const int kIconSize = 69; -// Implements the extension installation prompt for Windows. -class InstallDialogContent : public views::View, public views::DialogDelegate { +class ExtensionUninstallDialogView : public views::View, + public views::DialogDelegate { public: - InstallDialogContent(ExtensionInstallUI::Delegate* delegate, - const Extension* extension, - SkBitmap* icon, - ExtensionInstallUI::PromptType type) - : delegate_(delegate), icon_(NULL), type_(type) { + ExtensionUninstallDialogView(ExtensionUninstallDialog::Delegate* delegate, + const Extension* extension, + SkBitmap* icon) + : delegate_(delegate), + icon_(NULL) { // Scale down to icon size, but allow smaller icons (don't scale up). gfx::Size size(icon->width(), icon->height()); if (size.width() > kIconSize || size.height() > kIconSize) @@ -45,7 +46,7 @@ class InstallDialogContent : public views::View, public views::DialogDelegate { AddChildView(icon_); heading_ = new views::Label(UTF16ToWide( - l10n_util::GetStringFUTF16(ExtensionInstallUI::kHeadingIds[type_], + l10n_util::GetStringFUTF16(IDS_EXTENSION_UNINSTALL_PROMPT_HEADING, UTF8ToUTF16(extension->name())))); heading_->SetMultiLine(true); heading_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); @@ -53,13 +54,14 @@ class InstallDialogContent : public views::View, public views::DialogDelegate { } private: - // DialogDelegate + // views::DialogDelegate: virtual std::wstring GetDialogButtonLabel( - MessageBoxFlags::DialogButton button) const { + MessageBoxFlags::DialogButton button) const OVERRIDE { switch (button) { case MessageBoxFlags::DIALOGBUTTON_OK: return UTF16ToWide( - l10n_util::GetStringUTF16(ExtensionInstallUI::kButtonIds[type_])); + l10n_util::GetStringUTF16( + IDS_EXTENSION_PROMPT_UNINSTALL_BUTTON)); case MessageBoxFlags::DIALOGBUTTON_CANCEL: return UTF16ToWide(l10n_util::GetStringUTF16(IDS_CANCEL)); default: @@ -68,30 +70,30 @@ class InstallDialogContent : public views::View, public views::DialogDelegate { } } - virtual int GetDefaultDialogButton() const { + virtual int GetDefaultDialogButton() const OVERRIDE { return MessageBoxFlags::DIALOGBUTTON_CANCEL; } - virtual bool Accept() { - delegate_->InstallUIProceed(); + virtual bool Accept() OVERRIDE { + delegate_->ExtensionDialogAccepted(); return true; } - virtual bool Cancel() { - delegate_->InstallUIAbort(); + virtual bool Cancel() OVERRIDE { + delegate_->ExtensionDialogCanceled(); return true; } - // WindowDelegate - virtual bool IsModal() const { return true; } - virtual std::wstring GetWindowTitle() const { + // views::WindowDelegate: + virtual bool IsModal() const OVERRIDE { return true; } + virtual std::wstring GetWindowTitle() const OVERRIDE { return UTF16ToWide( - l10n_util::GetStringUTF16(ExtensionInstallUI::kTitleIds[type_])); + l10n_util::GetStringUTF16(IDS_EXTENSION_UNINSTALL_PROMPT_TITLE)); } virtual views::View* GetContentsView() { return this; } - // View - virtual gfx::Size GetPreferredSize() { + // views::View: + virtual gfx::Size GetPreferredSize() OVERRIDE { int width = kRightColumnWidth; width += kIconSize; width += views::kPanelHorizMargin * 3; @@ -103,7 +105,7 @@ class InstallDialogContent : public views::View, public views::DialogDelegate { std::max(height, kIconSize + views::kPanelVertMargin * 2)); } - virtual void Layout() { + virtual void Layout() OVERRIDE { int x = views::kPanelHorizMargin; int y = views::kPanelVertMargin; @@ -129,33 +131,33 @@ class InstallDialogContent : public views::View, public views::DialogDelegate { } } - ExtensionInstallUI::Delegate* delegate_; + ExtensionUninstallDialog::Delegate* delegate_; views::ImageView* icon_; views::Label* heading_; - ExtensionInstallUI::PromptType type_; - DISALLOW_COPY_AND_ASSIGN(InstallDialogContent); + DISALLOW_COPY_AND_ASSIGN(ExtensionUninstallDialogView); }; } // namespace -void ShowExtensionInstallDialog(Profile* profile, - ExtensionInstallUI::Delegate* delegate, - const Extension* extension, - SkBitmap* icon, - ExtensionInstallUI::PromptType type) { +// static +void ExtensionUninstallDialog::Show( + Profile* profile, + ExtensionUninstallDialog::Delegate* delegate, + const Extension* extension, + SkBitmap* icon) { Browser* browser = BrowserList::GetLastActiveWithProfile(profile); if (!browser) { - delegate->InstallUIAbort(); + delegate->ExtensionDialogCanceled(); return; } BrowserWindow* window = browser->window(); if (!window) { - delegate->InstallUIAbort(); + delegate->ExtensionDialogCanceled(); return; } browser::CreateViewsWindow(window->GetNativeHandle(), gfx::Rect(), - new InstallDialogContent(delegate, extension, icon, type))->Show(); + new ExtensionUninstallDialogView(delegate, extension, icon))->Show(); } diff --git a/chrome/browser/ui/webui/app_launcher_handler.cc b/chrome/browser/ui/webui/app_launcher_handler.cc index efba15b..7e1d8d3 100644 --- a/chrome/browser/ui/webui/app_launcher_handler.cc +++ b/chrome/browser/ui/webui/app_launcher_handler.cc @@ -64,7 +64,6 @@ extension_misc::AppLaunchBucket ParseLaunchSource( AppLauncherHandler::AppLauncherHandler(ExtensionService* extension_service) : extensions_service_(extension_service), - extension_prompt_type_(ExtensionInstallUI::UNSET_PROMPT_TYPE), promo_active_(false), ignore_changes_(false) { } @@ -407,8 +406,7 @@ void AppLauncherHandler::HandleUninstallApp(const ListValue* args) { return; // Only one prompt at a time. extension_id_prompting_ = extension_id; - extension_prompt_type_ = ExtensionInstallUI::UNINSTALL_PROMPT; - GetExtensionInstallUI()->ConfirmUninstall(this, extension); + GetExtensionUninstallDialog()->ConfirmUninstall(this, extension); } void AppLauncherHandler::HandleHideAppsPromo(const ListValue* args) { @@ -539,11 +537,32 @@ void AppLauncherHandler::PromptToEnableApp(const std::string& extension_id) { return; // Only one prompt at a time. extension_id_prompting_ = extension_id; - extension_prompt_type_ = ExtensionInstallUI::RE_ENABLE_PROMPT; GetExtensionInstallUI()->ConfirmReEnable(this, extension); } +void AppLauncherHandler::ExtensionDialogAccepted() { + // Do the uninstall work here. + DCHECK(!extension_id_prompting_.empty()); + + // The extension can be uninstalled in another window while the UI was + // showing. Do nothing in that case. + const Extension* extension = + extensions_service_->GetExtensionById(extension_id_prompting_, true); + if (!extension) + return; + + extensions_service_->UninstallExtension(extension_id_prompting_, + false /* external_uninstall */); + + extension_id_prompting_ = ""; +} + +void AppLauncherHandler::ExtensionDialogCanceled() { + extension_id_prompting_ = ""; +} + void AppLauncherHandler::InstallUIProceed() { + // Do the re-enable work here. DCHECK(!extension_id_prompting_.empty()); // The extension can be uninstalled in another window while the UI was @@ -553,38 +572,36 @@ void AppLauncherHandler::InstallUIProceed() { if (!extension) return; - switch (extension_prompt_type_) { - case ExtensionInstallUI::UNINSTALL_PROMPT: - extensions_service_->UninstallExtension(extension_id_prompting_, - false /* external_uninstall */); - break; - case ExtensionInstallUI::RE_ENABLE_PROMPT: { - extensions_service_->GrantPermissionsAndEnableExtension(extension); - - // We bounce this off the NTP so the browser can update the apps icon. - // If we don't launch the app asynchronously, then the app's disabled - // icon disappears but isn't replaced by the enabled icon, making a poor - // visual experience. - StringValue* app_id = Value::CreateStringValue(extension->id()); - web_ui_->CallJavascriptFunction("launchAppAfterEnable", *app_id); - break; - } - default: - NOTREACHED(); - break; - } + extensions_service_->GrantPermissionsAndEnableExtension(extension); + + // We bounce this off the NTP so the browser can update the apps icon. + // If we don't launch the app asynchronously, then the app's disabled + // icon disappears but isn't replaced by the enabled icon, making a poor + // visual experience. + StringValue* app_id = Value::CreateStringValue(extension->id()); + web_ui_->CallJavascriptFunction("launchAppAfterEnable", *app_id); extension_id_prompting_ = ""; } void AppLauncherHandler::InstallUIAbort() { - extension_id_prompting_ = ""; + ExtensionDialogCanceled(); +} + +ExtensionUninstallDialog* AppLauncherHandler::GetExtensionUninstallDialog() { + if (!extension_uninstall_dialog_.get()) { + extension_uninstall_dialog_.reset( + new ExtensionUninstallDialog(web_ui_->GetProfile())); + } + return extension_uninstall_dialog_.get(); } ExtensionInstallUI* AppLauncherHandler::GetExtensionInstallUI() { - if (!install_ui_.get()) - install_ui_.reset(new ExtensionInstallUI(web_ui_->GetProfile())); - return install_ui_.get(); + if (!extension_install_ui_.get()) { + extension_install_ui_.reset( + new ExtensionInstallUI(web_ui_->GetProfile())); + } + return extension_install_ui_.get(); } void AppLauncherHandler::UninstallDefaultApps() { diff --git a/chrome/browser/ui/webui/app_launcher_handler.h b/chrome/browser/ui/webui/app_launcher_handler.h index 18dc1c5..ade5dd8 100644 --- a/chrome/browser/ui/webui/app_launcher_handler.h +++ b/chrome/browser/ui/webui/app_launcher_handler.h @@ -8,6 +8,7 @@ #include "base/scoped_ptr.h" #include "chrome/browser/extensions/extension_install_ui.h" +#include "chrome/browser/extensions/extension_uninstall_dialog.h" #include "chrome/browser/prefs/pref_change_registrar.h" #include "chrome/common/extensions/extension.h" #include "chrome/common/extensions/extension_constants.h" @@ -22,14 +23,14 @@ class PrefChangeRegistrar; class Profile; namespace gfx { - class Rect; +class Rect; } // The handler for Javascript messages related to the "apps" view. -class AppLauncherHandler - : public WebUIMessageHandler, - public ExtensionInstallUI::Delegate, - public NotificationObserver { +class AppLauncherHandler : public WebUIMessageHandler, + public ExtensionUninstallDialog::Delegate, + public ExtensionInstallUI::Delegate, + public NotificationObserver { public: explicit AppLauncherHandler(ExtensionService* extension_service); virtual ~AppLauncherHandler(); @@ -97,11 +98,18 @@ class AppLauncherHandler // Prompts the user to re-enable the app for |extension_id|. void PromptToEnableApp(const std::string& extension_id); - // ExtensionInstallUI::Delegate implementation, used for receiving - // notification about uninstall confirmation dialog selections. + // ExtensionUninstallDialog::Delegate: + virtual void ExtensionDialogAccepted(); + virtual void ExtensionDialogCanceled(); + + // ExtensionInstallUI::Delegate: virtual void InstallUIProceed(); virtual void InstallUIAbort(); + // Returns the ExtensionUninstallDialog object for this class, creating it if + // needed. + ExtensionUninstallDialog* GetExtensionUninstallDialog(); + // Returns the ExtensionInstallUI object for this class, creating it if // needed. ExtensionInstallUI* GetExtensionInstallUI(); @@ -119,16 +127,15 @@ class AppLauncherHandler // Monitor extension preference changes so that the Web UI can be notified. PrefChangeRegistrar pref_change_registrar_; - // Used to show confirmation UI for uninstalling/enabling extensions in - // incognito mode. - scoped_ptr<ExtensionInstallUI> install_ui_; + // Used to show confirmation UI for uninstalling extensions in incognito mode. + scoped_ptr<ExtensionUninstallDialog> extension_uninstall_dialog_; + + // Used to show confirmation UI for enabling extensions in incognito mode. + scoped_ptr<ExtensionInstallUI> extension_install_ui_; // The id of the extension we are prompting the user about. std::string extension_id_prompting_; - // The type of prompt we are showing the user. - ExtensionInstallUI::PromptType extension_prompt_type_; - // Whether the promo is currently being shown. bool promo_active_; diff --git a/chrome/browser/ui/webui/options/extension_settings_handler.cc b/chrome/browser/ui/webui/options/extension_settings_handler.cc index ae6145b..9c1557b 100644 --- a/chrome/browser/ui/webui/options/extension_settings_handler.cc +++ b/chrome/browser/ui/webui/options/extension_settings_handler.cc @@ -434,10 +434,12 @@ ExtensionResource ExtensionsDOMHandler::PickExtensionIcon( ExtensionIconSet::MATCH_BIGGER); } -ExtensionInstallUI* ExtensionsDOMHandler::GetExtensionInstallUI() { - if (!install_ui_.get()) - install_ui_.reset(new ExtensionInstallUI(web_ui_->GetProfile())); - return install_ui_.get(); +ExtensionUninstallDialog* ExtensionsDOMHandler::GetExtensionUninstallDialog() { + if (!extension_uninstall_dialog_.get()) { + extension_uninstall_dialog_.reset( + new ExtensionUninstallDialog(web_ui_->GetProfile())); + } + return extension_uninstall_dialog_.get(); } void ExtensionsDOMHandler::HandleToggleDeveloperMode(const ListValue* args) { @@ -545,10 +547,10 @@ void ExtensionsDOMHandler::HandleUninstallMessage(const ListValue* args) { extension_id_prompting_ = extension_id; - GetExtensionInstallUI()->ConfirmUninstall(this, extension); + GetExtensionUninstallDialog()->ConfirmUninstall(this, extension); } -void ExtensionsDOMHandler::InstallUIProceed() { +void ExtensionsDOMHandler::ExtensionDialogAccepted() { DCHECK(!extension_id_prompting_.empty()); bool was_terminated = false; @@ -575,7 +577,7 @@ void ExtensionsDOMHandler::InstallUIProceed() { HandleRequestExtensionsData(NULL); } -void ExtensionsDOMHandler::InstallUIAbort() { +void ExtensionsDOMHandler::ExtensionDialogCanceled() { extension_id_prompting_ = ""; } diff --git a/chrome/browser/ui/webui/options/extension_settings_handler.h b/chrome/browser/ui/webui/options/extension_settings_handler.h index 1ef59ce..9afc90b 100644 --- a/chrome/browser/ui/webui/options/extension_settings_handler.h +++ b/chrome/browser/ui/webui/options/extension_settings_handler.h @@ -10,7 +10,7 @@ #include <vector> #include "base/scoped_ptr.h" -#include "chrome/browser/extensions/extension_install_ui.h" +#include "chrome/browser/extensions/extension_uninstall_dialog.h" #include "chrome/browser/extensions/pack_extension_job.h" #include "chrome/browser/ui/shell_dialogs.h" #include "chrome/browser/ui/webui/chrome_url_data_manager.h" @@ -34,8 +34,10 @@ class UserScript; struct ExtensionPage { ExtensionPage(const GURL& url, int render_process_id, int render_view_id, bool incognito) - : url(url), render_process_id(render_process_id), - render_view_id(render_view_id), incognito(incognito) {} + : url(url), + render_process_id(render_process_id), + render_view_id(render_view_id), + incognito(incognito) {} GURL url; int render_process_id; int render_view_id; @@ -60,12 +62,11 @@ class ExtensionsUIHTMLSource : public ChromeURLDataManager::DataSource { }; // The handler for JavaScript messages related to the "extensions" view. -class ExtensionsDOMHandler - : public WebUIMessageHandler, - public NotificationObserver, - public PackExtensionJob::Client, - public SelectFileDialog::Listener, - public ExtensionInstallUI::Delegate { +class ExtensionsDOMHandler : public WebUIMessageHandler, + public NotificationObserver, + public PackExtensionJob::Client, + public SelectFileDialog::Listener, + public ExtensionUninstallDialog::Delegate { public: // Helper class that loads the icons for the extensions in the management UI. @@ -128,10 +129,9 @@ class ExtensionsDOMHandler virtual void OnPackFailure(const std::string& error); - // ExtensionInstallUI::Delegate implementation, used for receiving - // notification about uninstall confirmation dialog selections. - virtual void InstallUIProceed(); - virtual void InstallUIAbort(); + // ExtensionUninstallDialog::Delegate: + virtual void ExtensionDialogAccepted(); + virtual void ExtensionDialogCanceled(); private: // Callback for "requestExtensionsData" message. @@ -219,9 +219,9 @@ class ExtensionsDOMHandler // Called on the UI thread. void OnIconsLoaded(DictionaryValue* json_data); - // Returns the ExtensionInstallUI object for this class, creating it if + // Returns the ExtensionUninstallDialog object for this class, creating it if // needed. - ExtensionInstallUI* GetExtensionInstallUI(); + ExtensionUninstallDialog* GetExtensionUninstallDialog(); // Our model. scoped_refptr<ExtensionService> extensions_service_; @@ -235,9 +235,8 @@ class ExtensionsDOMHandler // Used to load icons asynchronously on the file thread. scoped_refptr<IconLoader> icon_loader_; - // Used to show confirmation UI for uninstalling/enabling extensions in - // incognito mode. - scoped_ptr<ExtensionInstallUI> install_ui_; + // Used to show confirmation UI for uninstalling extensions in incognito mode. + scoped_ptr<ExtensionUninstallDialog> extension_uninstall_dialog_; // The id of the extension we are prompting the user about. std::string extension_id_prompting_; diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index 2e45fe4..b7b2972 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -941,7 +941,6 @@ 'browser/extensions/extension_infobar_module_constants.h', 'browser/extensions/extension_input_api.cc', 'browser/extensions/extension_input_api.h', - 'browser/extensions/extension_install_dialog.h', 'browser/extensions/extension_install_dialog2.h', 'browser/extensions/extension_install_ui.cc', 'browser/extensions/extension_install_ui.h', @@ -1007,6 +1006,8 @@ 'browser/extensions/extension_tts_api_util.cc', 'browser/extensions/extension_tts_api_util.h', 'browser/extensions/extension_tts_api_win.cc', + 'browser/extensions/extension_uninstall_dialog.cc', + 'browser/extensions/extension_uninstall_dialog.h', 'browser/extensions/extension_updater.cc', 'browser/extensions/extension_updater.h', 'browser/extensions/extension_web_ui.cc', @@ -2230,7 +2231,6 @@ 'browser/ui/cocoa/extensions/extension_action_context_menu.mm', 'browser/ui/cocoa/extensions/extension_infobar_controller.h', 'browser/ui/cocoa/extensions/extension_infobar_controller.mm', - 'browser/ui/cocoa/extensions/extension_install_prompt.mm', 'browser/ui/cocoa/extensions/extension_install_prompt_controller.h', 'browser/ui/cocoa/extensions/extension_install_prompt_controller.mm', 'browser/ui/cocoa/extensions/extension_installed_bubble_bridge.mm', @@ -2238,6 +2238,7 @@ 'browser/ui/cocoa/extensions/extension_installed_bubble_controller.mm', 'browser/ui/cocoa/extensions/extension_popup_controller.h', 'browser/ui/cocoa/extensions/extension_popup_controller.mm', + 'browser/ui/cocoa/extensions/extension_uninstall_dialog_cocoa.mm', 'browser/ui/cocoa/extensions/extension_view_mac.h', 'browser/ui/cocoa/extensions/extension_view_mac.mm', 'browser/ui/cocoa/external_protocol_dialog.h', @@ -2556,11 +2557,11 @@ 'browser/ui/gtk/edit_search_engine_dialog.cc', 'browser/ui/gtk/edit_search_engine_dialog.h', 'browser/ui/gtk/extensions/extension_install_prompt2_gtk.cc', - 'browser/ui/gtk/extensions/extension_install_prompt_gtk.cc', 'browser/ui/gtk/extensions/extension_installed_bubble_gtk.cc', 'browser/ui/gtk/extensions/extension_installed_bubble_gtk.h', 'browser/ui/gtk/extensions/extension_popup_gtk.cc', 'browser/ui/gtk/extensions/extension_popup_gtk.h', + 'browser/ui/gtk/extensions/extension_uninstall_dialog_gtk.cc', 'browser/ui/gtk/extensions/extension_view_gtk.cc', 'browser/ui/gtk/extensions/extension_view_gtk.h', 'browser/ui/gtk/external_protocol_dialog_gtk.cc', @@ -2850,12 +2851,12 @@ 'browser/ui/views/extensions/browser_action_drag_data.h', 'browser/ui/views/extensions/browser_action_overflow_menu_controller.cc', 'browser/ui/views/extensions/browser_action_overflow_menu_controller.h', - 'browser/ui/views/extensions/extension_install_prompt.cc', 'browser/ui/views/extensions/extension_install_prompt2.cc', 'browser/ui/views/extensions/extension_installed_bubble.cc', 'browser/ui/views/extensions/extension_installed_bubble.h', 'browser/ui/views/extensions/extension_popup.cc', 'browser/ui/views/extensions/extension_popup.h', + 'browser/ui/views/extensions/extension_uninstall_dialog_view.cc', 'browser/ui/views/extensions/extension_view.cc', 'browser/ui/views/extensions/extension_view.h', 'browser/ui/views/external_protocol_dialog.cc', @@ -3815,12 +3816,12 @@ ['include', '^browser/ui/views/extensions/browser_action_drag_data.h'], ['include', '^browser/ui/views/extensions/browser_action_overflow_menu_controller.cc'], ['include', '^browser/ui/views/extensions/browser_action_overflow_menu_controller.h'], - ['include', '^browser/ui/views/extensions/extension_install_prompt.cc'], ['include', '^browser/ui/views/extensions/extension_install_prompt2.cc'], ['include', '^browser/ui/views/extensions/extension_installed_bubble.cc'], ['include', '^browser/ui/views/extensions/extension_installed_bubble.h'], ['include', '^browser/ui/views/extensions/extension_popup.cc'], ['include', '^browser/ui/views/extensions/extension_popup.h'], + ['include', '^browser/ui/views/extensions/extension_uninstall_dialog_view.cc'], ['include', '^browser/ui/views/extensions/extension_view.cc'], ['include', '^browser/ui/views/extensions/extension_view.h'], ['include', '^browser/ui/views/find_bar_host.cc'], |