1 // Copyright 2013 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.
5 #include "base/prefs/pref_value_map.h"
6 #include "chrome/browser/extensions/external_policy_loader.h"
7 #include "chrome/browser/extensions/policy_handlers.h"
8 #include "chrome/common/pref_names.h"
9 #include "components/policy/core/browser/policy_error_map.h"
10 #include "components/policy/core/common/policy_map.h"
11 #include "extensions/browser/pref_names.h"
12 #include "policy/policy_constants.h"
13 #include "testing/gtest/include/gtest/gtest.h"
15 namespace extensions {
17 const char kTestPref[] = "unit_test.test_pref";
19 TEST(ExtensionListPolicyHandlerTest, CheckPolicySettings) {
21 policy::PolicyMap policy_map;
22 policy::PolicyErrorMap errors;
23 ExtensionListPolicyHandler handler(
24 policy::key::kExtensionInstallBlacklist, kTestPref, true);
26 policy_map.Set(policy::key::kExtensionInstallBlacklist,
27 policy::POLICY_LEVEL_MANDATORY,
28 policy::POLICY_SCOPE_USER,
32 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
33 EXPECT_TRUE(errors.empty());
35 list.Append(new base::StringValue("abcdefghijklmnopabcdefghijklmnop"));
36 policy_map.Set(policy::key::kExtensionInstallBlacklist,
37 policy::POLICY_LEVEL_MANDATORY,
38 policy::POLICY_SCOPE_USER,
42 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
43 EXPECT_TRUE(errors.empty());
45 list.Append(new base::StringValue("*"));
46 policy_map.Set(policy::key::kExtensionInstallBlacklist,
47 policy::POLICY_LEVEL_MANDATORY,
48 policy::POLICY_SCOPE_USER,
52 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
53 EXPECT_TRUE(errors.empty());
55 list.Append(new base::StringValue("invalid"));
56 policy_map.Set(policy::key::kExtensionInstallBlacklist,
57 policy::POLICY_LEVEL_MANDATORY,
58 policy::POLICY_SCOPE_USER,
62 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
63 EXPECT_FALSE(errors.empty());
65 errors.GetErrors(policy::key::kExtensionInstallBlacklist).empty());
68 TEST(ExtensionListPolicyHandlerTest, ApplyPolicySettings) {
69 base::ListValue policy;
70 base::ListValue expected;
71 policy::PolicyMap policy_map;
73 base::Value* value = NULL;
74 ExtensionListPolicyHandler handler(
75 policy::key::kExtensionInstallBlacklist, kTestPref, false);
77 policy.Append(new base::StringValue("abcdefghijklmnopabcdefghijklmnop"));
78 expected.Append(new base::StringValue("abcdefghijklmnopabcdefghijklmnop"));
80 policy_map.Set(policy::key::kExtensionInstallBlacklist,
81 policy::POLICY_LEVEL_MANDATORY,
82 policy::POLICY_SCOPE_USER,
85 handler.ApplyPolicySettings(policy_map, &prefs);
86 EXPECT_TRUE(prefs.GetValue(kTestPref, &value));
87 EXPECT_TRUE(base::Value::Equals(&expected, value));
89 policy.Append(new base::StringValue("invalid"));
90 policy_map.Set(policy::key::kExtensionInstallBlacklist,
91 policy::POLICY_LEVEL_MANDATORY,
92 policy::POLICY_SCOPE_USER,
95 handler.ApplyPolicySettings(policy_map, &prefs);
96 EXPECT_TRUE(prefs.GetValue(kTestPref, &value));
97 EXPECT_TRUE(base::Value::Equals(&expected, value));
100 TEST(ExtensionInstallForcelistPolicyHandlerTest, CheckPolicySettings) {
101 base::ListValue list;
102 policy::PolicyMap policy_map;
103 policy::PolicyErrorMap errors;
104 ExtensionInstallForcelistPolicyHandler handler;
106 policy_map.Set(policy::key::kExtensionInstallForcelist,
107 policy::POLICY_LEVEL_MANDATORY,
108 policy::POLICY_SCOPE_USER,
112 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
113 EXPECT_TRUE(errors.empty());
115 list.AppendString("abcdefghijklmnopabcdefghijklmnop;http://example.com");
116 policy_map.Set(policy::key::kExtensionInstallForcelist,
117 policy::POLICY_LEVEL_MANDATORY,
118 policy::POLICY_SCOPE_USER,
122 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
123 EXPECT_TRUE(errors.empty());
125 // Add an erroneous entry. This should generate an error, but the good
126 // entry should still be translated successfully.
127 list.AppendString("adfasdf;http://example.com");
128 policy_map.Set(policy::key::kExtensionInstallForcelist,
129 policy::POLICY_LEVEL_MANDATORY,
130 policy::POLICY_SCOPE_USER,
134 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
135 EXPECT_EQ(1U, errors.size());
137 // Add an entry with bad URL, which should generate another error.
138 list.AppendString("abcdefghijklmnopabcdefghijklmnop;nourl");
139 policy_map.Set(policy::key::kExtensionInstallForcelist,
140 policy::POLICY_LEVEL_MANDATORY,
141 policy::POLICY_SCOPE_USER,
145 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
146 EXPECT_EQ(2U, errors.size());
148 // Just an extension ID should also generate an error.
149 list.AppendString("abcdefghijklmnopabcdefghijklmnop");
150 policy_map.Set(policy::key::kExtensionInstallForcelist,
151 policy::POLICY_LEVEL_MANDATORY,
152 policy::POLICY_SCOPE_USER,
156 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
157 EXPECT_EQ(3U, errors.size());
160 TEST(ExtensionInstallForcelistPolicyHandlerTest, ApplyPolicySettings) {
161 base::ListValue policy;
162 base::DictionaryValue expected;
163 policy::PolicyMap policy_map;
165 base::Value* value = NULL;
166 ExtensionInstallForcelistPolicyHandler handler;
168 handler.ApplyPolicySettings(policy_map, &prefs);
169 EXPECT_FALSE(prefs.GetValue(pref_names::kInstallForceList, &value));
172 policy_map.Set(policy::key::kExtensionInstallForcelist,
173 policy::POLICY_LEVEL_MANDATORY,
174 policy::POLICY_SCOPE_USER,
177 handler.ApplyPolicySettings(policy_map, &prefs);
178 EXPECT_TRUE(prefs.GetValue(pref_names::kInstallForceList, &value));
179 EXPECT_TRUE(base::Value::Equals(&expected, value));
181 policy.AppendString("abcdefghijklmnopabcdefghijklmnop;http://example.com");
182 extensions::ExternalPolicyLoader::AddExtension(
183 &expected, "abcdefghijklmnopabcdefghijklmnop", "http://example.com");
184 policy_map.Set(policy::key::kExtensionInstallForcelist,
185 policy::POLICY_LEVEL_MANDATORY,
186 policy::POLICY_SCOPE_USER,
189 handler.ApplyPolicySettings(policy_map, &prefs);
190 EXPECT_TRUE(prefs.GetValue(pref_names::kInstallForceList, &value));
191 EXPECT_TRUE(base::Value::Equals(&expected, value));
193 policy.AppendString("invalid");
194 policy_map.Set(policy::key::kExtensionInstallForcelist,
195 policy::POLICY_LEVEL_MANDATORY,
196 policy::POLICY_SCOPE_USER,
199 handler.ApplyPolicySettings(policy_map, &prefs);
200 EXPECT_TRUE(prefs.GetValue(pref_names::kInstallForceList, &value));
201 EXPECT_TRUE(base::Value::Equals(&expected, value));
204 TEST(ExtensionURLPatternListPolicyHandlerTest, CheckPolicySettings) {
205 base::ListValue list;
206 policy::PolicyMap policy_map;
207 policy::PolicyErrorMap errors;
208 ExtensionURLPatternListPolicyHandler handler(
209 policy::key::kExtensionInstallSources, kTestPref);
211 policy_map.Set(policy::key::kExtensionInstallSources,
212 policy::POLICY_LEVEL_MANDATORY,
213 policy::POLICY_SCOPE_USER,
217 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
218 EXPECT_TRUE(errors.empty());
220 list.Append(new base::StringValue("http://*.google.com/*"));
221 policy_map.Set(policy::key::kExtensionInstallSources,
222 policy::POLICY_LEVEL_MANDATORY,
223 policy::POLICY_SCOPE_USER,
227 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
228 EXPECT_TRUE(errors.empty());
230 list.Append(new base::StringValue("<all_urls>"));
231 policy_map.Set(policy::key::kExtensionInstallSources,
232 policy::POLICY_LEVEL_MANDATORY,
233 policy::POLICY_SCOPE_USER,
237 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
238 EXPECT_TRUE(errors.empty());
240 list.Append(new base::StringValue("invalid"));
241 policy_map.Set(policy::key::kExtensionInstallSources,
242 policy::POLICY_LEVEL_MANDATORY,
243 policy::POLICY_SCOPE_USER,
247 EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors));
248 EXPECT_FALSE(errors.empty());
249 EXPECT_FALSE(errors.GetErrors(policy::key::kExtensionInstallSources).empty());
251 // URLPattern syntax has a different way to express 'all urls'. Though '*'
252 // would be compatible today, it would be brittle, so we disallow.
253 list.Append(new base::StringValue("*"));
254 policy_map.Set(policy::key::kExtensionInstallSources,
255 policy::POLICY_LEVEL_MANDATORY,
256 policy::POLICY_SCOPE_USER,
260 EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors));
261 EXPECT_FALSE(errors.empty());
262 EXPECT_FALSE(errors.GetErrors(policy::key::kExtensionInstallSources).empty());
265 TEST(ExtensionURLPatternListPolicyHandlerTest, ApplyPolicySettings) {
266 base::ListValue list;
267 policy::PolicyMap policy_map;
269 base::Value* value = NULL;
270 ExtensionURLPatternListPolicyHandler handler(
271 policy::key::kExtensionInstallSources, kTestPref);
273 list.Append(new base::StringValue("https://corp.monkey.net/*"));
274 policy_map.Set(policy::key::kExtensionInstallSources,
275 policy::POLICY_LEVEL_MANDATORY,
276 policy::POLICY_SCOPE_USER,
279 handler.ApplyPolicySettings(policy_map, &prefs);
280 ASSERT_TRUE(prefs.GetValue(kTestPref, &value));
281 EXPECT_TRUE(base::Value::Equals(&list, value));
284 } // namespace extensions