| 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 3a96635d137748174c331443746c1eb5fb7dce2d..c7a75580105e36957fdba60054390b3223d2364f 100644
|
| --- a/chrome/browser/extensions/extension_service_unittest.cc
|
| +++ b/chrome/browser/extensions/extension_service_unittest.cc
|
| @@ -39,6 +39,7 @@
|
| #include "chrome/browser/extensions/extension_special_storage_policy.h"
|
| #include "chrome/browser/extensions/extension_sync_data.h"
|
| #include "chrome/browser/extensions/extension_system.h"
|
| +#include "chrome/browser/extensions/external_install_ui.h"
|
| #include "chrome/browser/extensions/external_pref_loader.h"
|
| #include "chrome/browser/extensions/external_provider_impl.h"
|
| #include "chrome/browser/extensions/external_provider_interface.h"
|
| @@ -62,6 +63,7 @@
|
| #include "chrome/common/extensions/extension_l10n_util.h"
|
| #include "chrome/common/extensions/extension_manifest_constants.h"
|
| #include "chrome/common/extensions/extension_resource.h"
|
| +#include "chrome/common/extensions/feature_switch.h"
|
| #include "chrome/common/extensions/permissions/permission_set.h"
|
| #include "chrome/common/extensions/url_pattern.h"
|
| #include "chrome/common/pref_names.h"
|
| @@ -513,7 +515,10 @@ void ExtensionServiceTestBase::SetUp() {
|
| class ExtensionServiceTest
|
| : public ExtensionServiceTestBase, public content::NotificationObserver {
|
| public:
|
| - ExtensionServiceTest() : installed_(NULL) {
|
| + ExtensionServiceTest()
|
| + : installed_(NULL),
|
| + override_external_install_prompt_(
|
| + extensions::FeatureSwitch::external_extension_prompt(), false) {
|
| registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
|
| content::NotificationService::AllSources());
|
| registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
|
| @@ -1001,6 +1006,7 @@ class ExtensionServiceTest
|
| extensions::ExtensionList loaded_;
|
| std::string unloaded_id_;
|
| const Extension* installed_;
|
| + extensions::FeatureSwitch::ScopedOverride override_external_install_prompt_;
|
|
|
| private:
|
| content::NotificationRegistrar registrar_;
|
| @@ -5558,17 +5564,20 @@ TEST_F(ExtensionSourcePriorityTest, InstallExternalBlocksSyncRequest) {
|
| ASSERT_FALSE(AddPendingSyncInstall());
|
| }
|
|
|
| -TEST_F(ExtensionServiceTest, AlertableExtensionHappyPath) {
|
| +// Test that installing an external extension displays a GlobalError.
|
| +TEST_F(ExtensionServiceTest, ExternalInstallGlobalError) {
|
| + extensions::FeatureSwitch::ScopedOverride prompt(
|
| + extensions::FeatureSwitch::external_extension_prompt(), true);
|
| +
|
| InitializeEmptyExtensionService();
|
| - scoped_ptr<ExtensionErrorUI> extension_error_ui(
|
| - ExtensionErrorUI::Create(service_));
|
| MockExtensionProvider* provider =
|
| new MockExtensionProvider(service_, Extension::EXTERNAL_PREF);
|
| AddMockExternalProvider(provider);
|
|
|
| // Should return false, meaning there aren't any extensions that the user
|
| // needs to know about.
|
| - ASSERT_FALSE(service_->PopulateExtensionErrorUI(extension_error_ui.get()));
|
| + service_->UpdateExternalExtensionAlert();
|
| + EXPECT_FALSE(extensions::HasExternalInstallError(service_));
|
|
|
| // This is a normal extension, installed normally.
|
| // This should NOT trigger an alert.
|
| @@ -5576,10 +5585,9 @@ TEST_F(ExtensionServiceTest, AlertableExtensionHappyPath) {
|
| FilePath path = data_dir_.AppendASCII("good.crx");
|
| InstallCRX(path, INSTALL_NEW);
|
|
|
| - // Another normal extension, but installed externally.
|
| - // This SHOULD trigger an alert.
|
| - provider->UpdateOrAddExtension(page_action, "1.0.0.0",
|
| - data_dir_.AppendASCII("page_action.crx"));
|
| + service_->CheckForExternalUpdates();
|
| + loop_.RunAllPending();
|
| + EXPECT_FALSE(extensions::HasExternalInstallError(service_));
|
|
|
| // A hosted app, installed externally.
|
| // This should NOT trigger an alert.
|
| @@ -5588,7 +5596,43 @@ TEST_F(ExtensionServiceTest, AlertableExtensionHappyPath) {
|
|
|
| service_->CheckForExternalUpdates();
|
| loop_.RunAllPending();
|
| + EXPECT_FALSE(extensions::HasExternalInstallError(service_));
|
| +
|
| + // Another normal extension, but installed externally.
|
| + // This SHOULD trigger an alert.
|
| + provider->UpdateOrAddExtension(page_action, "1.0.0.0",
|
| + data_dir_.AppendASCII("page_action.crx"));
|
| +
|
| + service_->CheckForExternalUpdates();
|
| + loop_.RunAllPending();
|
| + EXPECT_TRUE(extensions::HasExternalInstallError(service_));
|
| +}
|
| +
|
| +// Test that external extensions are initially disabled, and that enabling
|
| +// them clears the prompt.
|
| +TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) {
|
| + extensions::FeatureSwitch::ScopedOverride prompt(
|
| + extensions::FeatureSwitch::external_extension_prompt(), true);
|
| +
|
| + InitializeEmptyExtensionService();
|
| + MockExtensionProvider* provider =
|
| + new MockExtensionProvider(service_, Extension::EXTERNAL_PREF);
|
| + AddMockExternalProvider(provider);
|
| +
|
| + provider->UpdateOrAddExtension(page_action, "1.0.0.0",
|
| + data_dir_.AppendASCII("page_action.crx"));
|
| +
|
| + service_->CheckForExternalUpdates();
|
| + loop_.RunAllPending();
|
| + EXPECT_TRUE(extensions::HasExternalInstallError(service_));
|
| + EXPECT_FALSE(service_->IsExtensionEnabled(page_action));
|
| +
|
| + const Extension* extension =
|
| + service_->disabled_extensions()->GetByID(page_action);
|
| + EXPECT_TRUE(extension);
|
| + EXPECT_EQ(page_action, extension->id());
|
|
|
| - ASSERT_TRUE(service_->PopulateExtensionErrorUI(extension_error_ui.get()));
|
| - ASSERT_EQ(1u, extension_error_ui->get_external_extension_ids()->size());
|
| + service_->EnableExtension(page_action);
|
| + EXPECT_FALSE(extensions::HasExternalInstallError(service_));
|
| + EXPECT_TRUE(service_->IsExtensionEnabled(page_action));
|
| }
|
|
|