Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1463)

Unified Diff: chrome/browser/extensions/extension_management_unittest.cc

Issue 559603002: Add new ExtensionManagement preference (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixes addressing #16 Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_management_unittest.cc
diff --git a/chrome/browser/extensions/extension_management_unittest.cc b/chrome/browser/extensions/extension_management_unittest.cc
index 377d708da7776a553253a0c0e805d201c5801207..e040d5377d1abafde0c6ed6a911a24f45accbd68 100644
--- a/chrome/browser/extensions/extension_management_unittest.cc
+++ b/chrome/browser/extensions/extension_management_unittest.cc
@@ -3,30 +3,61 @@
// found in the LICENSE file.
#include <algorithm>
+#include <vector>
+#include "base/json/json_parser.h"
#include "base/memory/scoped_ptr.h"
#include "base/prefs/pref_registry_simple.h"
#include "base/prefs/testing_pref_service.h"
#include "base/values.h"
#include "chrome/browser/extensions/extension_management.h"
+#include "chrome/browser/extensions/extension_management_test_util.h"
#include "chrome/browser/extensions/external_policy_loader.h"
#include "extensions/browser/pref_names.h"
+#include "extensions/common/manifest.h"
#include "extensions/common/manifest_constants.h"
#include "extensions/common/url_pattern.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
namespace extensions {
namespace {
+
const char kTargetExtension[] = "abcdefghijklmnopabcdefghijklmnop";
+const char kTargetExtension2[] = "bcdefghijklmnopabcdefghijklmnopa";
+const char kTargetExtension3[] = "cdefghijklmnopabcdefghijklmnopab";
const char kOtherExtension[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
const char kExampleUpdateUrl[] = "http://example.com/update_url";
+
+const char kExampleDictPreference[] =
+ "{"
+ " \"abcdefghijklmnopabcdefghijklmnop\": {" // kTargetExtension
+ " \"installation_mode\": \"allowed\","
+ " },"
+ " \"bcdefghijklmnopabcdefghijklmnopa\": {" // kTargetExtension2
+ " \"installation_mode\": \"force_installed\","
+ " \"update_url\": \"http://example.com/update_url\","
+ " },"
+ " \"cdefghijklmnopabcdefghijklmnopab\": {" // kTargetExtension3
+ " \"installation_mode\": \"normal_installed\","
+ " \"update_url\": \"http://example.com/update_url\","
+ " },"
+ " \"*\": {"
+ " \"installation_mode\": \"blocked\","
+ " \"install_sources\": [\"*://foo.com/*\"],"
+ " \"allowed_types\": [\"theme\", \"user_script\"],"
+ " },"
+ "}";
+
} // namespace
-class ExtensionManagementTest : public testing::Test {
+class ExtensionManagementServiceTest : public testing::Test {
public:
- ExtensionManagementTest() {}
- virtual ~ExtensionManagementTest() {}
+ typedef ExtensionManagementPrefUpdater<TestingPrefServiceSimple> PrefUpdater;
+
+ ExtensionManagementServiceTest() {}
+ virtual ~ExtensionManagementServiceTest() {}
// testing::Test:
virtual void SetUp() OVERRIDE {
@@ -43,6 +74,8 @@ class ExtensionManagementTest : public testing::Test {
pref_service_->registry()->RegisterListPref(pref_names::kInstallAllowList);
pref_service_->registry()->RegisterDictionaryPref(
pref_names::kInstallForceList);
+ pref_service_->registry()->RegisterDictionaryPref(
+ pref_names::kExtensionManagement);
extension_management_.reset(new ExtensionManagement(pref_service_.get()));
}
@@ -60,12 +93,24 @@ class ExtensionManagementTest : public testing::Test {
pref_service_->RemoveUserPref(path);
}
+ void SetExampleDictPref() {
+ std::string error_msg;
+ scoped_ptr<base::Value> parsed(base::JSONReader::ReadAndReturnError(
+ kExampleDictPreference,
+ base::JSONParserOptions::JSON_ALLOW_TRAILING_COMMAS,
+ NULL,
+ &error_msg));
+ ASSERT_TRUE(parsed && parsed->IsType(base::Value::TYPE_DICTIONARY))
+ << error_msg;
+ SetPref(true, pref_names::kExtensionManagement, parsed.release());
+ }
+
protected:
scoped_ptr<TestingPrefServiceSimple> pref_service_;
scoped_ptr<ExtensionManagement> extension_management_;
};
-class ExtensionAdminPolicyTest : public ExtensionManagementTest {
+class ExtensionAdminPolicyTest : public ExtensionManagementServiceTest {
public:
ExtensionAdminPolicyTest() {}
virtual ~ExtensionAdminPolicyTest() {}
@@ -151,7 +196,7 @@ bool ExtensionAdminPolicyTest::MustRemainEnabled(const Extension* extension,
// Verify that preference controlled by legacy ExtensionInstallSources policy is
// handled well.
-TEST_F(ExtensionManagementTest, LegacyInstallSources) {
+TEST_F(ExtensionManagementServiceTest, LegacyInstallSources) {
base::ListValue allowed_sites_pref;
allowed_sites_pref.AppendString("https://www.example.com/foo");
allowed_sites_pref.AppendString("https://corp.mycompany.com/*");
@@ -172,7 +217,7 @@ TEST_F(ExtensionManagementTest, LegacyInstallSources) {
// Verify that preference controlled by legacy ExtensionAllowedTypes policy is
// handled well.
-TEST_F(ExtensionManagementTest, LegacyAllowedTypes) {
+TEST_F(ExtensionManagementServiceTest, LegacyAllowedTypes) {
base::ListValue allowed_types_pref;
allowed_types_pref.AppendInteger(Manifest::TYPE_THEME);
allowed_types_pref.AppendInteger(Manifest::TYPE_USER_SCRIPT);
@@ -196,7 +241,7 @@ TEST_F(ExtensionManagementTest, LegacyAllowedTypes) {
// Verify that preference controlled by legacy ExtensionInstallBlacklist policy
// is handled well.
-TEST_F(ExtensionManagementTest, LegacyInstallBlacklist) {
+TEST_F(ExtensionManagementServiceTest, LegacyInstallBlacklist) {
base::ListValue denied_list_pref;
denied_list_pref.AppendString(kTargetExtension);
@@ -209,7 +254,7 @@ TEST_F(ExtensionManagementTest, LegacyInstallBlacklist) {
// Verify that preference controlled by legacy ExtensionInstallWhitelist policy
// is handled well.
-TEST_F(ExtensionManagementTest, LegacyInstallWhitelist) {
+TEST_F(ExtensionManagementServiceTest, LegacyInstallWhitelist) {
base::ListValue denied_list_pref;
denied_list_pref.AppendString("*");
base::ListValue allowed_list_pref;
@@ -231,7 +276,7 @@ TEST_F(ExtensionManagementTest, LegacyInstallWhitelist) {
// Verify that preference controlled by legacy ExtensionInstallForcelist policy
// is handled well.
-TEST_F(ExtensionManagementTest, LegacyInstallForcelist) {
+TEST_F(ExtensionManagementServiceTest, LegacyInstallForcelist) {
base::DictionaryValue forced_list_pref;
ExternalPolicyLoader::AddExtension(
&forced_list_pref, kTargetExtension, kExampleUpdateUrl);
@@ -251,6 +296,219 @@ TEST_F(ExtensionManagementTest, LegacyInstallForcelist) {
ExtensionManagement::INSTALLATION_ALLOWED);
}
+// Tests parsing of new dictionary preference.
+TEST_F(ExtensionManagementServiceTest, PreferenceParsing) {
+ SetExampleDictPref();
+
+ // Verifies the installation mode settings.
+ EXPECT_TRUE(extension_management_->BlacklistedByDefault());
+ EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode,
+ ExtensionManagement::INSTALLATION_ALLOWED);
+ EXPECT_EQ(
+ extension_management_->ReadById(kTargetExtension2).installation_mode,
+ ExtensionManagement::INSTALLATION_FORCED);
+ EXPECT_EQ(extension_management_->ReadById(kTargetExtension2).update_url,
+ kExampleUpdateUrl);
+ EXPECT_EQ(
+ extension_management_->ReadById(kTargetExtension3).installation_mode,
+ ExtensionManagement::INSTALLATION_RECOMMENDED);
+ EXPECT_EQ(extension_management_->ReadById(kTargetExtension3).update_url,
+ kExampleUpdateUrl);
+ EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode,
+ ExtensionManagement::INSTALLATION_BLOCKED);
+
+ // Verifies global settings.
+ EXPECT_TRUE(extension_management_->ReadGlobalSettings()
+ .has_restricted_install_sources);
+ const URLPatternSet& allowed_sites =
+ extension_management_->ReadGlobalSettings().install_sources;
+ EXPECT_EQ(allowed_sites.size(), 1u);
+ EXPECT_TRUE(allowed_sites.MatchesURL(GURL("http://foo.com/entry")));
+ EXPECT_FALSE(allowed_sites.MatchesURL(GURL("http://bar.com/entry")));
+
+ EXPECT_TRUE(
+ extension_management_->ReadGlobalSettings().has_restricted_allowed_types);
+ const std::vector<Manifest::Type>& allowed_types =
+ extension_management_->ReadGlobalSettings().allowed_types;
+ EXPECT_EQ(allowed_types.size(), 2u);
+ EXPECT_TRUE(std::find(allowed_types.begin(),
+ allowed_types.end(),
+ Manifest::TYPE_THEME) != allowed_types.end());
+ EXPECT_TRUE(std::find(allowed_types.begin(),
+ allowed_types.end(),
+ Manifest::TYPE_USER_SCRIPT) != allowed_types.end());
+}
+
+// Tests functionality of new preference as to deprecate legacy
+// ExtensionInstallSources policy.
+TEST_F(ExtensionManagementServiceTest, NewInstallSources) {
+ // Set the legacy preference, and verifies that it works.
+ base::ListValue allowed_sites_pref;
+ allowed_sites_pref.AppendString("https://www.example.com/foo");
+ SetPref(
+ true, pref_names::kAllowedInstallSites, allowed_sites_pref.DeepCopy());
+ EXPECT_TRUE(extension_management_->ReadGlobalSettings()
+ .has_restricted_install_sources);
+ EXPECT_TRUE(
+ extension_management_->ReadGlobalSettings()
+ .install_sources.MatchesURL(GURL("https://www.example.com/foo")));
+
+ // Set the new dictionary preference.
+ {
+ PrefUpdater updater(pref_service_.get());
+ updater.ClearInstallSources();
+ }
+ // Verifies that the new one overrides the legacy ones.
+ EXPECT_TRUE(extension_management_->ReadGlobalSettings()
+ .has_restricted_install_sources);
+ EXPECT_FALSE(
+ extension_management_->ReadGlobalSettings()
+ .install_sources.MatchesURL(GURL("https://www.example.com/foo")));
+
+ // Updates the new dictionary preference.
+ {
+ PrefUpdater updater(pref_service_.get());
+ updater.AddInstallSource("https://corp.mycompany.com/*");
+ }
+ EXPECT_TRUE(extension_management_->ReadGlobalSettings()
+ .has_restricted_install_sources);
+ EXPECT_TRUE(extension_management_->ReadGlobalSettings()
+ .install_sources.MatchesURL(
+ GURL("https://corp.mycompany.com/entry")));
+}
+
+// Tests functionality of new preference as to deprecate legacy
+// ExtensionAllowedTypes policy.
+TEST_F(ExtensionManagementServiceTest, NewAllowedTypes) {
+ // Set the legacy preference, and verifies that it works.
+ base::ListValue allowed_types_pref;
+ allowed_types_pref.AppendInteger(Manifest::TYPE_USER_SCRIPT);
+ SetPref(true, pref_names::kAllowedTypes, allowed_types_pref.DeepCopy());
+ EXPECT_TRUE(
+ extension_management_->ReadGlobalSettings().has_restricted_allowed_types);
+ EXPECT_EQ(extension_management_->ReadGlobalSettings().allowed_types.size(),
+ 1u);
+ EXPECT_EQ(extension_management_->ReadGlobalSettings().allowed_types[0],
+ Manifest::TYPE_USER_SCRIPT);
+
+ // Set the new dictionary preference.
+ {
+ PrefUpdater updater(pref_service_.get());
+ updater.ClearAllowedTypes();
+ }
+ // Verifies that the new one overrides the legacy ones.
+ EXPECT_TRUE(
+ extension_management_->ReadGlobalSettings().has_restricted_allowed_types);
+ EXPECT_EQ(extension_management_->ReadGlobalSettings().allowed_types.size(),
+ 0u);
+
+ // Updates the new dictionary preference.
+ {
+ PrefUpdater updater(pref_service_.get());
+ updater.AddAllowedType("theme");
+ }
+ EXPECT_TRUE(
+ extension_management_->ReadGlobalSettings().has_restricted_allowed_types);
+ EXPECT_EQ(extension_management_->ReadGlobalSettings().allowed_types.size(),
+ 1u);
+ EXPECT_EQ(extension_management_->ReadGlobalSettings().allowed_types[0],
+ Manifest::TYPE_THEME);
+}
+
+// Tests functionality of new preference as to deprecate legacy
+// ExtensionInstallBlacklist policy.
+TEST_F(ExtensionManagementServiceTest, NewInstallBlacklist) {
+ // Set the new dictionary preference.
+ {
+ PrefUpdater updater(pref_service_.get());
+ updater.SetBlacklistedByDefault(false); // Allowed by default.
+ updater.SetIndividualExtensionInstallationAllowed(kTargetExtension, false);
+ }
+ EXPECT_FALSE(extension_management_->BlacklistedByDefault());
+ EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode,
+ ExtensionManagement::INSTALLATION_BLOCKED);
+ EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode,
+ ExtensionManagement::INSTALLATION_ALLOWED);
+
+ // Set legacy preference.
+ base::ListValue denied_list_pref;
+ denied_list_pref.AppendString("*");
+ denied_list_pref.AppendString(kTargetExtension2);
+ SetPref(true, pref_names::kInstallDenyList, denied_list_pref.DeepCopy());
+
+ base::ListValue allowed_list_pref;
+ allowed_list_pref.AppendString(kTargetExtension);
+ SetPref(true, pref_names::kInstallAllowList, allowed_list_pref.DeepCopy());
+
+ // Verifies that the new one have higher priority over the legacy ones.
+ EXPECT_FALSE(extension_management_->BlacklistedByDefault());
+ EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode,
+ ExtensionManagement::INSTALLATION_BLOCKED);
+ EXPECT_EQ(
+ extension_management_->ReadById(kTargetExtension2).installation_mode,
+ ExtensionManagement::INSTALLATION_BLOCKED);
+ EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode,
+ ExtensionManagement::INSTALLATION_ALLOWED);
+}
+
+// Tests functionality of new preference as to deprecate legacy
+// ExtensionInstallWhitelist policy.
+TEST_F(ExtensionManagementServiceTest, NewInstallWhitelist) {
+ // Set the new dictionary preference.
+ {
+ PrefUpdater updater(pref_service_.get());
+ updater.SetBlacklistedByDefault(true); // Disallowed by default.
+ updater.SetIndividualExtensionInstallationAllowed(kTargetExtension, true);
+ }
+ EXPECT_TRUE(extension_management_->BlacklistedByDefault());
+ EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode,
+ ExtensionManagement::INSTALLATION_ALLOWED);
+ EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode,
+ ExtensionManagement::INSTALLATION_BLOCKED);
+
+ // Set legacy preference.
+ base::ListValue denied_list_pref;
+ denied_list_pref.AppendString(kTargetExtension);
+ SetPref(true, pref_names::kInstallDenyList, denied_list_pref.DeepCopy());
+
+ base::ListValue allowed_list_pref;
+ allowed_list_pref.AppendString(kTargetExtension2);
+ SetPref(true, pref_names::kInstallAllowList, allowed_list_pref.DeepCopy());
+
+ // Verifies that the new one have higher priority over the legacy ones.
+ EXPECT_TRUE(extension_management_->BlacklistedByDefault());
+ EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode,
+ ExtensionManagement::INSTALLATION_ALLOWED);
+ EXPECT_EQ(
+ extension_management_->ReadById(kTargetExtension2).installation_mode,
+ ExtensionManagement::INSTALLATION_ALLOWED);
+ EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode,
+ ExtensionManagement::INSTALLATION_BLOCKED);
+}
+
+// Tests functionality of new preference as to deprecate legacy
+// ExtensionInstallForcelist policy.
+TEST_F(ExtensionManagementServiceTest, NewInstallForcelist) {
+ // Set some legacy preferences, to verify that the new one overrides the
+ // legacy ones.
+ base::ListValue denied_list_pref;
+ denied_list_pref.AppendString(kTargetExtension);
+ SetPref(true, pref_names::kInstallDenyList, denied_list_pref.DeepCopy());
+
+ // Set the new dictionary preference.
+ {
+ PrefUpdater updater(pref_service_.get());
+ updater.SetIndividualExtensionAutoInstalled(
+ kTargetExtension, kExampleUpdateUrl, true);
+ }
+ EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode,
+ ExtensionManagement::INSTALLATION_FORCED);
+ EXPECT_EQ(extension_management_->ReadById(kTargetExtension).update_url,
+ kExampleUpdateUrl);
+ EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode,
+ ExtensionManagement::INSTALLATION_ALLOWED);
+}
+
// Tests the flag value indicating that extensions are blacklisted by default.
TEST_F(ExtensionAdminPolicyTest, BlacklistedByDefault) {
EXPECT_FALSE(BlacklistedByDefault(NULL));
« no previous file with comments | « chrome/browser/extensions/extension_management_test_util.cc ('k') | chrome/browser/extensions/extension_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698