| 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 9bf75f00cc7a1eee195b7357a660979aac79faa7..32adcc95dbd9eccc8e7df3b1b571629b3c915b60 100644
|
| --- a/chrome/browser/extensions/extension_service_unittest.cc
|
| +++ b/chrome/browser/extensions/extension_service_unittest.cc
|
| @@ -49,6 +49,7 @@
|
| #include "chrome/browser/extensions/test_management_policy.h"
|
| #include "chrome/browser/extensions/unpacked_installer.h"
|
| #include "chrome/browser/extensions/updater/extension_updater.h"
|
| +#include "chrome/browser/plugin_prefs_factory.h"
|
| #include "chrome/browser/prefs/browser_prefs.h"
|
| #include "chrome/browser/prefs/pref_service_mock_builder.h"
|
| #include "chrome/browser/prefs/scoped_user_pref_update.h"
|
| @@ -66,6 +67,7 @@
|
| #include "chrome/common/url_constants.h"
|
| #include "chrome/test/base/testing_profile.h"
|
| #include "content/public/browser/dom_storage_context.h"
|
| +#include "content/public/browser/gpu_data_manager.h"
|
| #include "content/public/browser/indexed_db_context.h"
|
| #include "content/public/browser/notification_registrar.h"
|
| #include "content/public/browser/notification_service.h"
|
| @@ -717,6 +719,21 @@ class ExtensionServiceTest
|
| ENABLED
|
| };
|
|
|
| + void BlackListWebGL() {
|
| + static const std::string json_blacklist =
|
| + "{\n"
|
| + " \"name\": \"gpu blacklist\",\n"
|
| + " \"version\": \"1.0\",\n"
|
| + " \"entries\": [\n"
|
| + " {\n"
|
| + " \"id\": 1,\n"
|
| + " \"blacklist\": [\"webgl\"]\n"
|
| + " }\n"
|
| + " ]\n"
|
| + "}";
|
| + content::GpuDataManager::GetInstance()->Initialize("0", json_blacklist);
|
| + }
|
| +
|
| void UpdateExtension(const std::string& id, const FilePath& in_path,
|
| UpdateState expected_state) {
|
| ASSERT_TRUE(file_util::PathExists(in_path));
|
| @@ -2396,7 +2413,7 @@ TEST_F(ExtensionServiceTest, UpdateExtensionPreservesState) {
|
|
|
| path = data_dir_.AppendASCII("good2.crx");
|
| UpdateExtension(good_crx, path, INSTALLED);
|
| - ASSERT_EQ(1u, service_->disabled_extensions()->size());
|
| + ASSERT_EQ(1u, service_->disabled_extensions()->size());\
|
| const Extension* good2 = service_->GetExtensionById(good_crx, true);
|
| ASSERT_EQ("1.0.0.1", good2->version()->GetString());
|
| EXPECT_TRUE(service_->IsIncognitoEnabled(good2->id()));
|
| @@ -3432,6 +3449,101 @@ TEST_F(ExtensionServiceTest, UninstallExtensionHelperTerminated) {
|
| UninstallExtension(good_crx, true);
|
| }
|
|
|
| +// An extension disabled because of unsupported requirements should re-enabled
|
| +// if updated to a version with supported requirements as long as there are no
|
| +// other disable reasons.
|
| +TEST_F(ExtensionServiceTest, UpgradingRequirementsEnabled) {
|
| + InitializeEmptyExtensionService();
|
| + BlackListWebGL();
|
| +
|
| + FilePath path = data_dir_.AppendASCII("requirements");
|
| + FilePath pem_path = data_dir_.AppendASCII("requirements")
|
| + .AppendASCII("v1_good.pem");
|
| + const Extension* extension_v1 = PackAndInstallCRX(path.AppendASCII("v1_good"),
|
| + pem_path,
|
| + INSTALL_NEW);
|
| + std::string id = extension_v1->id();
|
| + EXPECT_TRUE(service_->IsExtensionEnabled(id));
|
| +
|
| + PackCRX(path.AppendASCII("v2_bad_requirements"), pem_path,
|
| + path.AppendASCII("v2_bad_requirements.crx"));
|
| + UpdateExtension(id, path.AppendASCII("v2_bad_requirements.crx"), INSTALLED);
|
| + EXPECT_FALSE(service_->IsExtensionEnabled(id));
|
| +
|
| + PackCRX(path.AppendASCII("v3_good"), pem_path,
|
| + path.AppendASCII("v3_good.crx"));
|
| + UpdateExtension(id, path.AppendASCII("v3_good.crx"), ENABLED);
|
| + EXPECT_TRUE(service_->IsExtensionEnabled(id));
|
| +}
|
| +
|
| +// Extensions disabled through user action should stay disabled.
|
| +TEST_F(ExtensionServiceTest, UpgradingRequirementsDisabled) {
|
| + InitializeEmptyExtensionService();
|
| + BlackListWebGL();
|
| +
|
| + FilePath path = data_dir_.AppendASCII("requirements");
|
| + FilePath pem_path = data_dir_.AppendASCII("requirements")
|
| + .AppendASCII("v1_good.pem");
|
| + const Extension* extension_v1 = PackAndInstallCRX(path.AppendASCII("v1_good"),
|
| + pem_path,
|
| + INSTALL_NEW);
|
| + std::string id = extension_v1->id();
|
| + service_->DisableExtension(id, Extension::DISABLE_USER_ACTION);
|
| + EXPECT_FALSE(service_->IsExtensionEnabled(id));
|
| +
|
| + PackCRX(path.AppendASCII("v2_bad_requirements"), pem_path,
|
| + path.AppendASCII("v2_bad_requirements.crx"));
|
| + UpdateExtension(id, path.AppendASCII("v2_bad_requirements.crx"), INSTALLED);
|
| + EXPECT_FALSE(service_->IsExtensionEnabled(id));
|
| +
|
| + PackCRX(path.AppendASCII("v3_good"), pem_path,
|
| + path.AppendASCII("v3_good.crx"));
|
| + UpdateExtension(id, path.AppendASCII("v3_good.crx"), INSTALLED);
|
| + EXPECT_FALSE(service_->IsExtensionEnabled(id));
|
| +}
|
| +
|
| +// The extension should not re-enabled because it was disabled from a
|
| +// permission increase.
|
| +TEST_F(ExtensionServiceTest, UpgradingRequirementsPermissions) {
|
| + InitializeEmptyExtensionService();
|
| + BlackListWebGL();
|
| +
|
| + FilePath path = data_dir_.AppendASCII("requirements");
|
| + FilePath pem_path = data_dir_.AppendASCII("requirements")
|
| + .AppendASCII("v1_good.pem");
|
| + const Extension* extension_v1 = PackAndInstallCRX(path.AppendASCII("v1_good"),
|
| + pem_path,
|
| + INSTALL_NEW);
|
| + std::string id = extension_v1->id();
|
| + EXPECT_TRUE(service_->IsExtensionEnabled(id));
|
| +
|
| + PackCRX(path.AppendASCII("v2_bad_requirements_and_permissions"), pem_path,
|
| + path.AppendASCII("v2_bad_requirements_and_permissions.crx"));
|
| + UpdateExtension(
|
| + id,
|
| + path.AppendASCII("v2_bad_requirements_and_permissions.crx"), INSTALLED);
|
| + EXPECT_FALSE(service_->IsExtensionEnabled(id));
|
| +
|
| + PackCRX(path.AppendASCII("v3_bad_permissions"), pem_path,
|
| + path.AppendASCII("v3_bad_permissions.crx"));
|
| + UpdateExtension(id, path.AppendASCII("v3_bad_permissions.crx"), INSTALLED);
|
| + EXPECT_FALSE(service_->IsExtensionEnabled(id));
|
| +}
|
| +
|
| +// Unpacked extensions are not allowed to be installed if they have unsupported
|
| +// requirements.
|
| +TEST_F(ExtensionServiceTest, UnpackedRequirements) {
|
| + InitializeEmptyExtensionService();
|
| + BlackListWebGL();
|
| +
|
| + FilePath path = data_dir_.AppendASCII("requirements")
|
| + .AppendASCII("v2_bad_requirements");
|
| + extensions::UnpackedInstaller::Create(service_)->Load(path);
|
| + loop_.RunAllPending();
|
| + EXPECT_EQ(1u, GetErrors().size());
|
| + EXPECT_EQ(0u, service_->extensions()->size());
|
| +}
|
| +
|
| class ExtensionCookieCallback {
|
| public:
|
| ExtensionCookieCallback()
|
|
|