Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include <algorithm> | |
| 6 | |
| 7 #include "base/memory/scoped_ptr.h" | |
| 8 #include "base/prefs/pref_registry_simple.h" | |
| 9 #include "base/prefs/testing_pref_service.h" | |
| 10 #include "base/values.h" | |
| 11 #include "chrome/browser/extensions/extension_management.h" | |
| 12 #include "chrome/browser/extensions/external_policy_loader.h" | |
| 13 #include "extensions/browser/pref_names.h" | |
| 14 #include "extensions/common/url_pattern.h" | |
| 15 #include "testing/gtest/include/gtest/gtest.h" | |
| 16 | |
| 17 namespace extensions { | |
| 18 | |
| 19 namespace { | |
| 20 const std::string kTargetExtension = "abcdefghijklmnopabcdefghijklmnop"; | |
|
Joao da Silva
2014/09/02 19:34:02
Make this const char kTargetExtension[] = "..."; (
binjin
2014/09/02 20:02:56
Done.
| |
| 21 const std::string kOtherExtension = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; | |
| 22 const std::string kExampleUpdateUrl = "http://example.com/update_url"; | |
| 23 }; | |
|
Joao da Silva
2014/09/02 19:34:02
nit: no ";" when closing a namespace.
Add a comme
binjin
2014/09/02 20:02:56
Done.
| |
| 24 | |
| 25 class ExtensionManagementTest : public testing::Test { | |
| 26 public: | |
| 27 ExtensionManagementTest() {} | |
| 28 virtual ~ExtensionManagementTest() {} | |
| 29 | |
| 30 // testing::Test: | |
| 31 virtual void SetUp() OVERRIDE { | |
| 32 pref_service_.reset(new TestingPrefServiceSimple()); | |
|
Joao da Silva
2014/09/02 19:34:02
Why is this in a scoped_ptr and not just directly
binjin
2014/09/02 20:02:56
See below.
| |
| 33 pref_service_->registry()->RegisterListPref( | |
| 34 pref_names::kAllowedInstallSites); | |
| 35 pref_service_->registry()->RegisterListPref(pref_names::kAllowedTypes); | |
| 36 pref_service_->registry()->RegisterListPref(pref_names::kInstallDenyList); | |
| 37 pref_service_->registry()->RegisterListPref(pref_names::kInstallAllowList); | |
| 38 pref_service_->registry()->RegisterDictionaryPref( | |
| 39 pref_names::kInstallForceList); | |
| 40 extension_management_.reset(new ExtensionManagement(pref_service_.get())); | |
|
Joao da Silva
2014/09/02 19:34:02
Same for this one, can't it be directly used as a
binjin
2014/09/02 20:02:56
See below.
| |
| 41 } | |
| 42 | |
| 43 virtual void TearDown() OVERRIDE { | |
| 44 extension_management_.reset(); | |
| 45 pref_service_.reset(); | |
|
Joao da Silva
2014/09/02 19:34:02
Is this TearDown needed?
binjin
2014/09/02 20:02:56
Because extension_management_ doesn't own pref_ser
Joao da Silva
2014/09/03 09:20:40
They will be destroyed in the reverse order of dec
binjin
2014/09/03 11:28:21
I see. But in the following CL I need to reset bot
| |
| 46 } | |
| 47 | |
| 48 void SetPref(bool managed, const char* path, base::Value* value) { | |
| 49 if (managed) | |
| 50 pref_service_->SetManagedPref(path, value); | |
| 51 else | |
| 52 pref_service_->SetUserPref(path, value); | |
| 53 } | |
| 54 | |
| 55 void RemovePref(bool managed, const char* path) { | |
| 56 if (managed) | |
| 57 pref_service_->RemoveManagedPref(path); | |
| 58 else | |
| 59 pref_service_->RemoveUserPref(path); | |
| 60 } | |
| 61 | |
| 62 void Refresh() { | |
| 63 extension_management_->Refresh(); | |
| 64 } | |
| 65 | |
| 66 protected: | |
| 67 scoped_ptr<TestingPrefServiceSimple> pref_service_; | |
| 68 scoped_ptr<ExtensionManagement> extension_management_; | |
| 69 }; | |
| 70 | |
| 71 // Verify that preference controlled by legacy ExtensionInstallSources policy is | |
| 72 // handled well. | |
| 73 TEST_F(ExtensionManagementTest, LegacyInstallSources) { | |
| 74 base::ListValue allowed_sites_pref; | |
| 75 allowed_sites_pref.AppendString("https://www.example.com/foo"); | |
| 76 allowed_sites_pref.AppendString("https://corp.mycompany.com/*"); | |
| 77 SetPref( | |
| 78 true, pref_names::kAllowedInstallSites, allowed_sites_pref.DeepCopy()); | |
| 79 Refresh(); | |
| 80 const URLPatternSet* allowed_sites = | |
| 81 extension_management_->ReadGlobalSettings().install_sources.get(); | |
| 82 ASSERT_TRUE(allowed_sites); | |
| 83 EXPECT_FALSE(allowed_sites->is_empty()); | |
| 84 EXPECT_TRUE(allowed_sites->MatchesURL(GURL("https://www.example.com/foo"))); | |
| 85 EXPECT_FALSE(allowed_sites->MatchesURL(GURL("https://www.example.com/bar"))); | |
| 86 EXPECT_TRUE( | |
| 87 allowed_sites->MatchesURL(GURL("https://corp.mycompany.com/entry"))); | |
| 88 EXPECT_FALSE( | |
| 89 allowed_sites->MatchesURL(GURL("https://www.mycompany.com/entry"))); | |
| 90 } | |
| 91 | |
| 92 // Verify that preference controlled by legacy ExtensionAllowedTypes policy is | |
| 93 // handled well. | |
| 94 TEST_F(ExtensionManagementTest, LegacyAllowedTypes) { | |
| 95 base::ListValue allowed_types_pref; | |
| 96 allowed_types_pref.AppendInteger(Manifest::TYPE_THEME); | |
| 97 allowed_types_pref.AppendInteger(Manifest::TYPE_USER_SCRIPT); | |
| 98 | |
| 99 SetPref(true, pref_names::kAllowedTypes, allowed_types_pref.DeepCopy()); | |
| 100 Refresh(); | |
| 101 const std::vector<Manifest::Type>* allowed_types = | |
| 102 extension_management_->ReadGlobalSettings().allowed_types.get(); | |
| 103 ASSERT_TRUE(allowed_types); | |
| 104 EXPECT_TRUE(allowed_types->size() == 2); | |
| 105 EXPECT_FALSE(find(allowed_types->begin(), | |
|
Joao da Silva
2014/09/02 19:34:02
Use Contains from base/stl_util.h
binjin
2014/09/02 20:02:56
stl_util.h only provide ContainsKey for containers
| |
| 106 allowed_types->end(), | |
| 107 Manifest::TYPE_EXTENSION) != allowed_types->end()); | |
| 108 EXPECT_TRUE(find(allowed_types->begin(), | |
| 109 allowed_types->end(), | |
| 110 Manifest::TYPE_THEME) != allowed_types->end()); | |
| 111 EXPECT_TRUE(find(allowed_types->begin(), | |
| 112 allowed_types->end(), | |
| 113 Manifest::TYPE_USER_SCRIPT) != allowed_types->end()); | |
| 114 } | |
| 115 | |
| 116 // Verify that preference controlled by legacy ExtensionInstallBlacklist policy | |
| 117 // is handled well. | |
| 118 TEST_F(ExtensionManagementTest, LegacyInstallBlacklist) { | |
| 119 base::ListValue denied_list_pref; | |
| 120 denied_list_pref.AppendString(kTargetExtension); | |
| 121 | |
| 122 SetPref(true, pref_names::kInstallDenyList, denied_list_pref.DeepCopy()); | |
| 123 Refresh(); | |
| 124 EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, | |
| 125 ExtensionManagement::INSTALLATION_BLOCKED); | |
| 126 EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode, | |
| 127 ExtensionManagement::INSTALLATION_ALLOWED); | |
| 128 } | |
| 129 | |
| 130 // Verify that preference controlled by legacy ExtensionInstallWhitelist policy | |
| 131 // is handled well. | |
| 132 TEST_F(ExtensionManagementTest, LegacyInstallWhitelist) { | |
| 133 base::ListValue denied_list_pref; | |
| 134 denied_list_pref.AppendString("*"); | |
| 135 base::ListValue allowed_list_pref; | |
| 136 allowed_list_pref.AppendString(kTargetExtension); | |
| 137 | |
| 138 SetPref(true, pref_names::kInstallDenyList, denied_list_pref.DeepCopy()); | |
| 139 SetPref(true, pref_names::kInstallAllowList, allowed_list_pref.DeepCopy()); | |
| 140 Refresh(); | |
| 141 EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, | |
| 142 ExtensionManagement::INSTALLATION_ALLOWED); | |
| 143 EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode, | |
| 144 ExtensionManagement::INSTALLATION_BLOCKED); | |
| 145 | |
| 146 // Verify that install whitelist preference set by user is ignored. | |
| 147 RemovePref(true, pref_names::kInstallAllowList); | |
| 148 SetPref(false, pref_names::kInstallAllowList, allowed_list_pref.DeepCopy()); | |
| 149 Refresh(); | |
| 150 EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, | |
| 151 ExtensionManagement::INSTALLATION_BLOCKED); | |
| 152 } | |
| 153 | |
| 154 // Verify that preference controlled by legacy ExtensionInstallForcelist policy | |
| 155 // is handled well. | |
| 156 TEST_F(ExtensionManagementTest, LegacyInstallForcelist) { | |
| 157 base::DictionaryValue forced_list_pref; | |
| 158 ExternalPolicyLoader::AddExtension( | |
| 159 &forced_list_pref, kTargetExtension, kExampleUpdateUrl); | |
| 160 | |
| 161 SetPref(true, pref_names::kInstallForceList, forced_list_pref.DeepCopy()); | |
| 162 Refresh(); | |
| 163 EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, | |
| 164 ExtensionManagement::INSTALLATION_FORCED); | |
| 165 EXPECT_EQ(extension_management_->ReadById(kTargetExtension).update_url, | |
| 166 kExampleUpdateUrl); | |
| 167 EXPECT_EQ(extension_management_->ReadById(kOtherExtension).installation_mode, | |
| 168 ExtensionManagement::INSTALLATION_ALLOWED); | |
| 169 | |
| 170 // Verify that install forcelist preference set by user is ignored. | |
| 171 RemovePref(true, pref_names::kInstallForceList); | |
| 172 SetPref(false, pref_names::kInstallForceList, forced_list_pref.DeepCopy()); | |
| 173 Refresh(); | |
| 174 EXPECT_EQ(extension_management_->ReadById(kTargetExtension).installation_mode, | |
| 175 ExtensionManagement::INSTALLATION_ALLOWED); | |
| 176 } | |
| 177 | |
| 178 } // namespace extensions | |
| OLD | NEW |