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

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

Issue 499313002: Add ExtensionManagement class (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkgr
Patch Set: fixes to #11 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
new file mode 100644
index 0000000000000000000000000000000000000000..c7b5d084935779445029f2f424088f41e7966913
--- /dev/null
+++ b/chrome/browser/extensions/extension_management_unittest.cc
@@ -0,0 +1,175 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <algorithm>
+
+#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/external_policy_loader.h"
+#include "extensions/browser/pref_names.h"
+#include "extensions/common/url_pattern.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace extensions {
+
+namespace {
+const char kTargetExtension[] = "abcdefghijklmnopabcdefghijklmnop";
+const char kOtherExtension[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+const char kExampleUpdateUrl[] = "http://example.com/update_url";
+} // namespace
+
+class ExtensionManagementTest : public testing::Test {
+ public:
+ ExtensionManagementTest() {}
+ virtual ~ExtensionManagementTest() {}
+
+ // testing::Test:
+ virtual void SetUp() OVERRIDE {
+ pref_service_.reset(new TestingPrefServiceSimple());
+ pref_service_->registry()->RegisterListPref(
+ pref_names::kAllowedInstallSites);
+ pref_service_->registry()->RegisterListPref(pref_names::kAllowedTypes);
+ pref_service_->registry()->RegisterListPref(pref_names::kInstallDenyList);
+ pref_service_->registry()->RegisterListPref(pref_names::kInstallAllowList);
+ pref_service_->registry()->RegisterDictionaryPref(
+ pref_names::kInstallForceList);
+ extension_management_.reset(new ExtensionManagement(pref_service_.get()));
+ }
+
+ void SetPref(bool managed, const char* path, base::Value* value) {
+ if (managed)
+ pref_service_->SetManagedPref(path, value);
+ else
+ pref_service_->SetUserPref(path, value);
+ }
+
+ void RemovePref(bool managed, const char* path) {
+ if (managed)
+ pref_service_->RemoveManagedPref(path);
+ else
+ pref_service_->RemoveUserPref(path);
+ }
+
+ void Refresh() {
+ extension_management_->Refresh();
+ }
+
+ protected:
+ scoped_ptr<TestingPrefServiceSimple> pref_service_;
+ scoped_ptr<ExtensionManagement> extension_management_;
+};
+
+// Verify that preference controlled by legacy ExtensionInstallSources policy is
+// handled well.
+TEST_F(ExtensionManagementTest, LegacyInstallSources) {
+ base::ListValue allowed_sites_pref;
+ allowed_sites_pref.AppendString("https://www.example.com/foo");
+ 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()
+ .has_restricted_install_sources);
+ EXPECT_FALSE(allowed_sites.is_empty());
+ EXPECT_TRUE(allowed_sites.MatchesURL(GURL("https://www.example.com/foo")));
+ EXPECT_FALSE(allowed_sites.MatchesURL(GURL("https://www.example.com/bar")));
+ EXPECT_TRUE(
+ allowed_sites.MatchesURL(GURL("https://corp.mycompany.com/entry")));
+ EXPECT_FALSE(
+ allowed_sites.MatchesURL(GURL("https://www.mycompany.com/entry")));
+}
+
+// Verify that preference controlled by legacy ExtensionAllowedTypes policy is
+// handled well.
+TEST_F(ExtensionManagementTest, LegacyAllowedTypes) {
+ base::ListValue allowed_types_pref;
+ allowed_types_pref.AppendInteger(Manifest::TYPE_THEME);
+ 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(
+ extension_management_->ReadGlobalSettings().has_restricted_allowed_types);
+ EXPECT_TRUE(allowed_types.size() == 2);
+ EXPECT_FALSE(std::find(allowed_types.begin(),
+ allowed_types.end(),
+ Manifest::TYPE_EXTENSION) != allowed_types.end());
+ 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());
+}
+
+// Verify that preference controlled by legacy ExtensionInstallBlacklist policy
+// is handled well.
+TEST_F(ExtensionManagementTest, LegacyInstallBlacklist) {
+ base::ListValue denied_list_pref;
+ 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,
+ ExtensionManagement::INSTALLATION_ALLOWED);
+}
+
+// Verify that preference controlled by legacy ExtensionInstallWhitelist policy
+// is handled well.
+TEST_F(ExtensionManagementTest, LegacyInstallWhitelist) {
+ base::ListValue denied_list_pref;
+ denied_list_pref.AppendString("*");
+ base::ListValue allowed_list_pref;
+ allowed_list_pref.AppendString(kTargetExtension);
+
+ 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,
+ ExtensionManagement::INSTALLATION_BLOCKED);
+
+ // 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);
+}
+
+// Verify that preference controlled by legacy ExtensionInstallForcelist policy
+// is handled well.
+TEST_F(ExtensionManagementTest, LegacyInstallForcelist) {
+ base::DictionaryValue forced_list_pref;
+ ExternalPolicyLoader::AddExtension(
+ &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,
+ kExampleUpdateUrl);
+ EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode,
+ ExtensionManagement::INSTALLATION_ALLOWED);
+
+ // 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);
+}
+
+} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698