summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/extensions/api/management/management_api_browsertest.cc106
-rw-r--r--chrome/browser/extensions/api/management/management_api_unittest.cc113
-rw-r--r--chrome/browser/extensions/api/management/management_apitest.cc7
-rw-r--r--chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc14
-rw-r--r--chrome/browser/extensions/extension_disabled_ui_browsertest.cc5
-rw-r--r--chrome/browser/extensions/extension_install_prompt.cc16
-rw-r--r--chrome/browser/extensions/extension_install_prompt.h9
-rw-r--r--chrome/browser/extensions/extension_reenabler_unittest.cc15
-rw-r--r--chrome/browser/extensions/extension_service_unittest.cc16
-rw-r--r--chrome/browser/extensions/extension_storage_monitor_browsertest.cc5
-rw-r--r--chrome/browser/extensions/extension_uninstall_dialog.cc24
-rw-r--r--chrome/browser/extensions/extension_uninstall_dialog.h20
-rw-r--r--chrome/browser/extensions/unpacked_installer.cc10
-rw-r--r--chrome/browser/extensions/webstore_inline_installer_browsertest.cc6
-rw-r--r--chrome/browser/extensions/webstore_installer_test.cc10
-rw-r--r--chrome/browser/extensions/webstore_installer_test.h5
-rw-r--r--chrome/browser/extensions/webstore_startup_installer_browsertest.cc28
-rw-r--r--chrome/browser/infobars/infobars_browsertest.cc5
-rw-r--r--chrome/browser/policy/policy_browsertest.cc5
-rw-r--r--chrome/browser/ui/webui/extensions/extension_settings_browsertest.cc4
-rw-r--r--chrome/browser/ui/webui/extensions/extension_settings_browsertest.h3
-rw-r--r--extensions/browser/api/management/management_api.cc51
-rw-r--r--extensions/browser/api/management/management_api.h2
-rw-r--r--extensions/browser/api/runtime/runtime_apitest.cc5
-rw-r--r--extensions/browser/extension_dialog_auto_confirm.cc29
-rw-r--r--extensions/browser/extension_dialog_auto_confirm.h33
-rw-r--r--extensions/extensions.gypi2
27 files changed, 264 insertions, 284 deletions
diff --git a/chrome/browser/extensions/api/management/management_api_browsertest.cc b/chrome/browser/extensions/api/management/management_api_browsertest.cc
index 26d7a19..22e2f27 100644
--- a/chrome/browser/extensions/api/management/management_api_browsertest.cc
+++ b/chrome/browser/extensions/api/management/management_api_browsertest.cc
@@ -8,7 +8,6 @@
#include "base/strings/stringprintf.h"
#include "chrome/browser/extensions/extension_browsertest.h"
#include "chrome/browser/extensions/extension_function_test_utils.h"
-#include "chrome/browser/extensions/extension_install_prompt.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
@@ -19,6 +18,7 @@
#include "content/public/test/test_utils.h"
#include "extensions/browser/api/management/management_api.h"
#include "extensions/browser/api/management/management_api_constants.h"
+#include "extensions/browser/extension_dialog_auto_confirm.h"
#include "extensions/browser/extension_host.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_system.h"
@@ -110,51 +110,6 @@ IN_PROC_BROWSER_TEST_F(ExtensionManagementApiBrowserTest,
}
IN_PROC_BROWSER_TEST_F(ExtensionManagementApiBrowserTest,
- UninstallWithConfirmDialog) {
- ExtensionService* service = ExtensionSystem::Get(browser()->profile())->
- extension_service();
-
- // Install an extension.
- const Extension* extension = InstallExtension(
- test_data_dir_.AppendASCII("api_test/management/enabled_extension"), 1);
- ASSERT_TRUE(extension);
-
- const std::string id = extension->id();
-
- scoped_refptr<Extension> empty_extension(test_util::CreateEmptyExtension());
- // Uninstall, then cancel via the confirm dialog.
- scoped_refptr<ManagementUninstallFunction> uninstall_function(
- new ManagementUninstallFunction());
- uninstall_function->set_extension(empty_extension.get());
- uninstall_function->set_user_gesture(true);
- ManagementUninstallFunction::SetAutoConfirmForTest(false);
-
- EXPECT_TRUE(MatchPattern(
- util::RunFunctionAndReturnError(
- uninstall_function.get(),
- base::StringPrintf("[\"%s\", {\"showConfirmDialog\": true}]",
- id.c_str()),
- browser()),
- keys::kUninstallCanceledError));
-
- // Make sure the extension wasn't uninstalled.
- EXPECT_TRUE(service->GetExtensionById(id, false) != NULL);
-
- // Uninstall, then accept via the confirm dialog.
- uninstall_function = new ManagementUninstallFunction();
- uninstall_function->set_extension(empty_extension.get());
- ManagementUninstallFunction::SetAutoConfirmForTest(true);
- uninstall_function->set_user_gesture(true);
- util::RunFunctionAndReturnSingleResult(
- uninstall_function.get(),
- base::StringPrintf("[\"%s\", {\"showConfirmDialog\": true}]", id.c_str()),
- browser());
-
- // Make sure the extension was uninstalled.
- EXPECT_TRUE(service->GetExtensionById(id, false) == NULL);
-}
-
-IN_PROC_BROWSER_TEST_F(ExtensionManagementApiBrowserTest,
CreateAppShortcutConfirmDialog) {
const Extension* app = InstallExtension(
test_data_dir_.AppendASCII("api_test/management/packaged_app"), 1);
@@ -299,31 +254,40 @@ IN_PROC_BROWSER_TEST_F(ExtensionManagementApiEscalationTest,
// Expect an error about no gesture.
SetEnabled(true, false, keys::kGestureNeededForEscalationError);
- // Expect an error that user cancelled the dialog.
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::CANCEL;
- SetEnabled(true, true, keys::kUserDidNotReEnableError);
-
- // This should succeed when user accepts dialog. We must wait for the process
- // to connect *and* for the channel to finish initializing before trying to
- // crash it. (NOTIFICATION_RENDERER_PROCESS_CREATED does not wait for the
- // latter and can cause KillProcess to fail on Windows.)
- content::WindowedNotificationObserver observer(
- extensions::NOTIFICATION_EXTENSION_HOST_CREATED,
- content::NotificationService::AllSources());
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::ACCEPT;
- SetEnabled(true, true, std::string());
- observer.Wait();
-
- // Crash the extension. Mock a reload by disabling and then enabling. The
- // extension should be reloaded and enabled.
- ASSERT_TRUE(CrashEnabledExtension(kId));
- SetEnabled(false, true, std::string());
- SetEnabled(true, true, std::string());
- const Extension* extension = ExtensionSystem::Get(browser()->profile())
- ->extension_service()->GetExtensionById(kId, false);
- EXPECT_TRUE(extension);
+ {
+ // Expect an error that user cancelled the dialog.
+ ScopedTestDialogAutoConfirm auto_confirm(
+ ScopedTestDialogAutoConfirm::CANCEL);
+ SetEnabled(true, true, keys::kUserDidNotReEnableError);
+ }
+
+ {
+ // This should succeed when user accepts dialog. We must wait for the
+ // process to connect *and* for the channel to finish initializing before
+ // trying to crash it. (NOTIFICATION_RENDERER_PROCESS_CREATED does not wait
+ // for the latter and can cause KillProcess to fail on Windows.)
+ content::WindowedNotificationObserver observer(
+ extensions::NOTIFICATION_EXTENSION_HOST_CREATED,
+ content::NotificationService::AllSources());
+ ScopedTestDialogAutoConfirm auto_confirm(
+ ScopedTestDialogAutoConfirm::ACCEPT);
+ SetEnabled(true, true, std::string());
+ observer.Wait();
+ }
+
+ {
+ // Crash the extension. Mock a reload by disabling and then enabling. The
+ // extension should be reloaded and enabled.
+ ScopedTestDialogAutoConfirm auto_confirm(
+ ScopedTestDialogAutoConfirm::ACCEPT);
+ ASSERT_TRUE(CrashEnabledExtension(kId));
+ SetEnabled(false, true, std::string());
+ SetEnabled(true, true, std::string());
+ const Extension* extension = ExtensionSystem::Get(browser()->profile())
+ ->extension_service()
+ ->GetExtensionById(kId, false);
+ EXPECT_TRUE(extension);
+ }
}
} // namespace extensions
diff --git a/chrome/browser/extensions/api/management/management_api_unittest.cc b/chrome/browser/extensions/api/management/management_api_unittest.cc
index e783a7f..4d0a4d9 100644
--- a/chrome/browser/extensions/api/management/management_api_unittest.cc
+++ b/chrome/browser/extensions/api/management/management_api_unittest.cc
@@ -13,6 +13,7 @@
#include "extensions/browser/api/management/management_api.h"
#include "extensions/browser/api/management/management_api_constants.h"
#include "extensions/browser/event_router_factory.h"
+#include "extensions/browser/extension_dialog_auto_confirm.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
@@ -156,60 +157,70 @@ TEST_F(ManagementApiUnitTest, ManagementUninstall) {
uninstall_args.AppendString(extension->id());
// Auto-accept any uninstalls.
- ManagementUninstallFunctionBase::SetAutoConfirmForTest(true);
-
- // Uninstall requires a user gesture, so this should fail.
- scoped_refptr<UIThreadExtensionFunction> function(
- new ManagementUninstallFunction());
- EXPECT_FALSE(RunFunction(function, uninstall_args));
- EXPECT_EQ(std::string(constants::kGestureNeededForUninstallError),
- function->GetError());
-
- ExtensionFunction::ScopedUserGestureForTests scoped_user_gesture;
-
- function = new ManagementUninstallFunction();
- EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_id));
- EXPECT_TRUE(RunFunction(function, uninstall_args)) << function->GetError();
- // The extension should be uninstalled.
- EXPECT_FALSE(registry()->GetExtensionById(
- extension_id, ExtensionRegistry::EVERYTHING));
+ {
+ ScopedTestDialogAutoConfirm auto_confirm(
+ ScopedTestDialogAutoConfirm::ACCEPT);
+
+ // Uninstall requires a user gesture, so this should fail.
+ scoped_refptr<UIThreadExtensionFunction> function(
+ new ManagementUninstallFunction());
+ EXPECT_FALSE(RunFunction(function, uninstall_args));
+ EXPECT_EQ(std::string(constants::kGestureNeededForUninstallError),
+ function->GetError());
+
+ ExtensionFunction::ScopedUserGestureForTests scoped_user_gesture;
+
+ function = new ManagementUninstallFunction();
+ EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_id));
+ EXPECT_TRUE(RunFunction(function, uninstall_args)) << function->GetError();
+ // The extension should be uninstalled.
+ EXPECT_FALSE(registry()->GetExtensionById(extension_id,
+ ExtensionRegistry::EVERYTHING));
+ }
// Install the extension again, and try uninstalling, auto-canceling the
// dialog.
- service()->AddExtension(extension.get());
- function = new ManagementUninstallFunction();
- ManagementUninstallFunctionBase::SetAutoConfirmForTest(false);
- EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_id));
- EXPECT_FALSE(RunFunction(function, uninstall_args));
- // The uninstall should have failed.
- EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_id));
- EXPECT_EQ(ErrorUtils::FormatErrorMessage(constants::kUninstallCanceledError,
- extension_id),
- function->GetError());
-
- // Try again, using showConfirmDialog: false.
- scoped_ptr<base::DictionaryValue> options(new base::DictionaryValue());
- options->SetBoolean("showConfirmDialog", false);
- uninstall_args.Append(options.release());
- function = new ManagementUninstallFunction();
- EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_id));
- EXPECT_FALSE(RunFunction(function, uninstall_args));
- // This should still fail, since extensions can only suppress the dialog for
- // uninstalling themselves.
- EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_id));
- EXPECT_EQ(ErrorUtils::FormatErrorMessage(constants::kUninstallCanceledError,
- extension_id),
- function->GetError());
-
- // If we try uninstall the extension itself, the uninstall should succeed
- // (even though we auto-cancel any dialog), because the dialog is never shown.
- uninstall_args.Remove(0u, nullptr);
- function = new ManagementUninstallSelfFunction();
- function->set_extension(extension);
- EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_id));
- EXPECT_TRUE(RunFunction(function, uninstall_args)) << function->GetError();
- EXPECT_FALSE(registry()->GetExtensionById(
- extension_id, ExtensionRegistry::EVERYTHING));
+ {
+ ScopedTestDialogAutoConfirm auto_confirm(
+ ScopedTestDialogAutoConfirm::CANCEL);
+ ExtensionFunction::ScopedUserGestureForTests scoped_user_gesture;
+
+ service()->AddExtension(extension.get());
+ scoped_refptr<UIThreadExtensionFunction> function =
+ new ManagementUninstallFunction();
+ EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_id));
+ EXPECT_FALSE(RunFunction(function, uninstall_args));
+ // The uninstall should have failed.
+ EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_id));
+ EXPECT_EQ(ErrorUtils::FormatErrorMessage(constants::kUninstallCanceledError,
+ extension_id),
+ function->GetError());
+
+ // Try again, using showConfirmDialog: false.
+ scoped_ptr<base::DictionaryValue> options(new base::DictionaryValue());
+ options->SetBoolean("showConfirmDialog", false);
+ uninstall_args.Append(options.release());
+ function = new ManagementUninstallFunction();
+ EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_id));
+ EXPECT_FALSE(RunFunction(function, uninstall_args));
+ // This should still fail, since extensions can only suppress the dialog for
+ // uninstalling themselves.
+ EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_id));
+ EXPECT_EQ(ErrorUtils::FormatErrorMessage(constants::kUninstallCanceledError,
+ extension_id),
+ function->GetError());
+
+ // If we try uninstall the extension itself, the uninstall should succeed
+ // (even though we auto-cancel any dialog), because the dialog is never
+ // shown.
+ uninstall_args.Remove(0u, nullptr);
+ function = new ManagementUninstallSelfFunction();
+ function->set_extension(extension);
+ EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_id));
+ EXPECT_TRUE(RunFunction(function, uninstall_args)) << function->GetError();
+ EXPECT_FALSE(registry()->GetExtensionById(extension_id,
+ ExtensionRegistry::EVERYTHING));
+ }
}
} // namespace extensions
diff --git a/chrome/browser/extensions/api/management/management_apitest.cc b/chrome/browser/extensions/api/management/management_apitest.cc
index d64a32e..91d0b66b 100644
--- a/chrome/browser/extensions/api/management/management_apitest.cc
+++ b/chrome/browser/extensions/api/management/management_apitest.cc
@@ -19,6 +19,7 @@
#include "chrome/common/extensions/extension_constants.h"
#include "content/public/test/test_utils.h"
#include "extensions/browser/api/management/management_api.h"
+#include "extensions/browser/extension_dialog_auto_confirm.h"
#include "extensions/browser/extension_system.h"
#include "extensions/browser/test_management_policy.h"
#include "extensions/common/manifest.h"
@@ -128,7 +129,8 @@ IN_PROC_BROWSER_TEST_F(ExtensionManagementApiTest, NoPermission) {
IN_PROC_BROWSER_TEST_F(ExtensionManagementApiTest, MAYBE_Uninstall) {
LoadExtensions();
// Confirmation dialog will be shown for uninstallations except for self.
- extensions::ManagementUninstallFunction::SetAutoConfirmForTest(true);
+ extensions::ScopedTestDialogAutoConfirm auto_confirm(
+ extensions::ScopedTestDialogAutoConfirm::ACCEPT);
ASSERT_TRUE(RunExtensionSubtest("management/test", "uninstall.html"));
}
@@ -158,7 +160,8 @@ IN_PROC_BROWSER_TEST_F(ExtensionManagementApiTest, GenerateAppForLink) {
IN_PROC_BROWSER_TEST_F(ExtensionManagementApiTest,
MAYBE_ManagementPolicyAllowed) {
LoadExtensions();
- extensions::ManagementUninstallFunction::SetAutoConfirmForTest(true);
+ extensions::ScopedTestDialogAutoConfirm auto_confirm(
+ extensions::ScopedTestDialogAutoConfirm::ACCEPT);
ExtensionService* service = extensions::ExtensionSystem::Get(
browser()->profile())->extension_service();
EXPECT_TRUE(service->GetExtensionById(extension_ids_["enabled_extension"],
diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc b/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc
index 245d053..a304a04 100644
--- a/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc
+++ b/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc
@@ -26,6 +26,7 @@
#include "content/public/browser/notification_registrar.h"
#include "content/public/test/browser_test_utils.h"
#include "extensions/browser/api/management/management_api.h"
+#include "extensions/browser/extension_dialog_auto_confirm.h"
#include "extensions/browser/extension_system.h"
#include "extensions/browser/install/extension_install_ui.h"
#include "gpu/config/gpu_feature_type.h"
@@ -117,8 +118,8 @@ class ExtensionWebstorePrivateApiTest : public ExtensionApiTest {
void SetUpOnMainThread() override {
ExtensionApiTest::SetUpOnMainThread();
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::ACCEPT;
+ auto_confirm_install_.reset(
+ new ScopedTestDialogAutoConfirm(ScopedTestDialogAutoConfirm::ACCEPT));
ASSERT_TRUE(webstore_install_dir_.CreateUniqueTempDir());
webstore_install_dir_copy_ = webstore_install_dir_.path();
@@ -148,8 +149,6 @@ class ExtensionWebstorePrivateApiTest : public ExtensionApiTest {
// Navigates to |page| and runs the Extension API test there. Any downloads
// of extensions will return the contents of |crx_file|.
bool RunInstallTest(const std::string& page, const std::string& crx_file) {
- // Auto-confirm the uninstallation dialog.
- ManagementUninstallFunction::SetAutoConfirmForTest(true);
#if defined(OS_WIN) && !defined(NDEBUG)
// See http://crbug.com/177163 for details.
return true;
@@ -176,6 +175,10 @@ class ExtensionWebstorePrivateApiTest : public ExtensionApiTest {
// WebstoreInstaller needs a reference to a FilePath when setting the download
// directory for testing.
base::FilePath webstore_install_dir_copy_;
+
+ scoped_ptr<ScopedTestDialogAutoConfirm> auto_confirm_install_;
+
+ DISALLOW_COPY_AND_ASSIGN(ExtensionWebstorePrivateApiTest);
};
// Test cases for webstore origin frame blocking.
@@ -238,8 +241,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest, InstallLocalized) {
// Now test the case where the user cancels the confirmation dialog.
IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest, InstallCancelled) {
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::CANCEL;
+ ScopedTestDialogAutoConfirm auto_cancel(ScopedTestDialogAutoConfirm::CANCEL);
ASSERT_TRUE(RunInstallTest("cancelled.html", "extension.crx"));
}
diff --git a/chrome/browser/extensions/extension_disabled_ui_browsertest.cc b/chrome/browser/extensions/extension_disabled_ui_browsertest.cc
index 34eaa7c..c35d8b4 100644
--- a/chrome/browser/extensions/extension_disabled_ui_browsertest.cc
+++ b/chrome/browser/extensions/extension_disabled_ui_browsertest.cc
@@ -19,6 +19,7 @@
#include "chrome/common/chrome_switches.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/test/test_utils.h"
+#include "extensions/browser/extension_dialog_auto_confirm.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
@@ -147,8 +148,8 @@ IN_PROC_BROWSER_TEST_F(ExtensionDisabledGlobalErrorTest, Uninstall) {
// Tests uninstalling a disabled extension with an uninstall dialog.
IN_PROC_BROWSER_TEST_F(ExtensionDisabledGlobalErrorTest, UninstallFromDialog) {
- extensions::ExtensionUninstallDialog::ScopedAutoConfirm auto_confirm(
- extensions::ExtensionUninstallDialog::ACCEPT);
+ extensions::ScopedTestDialogAutoConfirm auto_confirm(
+ extensions::ScopedTestDialogAutoConfirm::ACCEPT);
const Extension* extension = InstallAndUpdateIncreasingPermissionsExtension();
ASSERT_TRUE(extension);
std::string extension_id = extension->id();
diff --git a/chrome/browser/extensions/extension_install_prompt.cc b/chrome/browser/extensions/extension_install_prompt.cc
index 6ad4358..5599116 100644
--- a/chrome/browser/extensions/extension_install_prompt.cc
+++ b/chrome/browser/extensions/extension_install_prompt.cc
@@ -24,6 +24,7 @@
#include "chrome/grit/chromium_strings.h"
#include "chrome/grit/generated_resources.h"
#include "content/public/browser/web_contents.h"
+#include "extensions/browser/extension_dialog_auto_confirm.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_util.h"
#include "extensions/browser/image_loader.h"
@@ -154,19 +155,22 @@ SkBitmap GetDefaultIconBitmapForMaxScaleFactor(bool is_app) {
// If auto confirm is enabled then posts a task to proceed with or cancel the
// install and returns true. Otherwise returns false.
bool AutoConfirmPrompt(ExtensionInstallPrompt::Delegate* delegate) {
- switch (ExtensionInstallPrompt::g_auto_confirm_for_tests) {
- case ExtensionInstallPrompt::NONE:
+ switch (extensions::ScopedTestDialogAutoConfirm::GetAutoConfirmValue()) {
+ case extensions::ScopedTestDialogAutoConfirm::NONE:
+ LOG(WARNING) << "None!";
return false;
// We use PostTask instead of calling the delegate directly here, because in
// the real implementations it's highly likely the message loop will be
// pumping a few times before the user clicks accept or cancel.
- case ExtensionInstallPrompt::ACCEPT:
+ case extensions::ScopedTestDialogAutoConfirm::ACCEPT:
+ LOG(WARNING) << "Proceeding!";
base::MessageLoop::current()->PostTask(
FROM_HERE,
base::Bind(&ExtensionInstallPrompt::Delegate::InstallUIProceed,
base::Unretained(delegate)));
return true;
- case ExtensionInstallPrompt::CANCEL:
+ case extensions::ScopedTestDialogAutoConfirm::CANCEL:
+ LOG(WARNING) << "Canceling!";
base::MessageLoop::current()->PostTask(
FROM_HERE,
base::Bind(&ExtensionInstallPrompt::Delegate::InstallUIAbort,
@@ -194,10 +198,6 @@ ExtensionInstallPrompt::Prompt::InstallPromptPermissions::
~InstallPromptPermissions() {
}
-// static
-ExtensionInstallPrompt::AutoConfirmForTests
-ExtensionInstallPrompt::g_auto_confirm_for_tests = ExtensionInstallPrompt::NONE;
-
ExtensionInstallPrompt::PromptType
ExtensionInstallPrompt::g_last_prompt_type_for_tests =
ExtensionInstallPrompt::UNSET_PROMPT_TYPE;
diff --git a/chrome/browser/extensions/extension_install_prompt.h b/chrome/browser/extensions/extension_install_prompt.h
index da1dd30..1613d2b 100644
--- a/chrome/browser/extensions/extension_install_prompt.h
+++ b/chrome/browser/extensions/extension_install_prompt.h
@@ -52,15 +52,6 @@ class InfoBarDelegate;
class ExtensionInstallPrompt
: public base::SupportsWeakPtr<ExtensionInstallPrompt> {
public:
- // A setting to cause extension/app installs from the webstore skip the normal
- // confirmation dialog. This should only be used in tests.
- enum AutoConfirmForTests {
- NONE, // The prompt will show normally.
- ACCEPT, // The prompt will always accept.
- CANCEL, // The prompt will always cancel.
- };
- static AutoConfirmForTests g_auto_confirm_for_tests;
-
// This enum is associated with Extensions.InstallPrompt_Type UMA histogram.
// Do not modify existing values and add new values only to the end.
enum PromptType {
diff --git a/chrome/browser/extensions/extension_reenabler_unittest.cc b/chrome/browser/extensions/extension_reenabler_unittest.cc
index 9e5d883..3c6f7c1 100644
--- a/chrome/browser/extensions/extension_reenabler_unittest.cc
+++ b/chrome/browser/extensions/extension_reenabler_unittest.cc
@@ -11,6 +11,7 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/test/base/testing_profile.h"
#include "components/crx_file/id_util.h"
+#include "extensions/browser/extension_dialog_auto_confirm.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/management_policy.h"
#include "extensions/browser/test_extensions_browser_client.h"
@@ -160,8 +161,8 @@ TEST_F(ExtensionReenablerUnitTest, TestReenablingDisabledExtension) {
EXPECT_TRUE(registry()->disabled_extensions().Contains(extension->id()));
// Automatically confirm install prompts.
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::ACCEPT;
+ ScopedTestDialogAutoConfirm auto_confirm(
+ ScopedTestDialogAutoConfirm::ACCEPT);
// Run the ExtensionReenabler.
scoped_ptr<ExtensionReenabler> extension_reenabler =
@@ -181,6 +182,9 @@ TEST_F(ExtensionReenablerUnitTest, TestReenablingDisabledExtension) {
// Check that we don't re-enable extensions that must remain disabled, and
// that the re-enabler reports failure correctly.
{
+ ScopedTestDialogAutoConfirm auto_confirm(
+ ScopedTestDialogAutoConfirm::ACCEPT);
+
ManagementPolicy* management_policy =
ExtensionSystem::Get(browser_context())->management_policy();
ASSERT_TRUE(management_policy);
@@ -210,8 +214,8 @@ TEST_F(ExtensionReenablerUnitTest, TestReenablingDisabledExtension) {
// Disable it again, and try canceling the prompt.
service()->DisableExtension(extension->id(),
Extension::DISABLE_PERMISSIONS_INCREASE);
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::CANCEL;
+ ScopedTestDialogAutoConfirm auto_confirm(
+ ScopedTestDialogAutoConfirm::CANCEL);
scoped_ptr<ExtensionReenabler> extension_reenabler =
ExtensionReenabler::PromptForReenable(extension,
profile(),
@@ -229,9 +233,6 @@ TEST_F(ExtensionReenablerUnitTest, TestReenablingDisabledExtension) {
// Test that if the extension is re-enabled while the prompt is active, the
// prompt exits and reports success.
{
- // Don't auto-confirm, so that the prompt "stays around".
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::NONE;
base::RunLoop run_loop;
scoped_ptr<ExtensionReenabler> extension_reenabler =
ExtensionReenabler::PromptForReenableWithPromptForTest(
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc
index 919f925..854f043 100644
--- a/chrome/browser/extensions/extension_service_unittest.cc
+++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -86,6 +86,7 @@
#include "content/public/common/content_constants.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "content/public/test/test_utils.h"
+#include "extensions/browser/extension_dialog_auto_confirm.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
@@ -2849,8 +2850,9 @@ TEST_F(ExtensionServiceTest, LoadExtensionsWithPlugins) {
service()->set_show_extensions_prompts(true);
// Start by canceling any install prompts.
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::CANCEL;
+ scoped_ptr<extensions::ScopedTestDialogAutoConfirm> auto_confirm(
+ new extensions::ScopedTestDialogAutoConfirm(
+ extensions::ScopedTestDialogAutoConfirm::CANCEL));
// The extension that has a plugin should not install.
extensions::UnpackedInstaller::Create(service())
@@ -2873,8 +2875,9 @@ TEST_F(ExtensionServiceTest, LoadExtensionsWithPlugins) {
EXPECT_TRUE(registry()->enabled_extensions().Contains(good2));
// The plugin extension should install if we accept the dialog.
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::ACCEPT;
+ auto_confirm.reset();
+ auto_confirm.reset(new extensions::ScopedTestDialogAutoConfirm(
+ extensions::ScopedTestDialogAutoConfirm::ACCEPT));
ExtensionErrorReporter::GetInstance()->ClearErrors();
extensions::UnpackedInstaller::Create(service())
@@ -2897,8 +2900,9 @@ TEST_F(ExtensionServiceTest, LoadExtensionsWithPlugins) {
// We should be able to reload the extension without getting another prompt.
loaded_.clear();
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::CANCEL;
+ auto_confirm.reset();
+ auto_confirm.reset(new extensions::ScopedTestDialogAutoConfirm(
+ extensions::ScopedTestDialogAutoConfirm::CANCEL));
service()->ReloadExtension(good1);
base::RunLoop().RunUntilIdle();
diff --git a/chrome/browser/extensions/extension_storage_monitor_browsertest.cc b/chrome/browser/extensions/extension_storage_monitor_browsertest.cc
index f60adb6..295331d 100644
--- a/chrome/browser/extensions/extension_storage_monitor_browsertest.cc
+++ b/chrome/browser/extensions/extension_storage_monitor_browsertest.cc
@@ -12,6 +12,7 @@
#include "chrome/browser/ui/extensions/app_launch_params.h"
#include "chrome/browser/ui/extensions/application_launch.h"
#include "content/public/test/test_utils.h"
+#include "extensions/browser/extension_dialog_auto_confirm.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
@@ -323,8 +324,8 @@ IN_PROC_BROWSER_TEST_F(ExtensionStorageMonitorTest, UninstallExtension) {
// Fake clicking the notification button to uninstall and accepting the
// uninstall.
- ExtensionUninstallDialog::ScopedAutoConfirm scoped_autoconfirm(
- ExtensionUninstallDialog::ACCEPT);
+ ScopedTestDialogAutoConfirm scoped_autoconfirm(
+ ScopedTestDialogAutoConfirm::ACCEPT);
TestExtensionRegistryObserver observer(ExtensionRegistry::Get(profile()),
extension->id());
message_center::MessageCenter::Get()->ClickOnNotificationButton(
diff --git a/chrome/browser/extensions/extension_uninstall_dialog.cc b/chrome/browser/extensions/extension_uninstall_dialog.cc
index 82d3487..16c6a72 100644
--- a/chrome/browser/extensions/extension_uninstall_dialog.cc
+++ b/chrome/browser/extensions/extension_uninstall_dialog.cc
@@ -14,6 +14,7 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser_navigator.h"
#include "chrome/grit/generated_resources.h"
+#include "extensions/browser/extension_dialog_auto_confirm.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
#include "extensions/browser/image_loader.h"
@@ -48,21 +49,6 @@ SkBitmap GetDefaultIconBitmapForMaxScaleFactor(bool is_app) {
} // namespace
-// static
-ExtensionUninstallDialog::AutoConfirmForTests
-ExtensionUninstallDialog::g_auto_confirm_for_testing =
- ExtensionUninstallDialog::NONE;
-
-ExtensionUninstallDialog::ScopedAutoConfirm::ScopedAutoConfirm(
- AutoConfirmForTests new_value)
- : original_value_(g_auto_confirm_for_testing) {
- g_auto_confirm_for_testing = new_value;
-}
-
-ExtensionUninstallDialog::ScopedAutoConfirm::~ScopedAutoConfirm() {
- g_auto_confirm_for_testing = original_value_;
-}
-
ExtensionUninstallDialog::ExtensionUninstallDialog(
Profile* profile,
ExtensionUninstallDialog::Delegate* delegate)
@@ -137,14 +123,14 @@ void ExtensionUninstallDialog::OnImageLoaded(const std::string& extension_id,
SetIcon(image);
- switch (g_auto_confirm_for_testing) {
- case NONE:
+ switch (ScopedTestDialogAutoConfirm::GetAutoConfirmValue()) {
+ case ScopedTestDialogAutoConfirm::NONE:
Show();
break;
- case ACCEPT:
+ case ScopedTestDialogAutoConfirm::ACCEPT:
OnDialogClosed(CLOSE_ACTION_UNINSTALL);
break;
- case CANCEL:
+ case ScopedTestDialogAutoConfirm::CANCEL:
OnDialogClosed(CLOSE_ACTION_CANCELED);
break;
}
diff --git a/chrome/browser/extensions/extension_uninstall_dialog.h b/chrome/browser/extensions/extension_uninstall_dialog.h
index e8039c3..9691906 100644
--- a/chrome/browser/extensions/extension_uninstall_dialog.h
+++ b/chrome/browser/extensions/extension_uninstall_dialog.h
@@ -34,24 +34,6 @@ class ExtensionUninstallDialog
CLOSE_ACTION_LAST = 3,
};
- // A setting to cause extension/app installs from the webstore skip the normal
- // confirmation dialog. This should only be used in tests.
- enum AutoConfirmForTests {
- NONE, // The prompt will show normally.
- ACCEPT, // The prompt will always accept.
- CANCEL, // The prompt will always cancel.
- };
- class ScopedAutoConfirm {
- public:
- explicit ScopedAutoConfirm(AutoConfirmForTests new_value);
- ~ScopedAutoConfirm();
-
- private:
- AutoConfirmForTests original_value_;
-
- DISALLOW_COPY_AND_ASSIGN(ScopedAutoConfirm);
- };
-
// TODO(devlin): For a single method like this, a callback is probably more
// appropriate than a delegate.
class Delegate {
@@ -111,8 +93,6 @@ class ExtensionUninstallDialog
const gfx::ImageSkia& icon() const { return icon_; }
private:
- static AutoConfirmForTests g_auto_confirm_for_testing;
-
// Handles the "report abuse" checkbox being checked at the close of the
// dialog.
void HandleReportAbuse();
diff --git a/chrome/browser/extensions/unpacked_installer.cc b/chrome/browser/extensions/unpacked_installer.cc
index 36368aca..5f702b9b 100644
--- a/chrome/browser/extensions/unpacked_installer.cc
+++ b/chrome/browser/extensions/unpacked_installer.cc
@@ -19,6 +19,7 @@
#include "chrome/common/extensions/api/plugins/plugins_handler.h"
#include "components/crx_file/id_util.h"
#include "content/public/browser/browser_thread.h"
+#include "extensions/browser/extension_dialog_auto_confirm.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/install/extension_install_ui.h"
@@ -79,18 +80,19 @@ SimpleExtensionLoadPrompt::~SimpleExtensionLoadPrompt() {
}
void SimpleExtensionLoadPrompt::ShowPrompt() {
- switch (ExtensionInstallPrompt::g_auto_confirm_for_tests) {
- case ExtensionInstallPrompt::NONE:
+ switch (extensions::ScopedTestDialogAutoConfirm::GetAutoConfirmValue()) {
+ case extensions::ScopedTestDialogAutoConfirm::NONE:
install_ui_->ConfirmInstall(
this,
extension_.get(),
ExtensionInstallPrompt::GetDefaultShowDialogCallback());
break;
- case ExtensionInstallPrompt::ACCEPT:
+ case extensions::ScopedTestDialogAutoConfirm::ACCEPT:
InstallUIProceed();
break;
- case ExtensionInstallPrompt::CANCEL:
+ case extensions::ScopedTestDialogAutoConfirm::CANCEL:
InstallUIAbort(false);
+ break;
}
}
diff --git a/chrome/browser/extensions/webstore_inline_installer_browsertest.cc b/chrome/browser/extensions/webstore_inline_installer_browsertest.cc
index 270d7cf..352f17f 100644
--- a/chrome/browser/extensions/webstore_inline_installer_browsertest.cc
+++ b/chrome/browser/extensions/webstore_inline_installer_browsertest.cc
@@ -167,8 +167,7 @@ IN_PROC_BROWSER_TEST_F(WebstoreInlineInstallerTest,
IN_PROC_BROWSER_TEST_F(WebstoreInlineInstallerTest,
ReinstallDisabledExtension) {
// Install an extension via inline install, and confirm it is successful.
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::ACCEPT;
+ AutoAcceptInstall();
ui_test_utils::NavigateToURL(
browser(), GenerateTestServerUrl(kAppDomain, "install.html"));
RunTest("runTest");
@@ -224,8 +223,7 @@ class WebstoreInlineInstallerListenerTest : public WebstoreInlineInstallerTest {
protected:
void RunTest(const std::string& file_name) {
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::ACCEPT;
+ AutoAcceptInstall();
ui_test_utils::NavigateToURL(browser(),
GenerateTestServerUrl(kAppDomain, file_name));
WebstoreInstallerTest::RunTest("runTest");
diff --git a/chrome/browser/extensions/webstore_installer_test.cc b/chrome/browser/extensions/webstore_installer_test.cc
index cb3b790..73192e0 100644
--- a/chrome/browser/extensions/webstore_installer_test.cc
+++ b/chrome/browser/extensions/webstore_installer_test.cc
@@ -138,11 +138,13 @@ void WebstoreInstallerTest::RunTestAsync(
}
void WebstoreInstallerTest::AutoAcceptInstall() {
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::ACCEPT;
+ install_auto_confirm_.reset(); // Destroy any old override first.
+ install_auto_confirm_.reset(new extensions::ScopedTestDialogAutoConfirm(
+ extensions::ScopedTestDialogAutoConfirm::ACCEPT));
}
void WebstoreInstallerTest::AutoCancelInstall() {
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::CANCEL;
+ install_auto_confirm_.reset(); // Destroy any old override first.
+ install_auto_confirm_.reset(new extensions::ScopedTestDialogAutoConfirm(
+ extensions::ScopedTestDialogAutoConfirm::CANCEL));
}
diff --git a/chrome/browser/extensions/webstore_installer_test.h b/chrome/browser/extensions/webstore_installer_test.h
index a70e35a..be22671 100644
--- a/chrome/browser/extensions/webstore_installer_test.h
+++ b/chrome/browser/extensions/webstore_installer_test.h
@@ -9,6 +9,7 @@
#include "base/files/scoped_temp_dir.h"
#include "chrome/browser/extensions/extension_browsertest.h"
+#include "extensions/browser/extension_dialog_auto_confirm.h"
#include "url/gurl.h"
namespace base {
@@ -68,6 +69,10 @@ class WebstoreInstallerTest : public ExtensionBrowserTest {
std::string test_gallery_url_;
base::ScopedTempDir download_directory_;
+
+ scoped_ptr<extensions::ScopedTestDialogAutoConfirm> install_auto_confirm_;
+
+ DISALLOW_COPY_AND_ASSIGN(WebstoreInstallerTest);
};
#endif // CHROME_BROWSER_EXTENSIONS_WEBSTORE_INSTALLER_TEST_H_
diff --git a/chrome/browser/extensions/webstore_startup_installer_browsertest.cc b/chrome/browser/extensions/webstore_startup_installer_browsertest.cc
index 1662694..2c142b4 100644
--- a/chrome/browser/extensions/webstore_startup_installer_browsertest.cc
+++ b/chrome/browser/extensions/webstore_startup_installer_browsertest.cc
@@ -5,7 +5,6 @@
#include "base/command_line.h"
#include "base/scoped_observer.h"
#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/extensions/extension_install_prompt.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/startup_helper.h"
#include "chrome/browser/extensions/webstore_installer_test.h"
@@ -57,8 +56,7 @@ class WebstoreStartupInstallerTest : public WebstoreInstallerTest {
};
IN_PROC_BROWSER_TEST_F(WebstoreStartupInstallerTest, Install) {
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::ACCEPT;
+ AutoAcceptInstall();
ui_test_utils::NavigateToURL(
browser(), GenerateTestServerUrl(kAppDomain, "install.html"));
@@ -74,8 +72,7 @@ IN_PROC_BROWSER_TEST_F(WebstoreStartupInstallerTest, Install) {
IN_PROC_BROWSER_TEST_F(WebstoreStartupInstallerTest,
InstallNotAllowedFromNonVerifiedDomains) {
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::CANCEL;
+ AutoCancelInstall();
ui_test_utils::NavigateToURL(
browser(),
GenerateTestServerUrl(kNonAppDomain, "install_non_verified_domain.html"));
@@ -94,8 +91,7 @@ IN_PROC_BROWSER_TEST_F(WebstoreStartupInstallerTest, FindLink) {
// Flakes on all platforms: http://crbug.com/95713, http://crbug.com/229947
IN_PROC_BROWSER_TEST_F(WebstoreStartupInstallerTest,
DISABLED_ArgumentValidation) {
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::CANCEL;
+ AutoCancelInstall();
// Each of these tests has to run separately, since one page/tab can
// only have one in-progress install request. These tests don't all pass
@@ -111,8 +107,7 @@ IN_PROC_BROWSER_TEST_F(WebstoreStartupInstallerTest,
}
IN_PROC_BROWSER_TEST_F(WebstoreStartupInstallerTest, MultipleInstallCalls) {
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::CANCEL;
+ AutoCancelInstall();
ui_test_utils::NavigateToURL(
browser(),
@@ -121,8 +116,7 @@ IN_PROC_BROWSER_TEST_F(WebstoreStartupInstallerTest, MultipleInstallCalls) {
}
IN_PROC_BROWSER_TEST_F(WebstoreStartupInstallerTest, InstallNotSupported) {
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::CANCEL;
+ AutoCancelInstall();
ui_test_utils::NavigateToURL(
browser(),
GenerateTestServerUrl(kAppDomain, "install_not_supported.html"));
@@ -141,8 +135,7 @@ IN_PROC_BROWSER_TEST_F(WebstoreStartupInstallerTest, InstallNotSupported) {
// Regression test for http://crbug.com/144991.
IN_PROC_BROWSER_TEST_F(WebstoreStartupInstallerTest, InstallFromHostedApp) {
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::ACCEPT;
+ AutoAcceptInstall();
const GURL kInstallUrl = GenerateTestServerUrl(kAppDomain, "install.html");
@@ -195,8 +188,7 @@ IN_PROC_BROWSER_TEST_F(WebstoreStartupInstallerSupervisedUsersTest,
return;
#endif
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::ACCEPT;
+ AutoAcceptInstall();
ui_test_utils::NavigateToURL(
browser(), GenerateTestServerUrl(kAppDomain, "install_prohibited.html"));
@@ -231,8 +223,7 @@ class WebstoreStartupInstallUnpackFailureTest
IN_PROC_BROWSER_TEST_F(WebstoreStartupInstallUnpackFailureTest,
WebstoreStartupInstallUnpackFailureTest) {
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::ACCEPT;
+ AutoAcceptInstall();
ui_test_utils::NavigateToURL(browser(),
GenerateTestServerUrl(kAppDomain, "install_unpack_failure.html"));
@@ -295,8 +286,7 @@ IN_PROC_BROWSER_TEST_F(CommandLineWebstoreInstall, CannotInstallNonEphemeral) {
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
command_line->AppendSwitchASCII(
switches::kInstallEphemeralAppFromWebstore, kTestExtensionId);
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::ACCEPT;
+ AutoAcceptInstall();
extensions::StartupHelper helper;
EXPECT_FALSE(helper.InstallEphemeralApp(*command_line, browser()->profile()));
EXPECT_FALSE(saw_install());
diff --git a/chrome/browser/infobars/infobars_browsertest.cc b/chrome/browser/infobars/infobars_browsertest.cc
index 175022b..db81e6e 100644
--- a/chrome/browser/infobars/infobars_browsertest.cc
+++ b/chrome/browser/infobars/infobars_browsertest.cc
@@ -18,6 +18,7 @@
#include "chrome/test/base/test_switches.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/browser/notification_service.h"
+#include "extensions/browser/extension_dialog_auto_confirm.h"
#include "extensions/browser/extension_system.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
@@ -48,8 +49,8 @@ class InfoBarsTest : public InProcessBrowserTest {
};
IN_PROC_BROWSER_TEST_F(InfoBarsTest, TestInfoBarsCloseOnNewTheme) {
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::ACCEPT;
+ extensions::ScopedTestDialogAutoConfirm auto_confirm(
+ extensions::ScopedTestDialogAutoConfirm::ACCEPT);
#if defined(OS_WIN) && defined(USE_ASH)
// Disable this test in Metro+Ash for now (http://crbug.com/262796).
diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc
index 32c83e5..31e3c79 100644
--- a/chrome/browser/policy/policy_browsertest.cc
+++ b/chrome/browser/policy/policy_browsertest.cc
@@ -132,6 +132,7 @@
#include "content/public/test/mock_notification_observer.h"
#include "content/public/test/test_navigation_observer.h"
#include "content/public/test/test_utils.h"
+#include "extensions/browser/extension_dialog_auto_confirm.h"
#include "extensions/browser/extension_host.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_registry.h"
@@ -1968,8 +1969,8 @@ IN_PROC_BROWSER_TEST_F(PolicyTest, ExtensionAllowedTypes) {
#define MAYBE_ExtensionInstallSources ExtensionInstallSources
#endif
IN_PROC_BROWSER_TEST_F(PolicyTest, MAYBE_ExtensionInstallSources) {
- ExtensionInstallPrompt::g_auto_confirm_for_tests =
- ExtensionInstallPrompt::ACCEPT;
+ extensions::ScopedTestDialogAutoConfirm auto_confirm(
+ extensions::ScopedTestDialogAutoConfirm::ACCEPT);
const GURL install_source_url(URLRequestMockHTTPJob::GetMockUrl(
base::FilePath(FILE_PATH_LITERAL("extensions/*"))));
diff --git a/chrome/browser/ui/webui/extensions/extension_settings_browsertest.cc b/chrome/browser/ui/webui/extensions/extension_settings_browsertest.cc
index aef43a8..97c5b6b 100644
--- a/chrome/browser/ui/webui/extensions/extension_settings_browsertest.cc
+++ b/chrome/browser/ui/webui/extensions/extension_settings_browsertest.cc
@@ -24,7 +24,6 @@
#include "content/public/browser/render_view_host.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/test_utils.h"
-#include "extensions/browser/api/management/management_api.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
#include "extensions/browser/test_extension_registry_observer.h"
@@ -87,7 +86,8 @@ void ExtensionSettingsUIBrowserTest::AddManagedPolicyProvider() {
}
void ExtensionSettingsUIBrowserTest::SetAutoConfirmUninstall() {
- extensions::ManagementUninstallFunctionBase::SetAutoConfirmForTest(true);
+ uninstall_auto_confirm_.reset(new extensions::ScopedTestDialogAutoConfirm(
+ extensions::ScopedTestDialogAutoConfirm::ACCEPT));
}
void ExtensionSettingsUIBrowserTest::EnableErrorConsole() {
diff --git a/chrome/browser/ui/webui/extensions/extension_settings_browsertest.h b/chrome/browser/ui/webui/extensions/extension_settings_browsertest.h
index 9730dff..6a43a77 100644
--- a/chrome/browser/ui/webui/extensions/extension_settings_browsertest.h
+++ b/chrome/browser/ui/webui/extensions/extension_settings_browsertest.h
@@ -8,6 +8,7 @@
#include "chrome/browser/extensions/extension_test_notification_observer.h"
#include "chrome/common/extensions/features/feature_channel.h"
#include "chrome/test/base/web_ui_browser_test.h"
+#include "extensions/browser/extension_dialog_auto_confirm.h"
#include "extensions/browser/test_management_policy.h"
#include "extensions/common/extension.h"
#include "extensions/common/feature_switch.h"
@@ -64,6 +65,8 @@ class ExtensionSettingsUIBrowserTest : public WebUIBrowserTest {
// Used to enable the error console.
scoped_ptr<extensions::FeatureSwitch::ScopedOverride> error_console_override_;
+ scoped_ptr<extensions::ScopedTestDialogAutoConfirm> uninstall_auto_confirm_;
+
DISALLOW_COPY_AND_ASSIGN(ExtensionSettingsUIBrowserTest);
};
diff --git a/extensions/browser/api/management/management_api.cc b/extensions/browser/api/management/management_api.cc
index 7b2e687..1000e64 100644
--- a/extensions/browser/api/management/management_api.cc
+++ b/extensions/browser/api/management/management_api.cc
@@ -541,39 +541,14 @@ ExtensionFunction::ResponseAction ManagementUninstallFunctionBase::Uninstall(
return RespondNow(Error(keys::kGestureNeededForUninstallError));
if (show_confirm_dialog) {
- switch (auto_confirm_for_test) {
- case DO_NOT_SKIP: {
- // We show the programmatic uninstall ui for extensions uninstalling
- // other extensions.
- bool show_programmatic_uninstall_ui = !self_uninstall && extension();
- AddRef(); // Balanced in OnExtensionUninstallDialogClosed.
- // TODO(devlin): A method called "UninstallFunctionDelegate" does not in
- // any way imply that this actually creates a dialog and runs it.
- uninstall_dialog_ =
- delegate->UninstallFunctionDelegate(
- this,
- target_extension,
- show_programmatic_uninstall_ui);
- break;
- }
- case PROCEED: {
- // Skip the confirm dialog for testing.
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&ManagementUninstallFunctionBase::UninstallExtension,
- this));
- break;
- }
- case ABORT: {
- // Fake the user canceling.
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(
- &ManagementUninstallFunctionBase::Finish, this, false,
- ErrorUtils::FormatErrorMessage(keys::kUninstallCanceledError,
- target_extension_id_)));
- }
- }
+ // We show the programmatic uninstall ui for extensions uninstalling
+ // other extensions.
+ bool show_programmatic_uninstall_ui = !self_uninstall && extension();
+ AddRef(); // Balanced in OnExtensionUninstallDialogClosed.
+ // TODO(devlin): A method called "UninstallFunctionDelegate" does not in
+ // any way imply that this actually creates a dialog and runs it.
+ uninstall_dialog_ = delegate->UninstallFunctionDelegate(
+ this, target_extension, show_programmatic_uninstall_ui);
} else { // No confirm dialog.
base::MessageLoop::current()->PostTask(
FROM_HERE,
@@ -591,7 +566,9 @@ void ManagementUninstallFunctionBase::Finish(bool did_start_uninstall,
void ManagementUninstallFunctionBase::OnExtensionUninstallDialogClosed(
bool did_start_uninstall,
const base::string16& error) {
- Finish(did_start_uninstall, base::UTF16ToUTF8(error));
+ Finish(did_start_uninstall,
+ ErrorUtils::FormatErrorMessage(keys::kUninstallCanceledError,
+ target_extension_id_));
Release(); // Balanced in Uninstall().
}
@@ -621,12 +598,6 @@ void ManagementUninstallFunctionBase::UninstallExtension() {
Finish(success, error);
}
-// static
-void ManagementUninstallFunctionBase::SetAutoConfirmForTest(
- bool should_proceed) {
- auto_confirm_for_test = should_proceed ? PROCEED : ABORT;
-}
-
ManagementUninstallFunction::ManagementUninstallFunction() {
}
diff --git a/extensions/browser/api/management/management_api.h b/extensions/browser/api/management/management_api.h
index c8687c2..8b77ff6 100644
--- a/extensions/browser/api/management/management_api.h
+++ b/extensions/browser/api/management/management_api.h
@@ -135,8 +135,6 @@ class ManagementUninstallFunctionBase : public UIThreadExtensionFunction {
public:
ManagementUninstallFunctionBase();
- static void SetAutoConfirmForTest(bool should_proceed);
-
void OnExtensionUninstallDialogClosed(bool did_start_uninstall,
const base::string16& error);
diff --git a/extensions/browser/api/runtime/runtime_apitest.cc b/extensions/browser/api/runtime/runtime_apitest.cc
index 49614d0..c316189 100644
--- a/extensions/browser/api/runtime/runtime_apitest.cc
+++ b/extensions/browser/api/runtime/runtime_apitest.cc
@@ -8,8 +8,8 @@
#include "chrome/browser/extensions/test_extension_dir.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/browser/notification_service.h"
-#include "extensions/browser/api/management/management_api.h"
#include "extensions/browser/api/runtime/runtime_api.h"
+#include "extensions/browser/extension_dialog_auto_confirm.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/test/result_catcher.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
@@ -34,7 +34,8 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, ChromeRuntimeUnprivileged) {
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, ChromeRuntimeUninstallURL) {
// Auto-confirm the uninstall dialog.
- extensions::ManagementUninstallFunction::SetAutoConfirmForTest(true);
+ extensions::ScopedTestDialogAutoConfirm auto_confirm(
+ extensions::ScopedTestDialogAutoConfirm::ACCEPT);
ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("runtime")
.AppendASCII("uninstall_url")
.AppendASCII("sets_uninstall_url")));
diff --git a/extensions/browser/extension_dialog_auto_confirm.cc b/extensions/browser/extension_dialog_auto_confirm.cc
new file mode 100644
index 0000000..e17fa6a
--- /dev/null
+++ b/extensions/browser/extension_dialog_auto_confirm.cc
@@ -0,0 +1,29 @@
+// Copyright 2015 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 "extensions/browser/extension_dialog_auto_confirm.h"
+
+namespace extensions {
+
+namespace {
+ScopedTestDialogAutoConfirm::AutoConfirm g_extension_dialog_auto_confirm =
+ ScopedTestDialogAutoConfirm::NONE;
+}
+
+ScopedTestDialogAutoConfirm::ScopedTestDialogAutoConfirm(
+ ScopedTestDialogAutoConfirm::AutoConfirm override_value)
+ : old_value_(g_extension_dialog_auto_confirm) {
+ g_extension_dialog_auto_confirm = override_value;
+}
+
+ScopedTestDialogAutoConfirm::~ScopedTestDialogAutoConfirm() {
+ g_extension_dialog_auto_confirm = old_value_;
+}
+
+ScopedTestDialogAutoConfirm::AutoConfirm
+ScopedTestDialogAutoConfirm::GetAutoConfirmValue() {
+ return g_extension_dialog_auto_confirm;
+}
+
+} // namespace extensions
diff --git a/extensions/browser/extension_dialog_auto_confirm.h b/extensions/browser/extension_dialog_auto_confirm.h
new file mode 100644
index 0000000..5b4303e
--- /dev/null
+++ b/extensions/browser/extension_dialog_auto_confirm.h
@@ -0,0 +1,33 @@
+// Copyright 2015 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 EXTENSIONS_BROWSER_EXTENSION_DIALOG_AUTO_CONFIRM_H_
+#define EXTENSIONS_BROWSER_EXTENSION_DIALOG_AUTO_CONFIRM_H_
+
+#include "base/auto_reset.h"
+
+namespace extensions {
+
+class ScopedTestDialogAutoConfirm {
+ public:
+ enum AutoConfirm {
+ NONE, // The prompt will show normally.
+ ACCEPT, // The prompt will always accept.
+ CANCEL, // The prompt will always cancel.
+ };
+
+ explicit ScopedTestDialogAutoConfirm(AutoConfirm override_value);
+ ~ScopedTestDialogAutoConfirm();
+
+ static AutoConfirm GetAutoConfirmValue();
+
+ private:
+ AutoConfirm old_value_;
+
+ DISALLOW_COPY_AND_ASSIGN(ScopedTestDialogAutoConfirm);
+};
+
+} // namespace extensions
+
+#endif // EXTENSIONS_BROWSER_EXTENSION_DIALOG_AUTO_CONFIRM_H_
diff --git a/extensions/extensions.gypi b/extensions/extensions.gypi
index e1c4b35..cc225c3 100644
--- a/extensions/extensions.gypi
+++ b/extensions/extensions.gypi
@@ -567,6 +567,8 @@
'browser/event_router.h',
'browser/event_router_factory.cc',
'browser/event_router_factory.h',
+ 'browser/extension_dialog_auto_confirm.cc',
+ 'browser/extension_dialog_auto_confirm.h',
'browser/extension_error.cc',
'browser/extension_error.h',
'browser/extension_function.cc',