summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/extensions/extension_browsertest.cc3
-rw-r--r--chrome/browser/extensions/extension_context_menu_model.cc14
-rw-r--r--chrome/browser/extensions/extension_context_menu_model.h16
-rw-r--r--chrome/browser/extensions/extension_install_dialog.h22
-rw-r--r--chrome/browser/extensions/extension_install_ui.cc19
-rw-r--r--chrome/browser/extensions/extension_install_ui.h42
-rw-r--r--chrome/browser/extensions/extension_uninstall_dialog.cc68
-rw-r--r--chrome/browser/extensions/extension_uninstall_dialog.h76
-rw-r--r--chrome/browser/extensions/extensions_ui.cc16
-rw-r--r--chrome/browser/extensions/extensions_ui.h30
-rw-r--r--chrome/browser/ui/cocoa/extensions/extension_action_context_menu.mm17
-rw-r--r--chrome/browser/ui/cocoa/extensions/extension_uninstall_dialog_cocoa.mm (renamed from chrome/browser/ui/cocoa/extensions/extension_install_prompt.mm)26
-rw-r--r--chrome/browser/ui/gtk/extensions/extension_uninstall_dialog_gtk.cc (renamed from chrome/browser/ui/gtk/extensions/extension_install_prompt_gtk.cc)49
-rw-r--r--chrome/browser/ui/views/extensions/extension_uninstall_dialog_view.cc (renamed from chrome/browser/ui/views/extensions/extension_install_prompt.cc)74
-rw-r--r--chrome/browser/ui/webui/app_launcher_handler.cc73
-rw-r--r--chrome/browser/ui/webui/app_launcher_handler.h33
-rw-r--r--chrome/browser/ui/webui/options/extension_settings_handler.cc16
-rw-r--r--chrome/browser/ui/webui/options/extension_settings_handler.h35
-rw-r--r--chrome/chrome_browser.gypi11
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'],