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

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

Issue 500043003: Add PolicyProvider to ExtensionManagement (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ext-1
Patch Set: fixes to #3 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
« no previous file with comments | « chrome/browser/extensions/extension_management.cc ('k') | chrome/browser/extensions/extension_service.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 c7b5d084935779445029f2f424088f41e7966913..1aad76b4049f8738d04b403fbdaca331c9ac51a0 100644
--- a/chrome/browser/extensions/extension_management_unittest.cc
+++ b/chrome/browser/extensions/extension_management_unittest.cc
@@ -11,6 +11,7 @@
#include "chrome/browser/extensions/extension_management.h"
#include "chrome/browser/extensions/external_policy_loader.h"
#include "extensions/browser/pref_names.h"
+#include "extensions/common/manifest_constants.h"
#include "extensions/common/url_pattern.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -29,6 +30,16 @@ class ExtensionManagementTest : public testing::Test {
// testing::Test:
virtual void SetUp() OVERRIDE {
+ InitPrefService();
+ }
+
+ virtual void TearDown() OVERRIDE {
+ extension_management_.reset();
+ pref_service_.reset();
+ }
Joao da Silva 2014/09/04 10:17:46 This is not needed
binjin 2014/09/04 10:43:10 Done.
+
+ void InitPrefService() {
+ extension_management_.reset();
pref_service_.reset(new TestingPrefServiceSimple());
pref_service_->registry()->RegisterListPref(
pref_names::kAllowedInstallSites);
@@ -54,15 +65,95 @@ class ExtensionManagementTest : public testing::Test {
pref_service_->RemoveUserPref(path);
}
- void Refresh() {
- extension_management_->Refresh();
- }
-
protected:
scoped_ptr<TestingPrefServiceSimple> pref_service_;
scoped_ptr<ExtensionManagement> extension_management_;
};
+class ExtensionAdminPolicyTest : public ExtensionManagementTest {
+ public:
+ ExtensionAdminPolicyTest() {}
+ virtual ~ExtensionAdminPolicyTest() {}
+
+ void CreateExtension(Manifest::Location location) {
+ base::DictionaryValue values;
+ CreateExtensionFromValues(location, &values);
+ }
+
+ void CreateHostedApp(Manifest::Location location) {
+ base::DictionaryValue values;
+ values.Set(extensions::manifest_keys::kWebURLs, new base::ListValue());
+ values.SetString(extensions::manifest_keys::kLaunchWebURL,
+ "http://www.example.com");
+ CreateExtensionFromValues(location, &values);
+ }
+
+ void CreateExtensionFromValues(Manifest::Location location,
+ base::DictionaryValue* values) {
+ values->SetString(extensions::manifest_keys::kName, "test");
+ values->SetString(extensions::manifest_keys::kVersion, "0.1");
+ std::string error;
+ extension_ = Extension::Create(base::FilePath(), location, *values,
+ Extension::NO_FLAGS, &error);
+ ASSERT_TRUE(extension_.get());
+ }
+
+ // Wrappers for legacy admin policy functions, for testing purpose only.
+ bool BlacklistedByDefault(const base::ListValue* blacklist);
+ bool UserMayLoad(const base::ListValue* blacklist,
+ const base::ListValue* whitelist,
+ const base::DictionaryValue* forcelist,
+ const base::ListValue* allowed_types,
+ const Extension* extension,
+ base::string16* error);
+ bool UserMayModifySettings(const Extension* extension, base::string16* error);
+ bool MustRemainEnabled(const Extension* extension, base::string16* error);
+
+ protected:
+ scoped_refptr<Extension> extension_;
+};
+
+bool ExtensionAdminPolicyTest::BlacklistedByDefault(
+ const base::ListValue* blacklist) {
+ InitPrefService();
+ if (blacklist)
+ SetPref(true, pref_names::kInstallDenyList, blacklist->DeepCopy());
+ return extension_management_->BlacklistedByDefault();
+}
+
+bool ExtensionAdminPolicyTest::UserMayLoad(
+ const base::ListValue* blacklist,
+ const base::ListValue* whitelist,
+ const base::DictionaryValue* forcelist,
+ const base::ListValue* allowed_types,
+ const Extension* extension,
+ base::string16* error) {
+ InitPrefService();
+ if (blacklist)
+ SetPref(true, pref_names::kInstallDenyList, blacklist->DeepCopy());
+ if (whitelist)
+ SetPref(true, pref_names::kInstallAllowList, whitelist->DeepCopy());
+ if (forcelist)
+ SetPref(true, pref_names::kInstallForceList, forcelist->DeepCopy());
+ if (allowed_types)
+ SetPref(true, pref_names::kAllowedTypes, allowed_types->DeepCopy());
+ return extension_management_->GetProvider()->UserMayLoad(extension, error);
+}
+
+bool ExtensionAdminPolicyTest::UserMayModifySettings(const Extension* extension,
+ base::string16* error) {
+ InitPrefService();
+ return extension_management_->GetProvider()->UserMayModifySettings(extension,
+ error);
+}
+
+bool ExtensionAdminPolicyTest::MustRemainEnabled(const Extension* extension,
+ base::string16* error) {
+ InitPrefService();
+ return extension_management_->GetProvider()->MustRemainEnabled(extension,
+ error);
+}
+
// Verify that preference controlled by legacy ExtensionInstallSources policy is
// handled well.
TEST_F(ExtensionManagementTest, LegacyInstallSources) {
@@ -71,7 +162,6 @@ TEST_F(ExtensionManagementTest, LegacyInstallSources) {
allowed_sites_pref.AppendString("https://corp.mycompany.com/*");
SetPref(
true, pref_names::kAllowedInstallSites, allowed_sites_pref.DeepCopy());
- Refresh();
const URLPatternSet& allowed_sites =
extension_management_->ReadGlobalSettings().install_sources;
ASSERT_TRUE(extension_management_->ReadGlobalSettings()
@@ -93,7 +183,6 @@ TEST_F(ExtensionManagementTest, LegacyAllowedTypes) {
allowed_types_pref.AppendInteger(Manifest::TYPE_USER_SCRIPT);
SetPref(true, pref_names::kAllowedTypes, allowed_types_pref.DeepCopy());
- Refresh();
const std::vector<Manifest::Type>& allowed_types =
extension_management_->ReadGlobalSettings().allowed_types;
ASSERT_TRUE(
@@ -117,7 +206,6 @@ TEST_F(ExtensionManagementTest, LegacyInstallBlacklist) {
denied_list_pref.AppendString(kTargetExtension);
SetPref(true, pref_names::kInstallDenyList, denied_list_pref.DeepCopy());
- Refresh();
EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode,
ExtensionManagement::INSTALLATION_BLOCKED);
EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode,
@@ -134,7 +222,6 @@ TEST_F(ExtensionManagementTest, LegacyInstallWhitelist) {
SetPref(true, pref_names::kInstallDenyList, denied_list_pref.DeepCopy());
SetPref(true, pref_names::kInstallAllowList, allowed_list_pref.DeepCopy());
- Refresh();
EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode,
ExtensionManagement::INSTALLATION_ALLOWED);
EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode,
@@ -143,7 +230,6 @@ TEST_F(ExtensionManagementTest, LegacyInstallWhitelist) {
// Verify that install whitelist preference set by user is ignored.
RemovePref(true, pref_names::kInstallAllowList);
SetPref(false, pref_names::kInstallAllowList, allowed_list_pref.DeepCopy());
- Refresh();
EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode,
ExtensionManagement::INSTALLATION_BLOCKED);
}
@@ -156,7 +242,6 @@ TEST_F(ExtensionManagementTest, LegacyInstallForcelist) {
&forced_list_pref, kTargetExtension, kExampleUpdateUrl);
SetPref(true, pref_names::kInstallForceList, forced_list_pref.DeepCopy());
- Refresh();
EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode,
ExtensionManagement::INSTALLATION_FORCED);
EXPECT_EQ(extension_management_->ReadById(kTargetExtension).update_url,
@@ -167,9 +252,156 @@ TEST_F(ExtensionManagementTest, LegacyInstallForcelist) {
// Verify that install forcelist preference set by user is ignored.
RemovePref(true, pref_names::kInstallForceList);
SetPref(false, pref_names::kInstallForceList, forced_list_pref.DeepCopy());
- Refresh();
EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode,
ExtensionManagement::INSTALLATION_ALLOWED);
}
+// Tests the flag value indicating that extensions are blacklisted by default.
+TEST_F(ExtensionAdminPolicyTest, BlacklistedByDefault) {
+ EXPECT_FALSE(BlacklistedByDefault(NULL));
+
+ base::ListValue blacklist;
+ blacklist.Append(new base::StringValue(kOtherExtension));
+ EXPECT_FALSE(BlacklistedByDefault(&blacklist));
+ blacklist.Append(new base::StringValue("*"));
+ EXPECT_TRUE(BlacklistedByDefault(&blacklist));
+
+ blacklist.Clear();
+ blacklist.Append(new base::StringValue("*"));
+ EXPECT_TRUE(BlacklistedByDefault(&blacklist));
+}
+
+// Tests UserMayLoad for required extensions.
+TEST_F(ExtensionAdminPolicyTest, UserMayLoadRequired) {
+ CreateExtension(Manifest::COMPONENT);
+ EXPECT_TRUE(UserMayLoad(NULL, NULL, NULL, NULL, extension_.get(), NULL));
+ base::string16 error;
+ EXPECT_TRUE(UserMayLoad(NULL, NULL, NULL, NULL, extension_.get(), &error));
+ EXPECT_TRUE(error.empty());
+
+ // Required extensions may load even if they're on the blacklist.
+ base::ListValue blacklist;
+ blacklist.Append(new base::StringValue(extension_->id()));
+ EXPECT_TRUE(
+ UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), NULL));
+
+ blacklist.Append(new base::StringValue("*"));
+ EXPECT_TRUE(
+ UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), NULL));
+}
+
+// Tests UserMayLoad when no blacklist exists, or it's empty.
+TEST_F(ExtensionAdminPolicyTest, UserMayLoadNoBlacklist) {
+ CreateExtension(Manifest::INTERNAL);
+ EXPECT_TRUE(UserMayLoad(NULL, NULL, NULL, NULL, extension_.get(), NULL));
+ base::ListValue blacklist;
+ EXPECT_TRUE(
+ UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), NULL));
+ base::string16 error;
+ EXPECT_TRUE(
+ UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), &error));
+ EXPECT_TRUE(error.empty());
+}
+
+// Tests UserMayLoad for an extension on the whitelist.
+TEST_F(ExtensionAdminPolicyTest, UserMayLoadWhitelisted) {
+ CreateExtension(Manifest::INTERNAL);
+
+ base::ListValue whitelist;
+ whitelist.Append(new base::StringValue(extension_->id()));
+ EXPECT_TRUE(
+ UserMayLoad(NULL, &whitelist, NULL, NULL, extension_.get(), NULL));
+
+ base::ListValue blacklist;
+ blacklist.Append(new base::StringValue(extension_->id()));
+ EXPECT_TRUE(
+ UserMayLoad(NULL, &whitelist, NULL, NULL, extension_.get(), NULL));
+ base::string16 error;
+ EXPECT_TRUE(
+ UserMayLoad(NULL, &whitelist, NULL, NULL, extension_.get(), &error));
+ EXPECT_TRUE(error.empty());
+}
+
+// Tests UserMayLoad for an extension on the blacklist.
+TEST_F(ExtensionAdminPolicyTest, UserMayLoadBlacklisted) {
+ CreateExtension(Manifest::INTERNAL);
+
+ // Blacklisted by default.
+ base::ListValue blacklist;
+ blacklist.Append(new base::StringValue("*"));
+ EXPECT_FALSE(
+ UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), NULL));
+ base::string16 error;
+ EXPECT_FALSE(
+ UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), &error));
+ EXPECT_FALSE(error.empty());
+
+ // Extension on the blacklist, with and without wildcard.
+ blacklist.Append(new base::StringValue(extension_->id()));
+ EXPECT_FALSE(
+ UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), NULL));
+ blacklist.Clear();
+ blacklist.Append(new base::StringValue(extension_->id()));
+ EXPECT_FALSE(
+ UserMayLoad(&blacklist, NULL, NULL, NULL, extension_.get(), NULL));
+
+ // With a whitelist. There's no such thing as a whitelist wildcard.
+ base::ListValue whitelist;
+ whitelist.Append(new base::StringValue("behllobkkfkfnphdnhnkndlbkcpglgmj"));
+ EXPECT_FALSE(
+ UserMayLoad(&blacklist, &whitelist, NULL, NULL, extension_.get(), NULL));
+ whitelist.Append(new base::StringValue("*"));
+ EXPECT_FALSE(
+ UserMayLoad(&blacklist, &whitelist, NULL, NULL, extension_.get(), NULL));
+}
+
+TEST_F(ExtensionAdminPolicyTest, UserMayLoadAllowedTypes) {
+ CreateExtension(Manifest::INTERNAL);
+ EXPECT_TRUE(UserMayLoad(NULL, NULL, NULL, NULL, extension_.get(), NULL));
+
+ base::ListValue allowed_types;
+ EXPECT_FALSE(
+ UserMayLoad(NULL, NULL, NULL, &allowed_types, extension_.get(), NULL));
+
+ allowed_types.AppendInteger(Manifest::TYPE_EXTENSION);
+ EXPECT_TRUE(
+ UserMayLoad(NULL, NULL, NULL, &allowed_types, extension_.get(), NULL));
+
+ CreateHostedApp(Manifest::INTERNAL);
+ EXPECT_FALSE(
+ UserMayLoad(NULL, NULL, NULL, &allowed_types, extension_.get(), NULL));
+
+ CreateHostedApp(Manifest::EXTERNAL_POLICY_DOWNLOAD);
+ EXPECT_FALSE(
+ UserMayLoad(NULL, NULL, NULL, &allowed_types, extension_.get(), NULL));
+}
+
+TEST_F(ExtensionAdminPolicyTest, UserMayModifySettings) {
+ CreateExtension(Manifest::INTERNAL);
+ EXPECT_TRUE(UserMayModifySettings(extension_.get(), NULL));
+ base::string16 error;
+ EXPECT_TRUE(UserMayModifySettings(extension_.get(), &error));
+ EXPECT_TRUE(error.empty());
+
+ CreateExtension(Manifest::EXTERNAL_POLICY_DOWNLOAD);
+ error.clear();
+ EXPECT_FALSE(UserMayModifySettings(extension_.get(), NULL));
+ EXPECT_FALSE(UserMayModifySettings(extension_.get(), &error));
+ EXPECT_FALSE(error.empty());
+}
+
+TEST_F(ExtensionAdminPolicyTest, MustRemainEnabled) {
+ CreateExtension(Manifest::EXTERNAL_POLICY_DOWNLOAD);
+ EXPECT_TRUE(MustRemainEnabled(extension_.get(), NULL));
+ base::string16 error;
+ EXPECT_TRUE(MustRemainEnabled(extension_.get(), &error));
+ EXPECT_FALSE(error.empty());
+
+ CreateExtension(Manifest::INTERNAL);
+ error.clear();
+ EXPECT_FALSE(MustRemainEnabled(extension_.get(), NULL));
+ EXPECT_FALSE(MustRemainEnabled(extension_.get(), &error));
+ EXPECT_TRUE(error.empty());
+}
+
} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/extension_management.cc ('k') | chrome/browser/extensions/extension_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698