| Index: chrome/browser/extensions/extension_service_unittest.cc
|
| diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc
|
| index da2e19300eeb77c55e62edc942b98d9d6260029e..b1a5df0c02968001cd3aa3bcbae244313ee575ed 100644
|
| --- a/chrome/browser/extensions/extension_service_unittest.cc
|
| +++ b/chrome/browser/extensions/extension_service_unittest.cc
|
| @@ -47,7 +47,8 @@
|
| #include "chrome/browser/extensions/extension_sync_data.h"
|
| #include "chrome/browser/extensions/extension_sync_service.h"
|
| #include "chrome/browser/extensions/extension_util.h"
|
| -#include "chrome/browser/extensions/external_install_ui.h"
|
| +#include "chrome/browser/extensions/external_install_error.h"
|
| +#include "chrome/browser/extensions/external_install_manager.h"
|
| #include "chrome/browser/extensions/external_policy_loader.h"
|
| #include "chrome/browser/extensions/external_pref_loader.h"
|
| #include "chrome/browser/extensions/external_provider_impl.h"
|
| @@ -6743,7 +6744,7 @@ TEST_F(ExtensionServiceTest, ExternalInstallGlobalError) {
|
| service_->UpdateExternalExtensionAlert();
|
| // Should return false, meaning there aren't any extensions that the user
|
| // needs to know about.
|
| - EXPECT_FALSE(extensions::HasExternalInstallError(service_));
|
| + EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError());
|
|
|
| // This is a normal extension, installed normally.
|
| // This should NOT trigger an alert.
|
| @@ -6753,7 +6754,7 @@ TEST_F(ExtensionServiceTest, ExternalInstallGlobalError) {
|
|
|
| service_->CheckForExternalUpdates();
|
| base::RunLoop().RunUntilIdle();
|
| - EXPECT_FALSE(extensions::HasExternalInstallError(service_));
|
| + EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError());
|
|
|
| // A hosted app, installed externally.
|
| // This should NOT trigger an alert.
|
| @@ -6765,7 +6766,7 @@ TEST_F(ExtensionServiceTest, ExternalInstallGlobalError) {
|
| content::NotificationService::AllSources());
|
| service_->CheckForExternalUpdates();
|
| observer.Wait();
|
| - EXPECT_FALSE(extensions::HasExternalInstallError(service_));
|
| + EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError());
|
|
|
| // Another normal extension, but installed externally.
|
| // This SHOULD trigger an alert.
|
| @@ -6777,7 +6778,7 @@ TEST_F(ExtensionServiceTest, ExternalInstallGlobalError) {
|
| content::NotificationService::AllSources());
|
| service_->CheckForExternalUpdates();
|
| observer2.Wait();
|
| - EXPECT_TRUE(extensions::HasExternalInstallError(service_));
|
| + EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError());
|
| }
|
|
|
| // Test that external extensions are initially disabled, and that enabling
|
| @@ -6799,7 +6800,7 @@ TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) {
|
| content::NotificationService::AllSources());
|
| service_->CheckForExternalUpdates();
|
| observer.Wait();
|
| - EXPECT_TRUE(extensions::HasExternalInstallError(service_));
|
| + EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError());
|
| EXPECT_FALSE(service_->IsExtensionEnabled(page_action));
|
|
|
| const Extension* extension =
|
| @@ -6808,7 +6809,7 @@ TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) {
|
| EXPECT_EQ(page_action, extension->id());
|
|
|
| service_->EnableExtension(page_action);
|
| - EXPECT_FALSE(extensions::HasExternalInstallError(service_));
|
| + EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError());
|
| EXPECT_TRUE(service_->IsExtensionEnabled(page_action));
|
| }
|
|
|
| @@ -6841,20 +6842,25 @@ TEST_F(ExtensionServiceTest, MAYBE_ExternalInstallMultiple) {
|
| base::Bind(&WaitForCountNotificationsCallback, &count));
|
| service_->CheckForExternalUpdates();
|
| observer.Wait();
|
| - EXPECT_TRUE(extensions::HasExternalInstallError(service_));
|
| + EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError());
|
| EXPECT_FALSE(service_->IsExtensionEnabled(page_action));
|
| EXPECT_FALSE(service_->IsExtensionEnabled(good_crx));
|
| EXPECT_FALSE(service_->IsExtensionEnabled(theme_crx));
|
|
|
| service_->EnableExtension(page_action);
|
| - EXPECT_TRUE(extensions::HasExternalInstallError(service_));
|
| - EXPECT_FALSE(extensions::HasExternalInstallBubble(service_));
|
| + EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError());
|
| + EXPECT_FALSE(
|
| + service_->external_install_manager()->HasExternalInstallBubble());
|
| +
|
| service_->EnableExtension(theme_crx);
|
| - EXPECT_TRUE(extensions::HasExternalInstallError(service_));
|
| - EXPECT_FALSE(extensions::HasExternalInstallBubble(service_));
|
| + EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError());
|
| + EXPECT_FALSE(
|
| + service_->external_install_manager()->HasExternalInstallBubble());
|
| +
|
| service_->EnableExtension(good_crx);
|
| - EXPECT_FALSE(extensions::HasExternalInstallError(service_));
|
| - EXPECT_FALSE(extensions::HasExternalInstallBubble(service_));
|
| + EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError());
|
| + EXPECT_FALSE(
|
| + service_->external_install_manager()->HasExternalInstallBubble());
|
| }
|
|
|
| // Test that there is a bubble for external extensions that update
|
| @@ -6884,8 +6890,8 @@ TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreOldProfile) {
|
| content::NotificationService::AllSources());
|
| service_->CheckForExternalUpdates();
|
| observer.Wait();
|
| - EXPECT_TRUE(extensions::HasExternalInstallError(service_));
|
| - EXPECT_TRUE(extensions::HasExternalInstallBubble(service_));
|
| + EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError());
|
| + EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallBubble());
|
| EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore));
|
| }
|
|
|
| @@ -6911,11 +6917,97 @@ TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) {
|
| content::NotificationService::AllSources());
|
| service_->CheckForExternalUpdates();
|
| observer.Wait();
|
| - EXPECT_TRUE(extensions::HasExternalInstallError(service_));
|
| - EXPECT_FALSE(extensions::HasExternalInstallBubble(service_));
|
| + EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError());
|
| + EXPECT_FALSE(
|
| + service_->external_install_manager()->HasExternalInstallBubble());
|
| EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore));
|
| }
|
|
|
| +// Test that clicking to remove the extension on an external install warning
|
| +// uninstalls the extension.
|
| +TEST_F(ExtensionServiceTest, ExternalInstallClickToRemove) {
|
| + FeatureSwitch::ScopedOverride prompt(
|
| + FeatureSwitch::prompt_for_external_extensions(), true);
|
| +
|
| + ExtensionServiceInitParams params = CreateDefaultInitParams();
|
| + params.is_first_run = false;
|
| + InitializeExtensionService(params);
|
| +
|
| + base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx");
|
| + PackCRX(data_dir_.AppendASCII("update_from_webstore"),
|
| + data_dir_.AppendASCII("update_from_webstore.pem"),
|
| + crx_path);
|
| +
|
| + MockExtensionProvider* provider =
|
| + new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF);
|
| + AddMockExternalProvider(provider);
|
| + provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path);
|
| +
|
| + content::WindowedNotificationObserver observer(
|
| + chrome::NOTIFICATION_CRX_INSTALLER_DONE,
|
| + content::NotificationService::AllSources());
|
| + service_->CheckForExternalUpdates();
|
| + observer.Wait();
|
| + EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError());
|
| +
|
| + // We check both enabled and disabled, since these are "eventually exclusive"
|
| + // sets.
|
| + EXPECT_TRUE(registry_->disabled_extensions().GetByID(updates_from_webstore));
|
| + EXPECT_FALSE(registry_->enabled_extensions().GetByID(updates_from_webstore));
|
| +
|
| + // Click the negative response.
|
| + service_->external_install_manager()->error_for_testing()->InstallUIAbort(
|
| + true);
|
| + // The Extension should be uninstalled.
|
| + EXPECT_FALSE(registry_->GetExtensionById(updates_from_webstore,
|
| + ExtensionRegistry::EVERYTHING));
|
| + // The error should be removed.
|
| + EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError());
|
| +}
|
| +
|
| +// Test that clicking to keep the extension on an external install warning
|
| +// re-enables the extension.
|
| +TEST_F(ExtensionServiceTest, ExternalInstallClickToKeep) {
|
| + FeatureSwitch::ScopedOverride prompt(
|
| + FeatureSwitch::prompt_for_external_extensions(), true);
|
| +
|
| + ExtensionServiceInitParams params = CreateDefaultInitParams();
|
| + params.is_first_run = false;
|
| + InitializeExtensionService(params);
|
| +
|
| + base::FilePath crx_path = temp_dir_.path().AppendASCII("webstore.crx");
|
| + PackCRX(data_dir_.AppendASCII("update_from_webstore"),
|
| + data_dir_.AppendASCII("update_from_webstore.pem"),
|
| + crx_path);
|
| +
|
| + MockExtensionProvider* provider =
|
| + new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF);
|
| + AddMockExternalProvider(provider);
|
| + provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path);
|
| +
|
| + content::WindowedNotificationObserver observer(
|
| + chrome::NOTIFICATION_CRX_INSTALLER_DONE,
|
| + content::NotificationService::AllSources());
|
| + service_->CheckForExternalUpdates();
|
| + observer.Wait();
|
| + EXPECT_TRUE(service_->external_install_manager()->HasExternalInstallError());
|
| +
|
| + // We check both enabled and disabled, since these are "eventually exclusive"
|
| + // sets.
|
| + EXPECT_TRUE(registry_->disabled_extensions().GetByID(updates_from_webstore));
|
| + EXPECT_FALSE(registry_->enabled_extensions().GetByID(updates_from_webstore));
|
| +
|
| + // Accept the extension.
|
| + service_->external_install_manager()->error_for_testing()->InstallUIProceed();
|
| +
|
| + // It should be enabled again.
|
| + EXPECT_TRUE(registry_->enabled_extensions().GetByID(updates_from_webstore));
|
| + EXPECT_FALSE(registry_->disabled_extensions().GetByID(updates_from_webstore));
|
| +
|
| + // The error should be removed.
|
| + EXPECT_FALSE(service_->external_install_manager()->HasExternalInstallError());
|
| +}
|
| +
|
| TEST_F(ExtensionServiceTest, InstallBlacklistedExtension) {
|
| InitializeEmptyExtensionService();
|
|
|
|
|