blob: a7c11917eed5edbfde0a425afd68cb73c2bca7bc [file] [log] [blame]
[email protected]01253d272013-10-21 17:07:501// 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.
4
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"
[email protected]01253d272013-10-21 17:07:508#include "chrome/common/pref_names.h"
[email protected]f6c403b2013-12-05 19:01:259#include "components/policy/core/browser/policy_error_map.h"
[email protected]c4a138a2013-11-21 19:54:5710#include "components/policy/core/common/policy_map.h"
[email protected]234fc5ff2014-01-16 23:32:2811#include "extensions/browser/pref_names.h"
[email protected]01253d272013-10-21 17:07:5012#include "policy/policy_constants.h"
13#include "testing/gtest/include/gtest/gtest.h"
14
15namespace extensions {
16
17const char kTestPref[] = "unit_test.test_pref";
18
19TEST(ExtensionListPolicyHandlerTest, CheckPolicySettings) {
20 base::ListValue list;
21 policy::PolicyMap policy_map;
22 policy::PolicyErrorMap errors;
23 ExtensionListPolicyHandler handler(
24 policy::key::kExtensionInstallBlacklist, kTestPref, true);
25
26 policy_map.Set(policy::key::kExtensionInstallBlacklist,
27 policy::POLICY_LEVEL_MANDATORY,
28 policy::POLICY_SCOPE_USER,
29 list.DeepCopy(),
30 NULL);
31 errors.Clear();
32 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
33 EXPECT_TRUE(errors.empty());
34
[email protected]04be9802014-07-18 21:25:4535 list.Append(new base::StringValue("abcdefghijklmnopabcdefghijklmnop"));
[email protected]01253d272013-10-21 17:07:5036 policy_map.Set(policy::key::kExtensionInstallBlacklist,
37 policy::POLICY_LEVEL_MANDATORY,
38 policy::POLICY_SCOPE_USER,
39 list.DeepCopy(),
40 NULL);
41 errors.Clear();
42 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
43 EXPECT_TRUE(errors.empty());
44
[email protected]04be9802014-07-18 21:25:4545 list.Append(new base::StringValue("*"));
[email protected]01253d272013-10-21 17:07:5046 policy_map.Set(policy::key::kExtensionInstallBlacklist,
47 policy::POLICY_LEVEL_MANDATORY,
48 policy::POLICY_SCOPE_USER,
49 list.DeepCopy(),
50 NULL);
51 errors.Clear();
52 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
53 EXPECT_TRUE(errors.empty());
54
[email protected]04be9802014-07-18 21:25:4555 list.Append(new base::StringValue("invalid"));
[email protected]01253d272013-10-21 17:07:5056 policy_map.Set(policy::key::kExtensionInstallBlacklist,
57 policy::POLICY_LEVEL_MANDATORY,
58 policy::POLICY_SCOPE_USER,
59 list.DeepCopy(),
60 NULL);
61 errors.Clear();
62 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
63 EXPECT_FALSE(errors.empty());
64 EXPECT_FALSE(
65 errors.GetErrors(policy::key::kExtensionInstallBlacklist).empty());
66}
67
68TEST(ExtensionListPolicyHandlerTest, ApplyPolicySettings) {
69 base::ListValue policy;
70 base::ListValue expected;
71 policy::PolicyMap policy_map;
72 PrefValueMap prefs;
73 base::Value* value = NULL;
74 ExtensionListPolicyHandler handler(
75 policy::key::kExtensionInstallBlacklist, kTestPref, false);
76
[email protected]04be9802014-07-18 21:25:4577 policy.Append(new base::StringValue("abcdefghijklmnopabcdefghijklmnop"));
78 expected.Append(new base::StringValue("abcdefghijklmnopabcdefghijklmnop"));
[email protected]01253d272013-10-21 17:07:5079
80 policy_map.Set(policy::key::kExtensionInstallBlacklist,
81 policy::POLICY_LEVEL_MANDATORY,
82 policy::POLICY_SCOPE_USER,
83 policy.DeepCopy(),
84 NULL);
85 handler.ApplyPolicySettings(policy_map, &prefs);
86 EXPECT_TRUE(prefs.GetValue(kTestPref, &value));
87 EXPECT_TRUE(base::Value::Equals(&expected, value));
88
[email protected]04be9802014-07-18 21:25:4589 policy.Append(new base::StringValue("invalid"));
[email protected]01253d272013-10-21 17:07:5090 policy_map.Set(policy::key::kExtensionInstallBlacklist,
91 policy::POLICY_LEVEL_MANDATORY,
92 policy::POLICY_SCOPE_USER,
93 policy.DeepCopy(),
94 NULL);
95 handler.ApplyPolicySettings(policy_map, &prefs);
96 EXPECT_TRUE(prefs.GetValue(kTestPref, &value));
97 EXPECT_TRUE(base::Value::Equals(&expected, value));
98}
99
100TEST(ExtensionInstallForcelistPolicyHandlerTest, CheckPolicySettings) {
101 base::ListValue list;
102 policy::PolicyMap policy_map;
103 policy::PolicyErrorMap errors;
104 ExtensionInstallForcelistPolicyHandler handler;
105
106 policy_map.Set(policy::key::kExtensionInstallForcelist,
107 policy::POLICY_LEVEL_MANDATORY,
108 policy::POLICY_SCOPE_USER,
109 list.DeepCopy(),
110 NULL);
111 errors.Clear();
112 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
113 EXPECT_TRUE(errors.empty());
114
115 list.AppendString("abcdefghijklmnopabcdefghijklmnop;http://example.com");
116 policy_map.Set(policy::key::kExtensionInstallForcelist,
117 policy::POLICY_LEVEL_MANDATORY,
118 policy::POLICY_SCOPE_USER,
119 list.DeepCopy(),
120 NULL);
121 errors.Clear();
122 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
123 EXPECT_TRUE(errors.empty());
124
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,
131 list.DeepCopy(),
132 NULL);
133 errors.Clear();
134 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
135 EXPECT_EQ(1U, errors.size());
136
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,
142 list.DeepCopy(),
143 NULL);
144 errors.Clear();
145 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
146 EXPECT_EQ(2U, errors.size());
147
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,
153 list.DeepCopy(),
154 NULL);
155 errors.Clear();
156 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
157 EXPECT_EQ(3U, errors.size());
158}
159
160TEST(ExtensionInstallForcelistPolicyHandlerTest, ApplyPolicySettings) {
161 base::ListValue policy;
162 base::DictionaryValue expected;
163 policy::PolicyMap policy_map;
164 PrefValueMap prefs;
165 base::Value* value = NULL;
166 ExtensionInstallForcelistPolicyHandler handler;
167
168 handler.ApplyPolicySettings(policy_map, &prefs);
[email protected]234fc5ff2014-01-16 23:32:28169 EXPECT_FALSE(prefs.GetValue(pref_names::kInstallForceList, &value));
[email protected]01253d272013-10-21 17:07:50170 EXPECT_FALSE(value);
171
172 policy_map.Set(policy::key::kExtensionInstallForcelist,
173 policy::POLICY_LEVEL_MANDATORY,
174 policy::POLICY_SCOPE_USER,
175 policy.DeepCopy(),
176 NULL);
177 handler.ApplyPolicySettings(policy_map, &prefs);
[email protected]234fc5ff2014-01-16 23:32:28178 EXPECT_TRUE(prefs.GetValue(pref_names::kInstallForceList, &value));
[email protected]01253d272013-10-21 17:07:50179 EXPECT_TRUE(base::Value::Equals(&expected, value));
180
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,
187 policy.DeepCopy(),
188 NULL);
189 handler.ApplyPolicySettings(policy_map, &prefs);
[email protected]234fc5ff2014-01-16 23:32:28190 EXPECT_TRUE(prefs.GetValue(pref_names::kInstallForceList, &value));
[email protected]01253d272013-10-21 17:07:50191 EXPECT_TRUE(base::Value::Equals(&expected, value));
192
193 policy.AppendString("invalid");
194 policy_map.Set(policy::key::kExtensionInstallForcelist,
195 policy::POLICY_LEVEL_MANDATORY,
196 policy::POLICY_SCOPE_USER,
197 policy.DeepCopy(),
198 NULL);
199 handler.ApplyPolicySettings(policy_map, &prefs);
[email protected]234fc5ff2014-01-16 23:32:28200 EXPECT_TRUE(prefs.GetValue(pref_names::kInstallForceList, &value));
[email protected]01253d272013-10-21 17:07:50201 EXPECT_TRUE(base::Value::Equals(&expected, value));
202}
203
204TEST(ExtensionURLPatternListPolicyHandlerTest, CheckPolicySettings) {
205 base::ListValue list;
206 policy::PolicyMap policy_map;
207 policy::PolicyErrorMap errors;
208 ExtensionURLPatternListPolicyHandler handler(
209 policy::key::kExtensionInstallSources, kTestPref);
210
211 policy_map.Set(policy::key::kExtensionInstallSources,
212 policy::POLICY_LEVEL_MANDATORY,
213 policy::POLICY_SCOPE_USER,
214 list.DeepCopy(),
215 NULL);
216 errors.Clear();
217 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
218 EXPECT_TRUE(errors.empty());
219
[email protected]04be9802014-07-18 21:25:45220 list.Append(new base::StringValue("http://*.google.com/*"));
[email protected]01253d272013-10-21 17:07:50221 policy_map.Set(policy::key::kExtensionInstallSources,
222 policy::POLICY_LEVEL_MANDATORY,
223 policy::POLICY_SCOPE_USER,
224 list.DeepCopy(),
225 NULL);
226 errors.Clear();
227 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
228 EXPECT_TRUE(errors.empty());
229
[email protected]04be9802014-07-18 21:25:45230 list.Append(new base::StringValue("<all_urls>"));
[email protected]01253d272013-10-21 17:07:50231 policy_map.Set(policy::key::kExtensionInstallSources,
232 policy::POLICY_LEVEL_MANDATORY,
233 policy::POLICY_SCOPE_USER,
234 list.DeepCopy(),
235 NULL);
236 errors.Clear();
237 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
238 EXPECT_TRUE(errors.empty());
239
[email protected]04be9802014-07-18 21:25:45240 list.Append(new base::StringValue("invalid"));
[email protected]01253d272013-10-21 17:07:50241 policy_map.Set(policy::key::kExtensionInstallSources,
242 policy::POLICY_LEVEL_MANDATORY,
243 policy::POLICY_SCOPE_USER,
244 list.DeepCopy(),
245 NULL);
246 errors.Clear();
247 EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors));
248 EXPECT_FALSE(errors.empty());
249 EXPECT_FALSE(errors.GetErrors(policy::key::kExtensionInstallSources).empty());
250
251 // URLPattern syntax has a different way to express 'all urls'. Though '*'
252 // would be compatible today, it would be brittle, so we disallow.
[email protected]04be9802014-07-18 21:25:45253 list.Append(new base::StringValue("*"));
[email protected]01253d272013-10-21 17:07:50254 policy_map.Set(policy::key::kExtensionInstallSources,
255 policy::POLICY_LEVEL_MANDATORY,
256 policy::POLICY_SCOPE_USER,
257 list.DeepCopy(),
258 NULL);
259 errors.Clear();
260 EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors));
261 EXPECT_FALSE(errors.empty());
262 EXPECT_FALSE(errors.GetErrors(policy::key::kExtensionInstallSources).empty());
263}
264
265TEST(ExtensionURLPatternListPolicyHandlerTest, ApplyPolicySettings) {
266 base::ListValue list;
267 policy::PolicyMap policy_map;
268 PrefValueMap prefs;
269 base::Value* value = NULL;
270 ExtensionURLPatternListPolicyHandler handler(
271 policy::key::kExtensionInstallSources, kTestPref);
272
[email protected]04be9802014-07-18 21:25:45273 list.Append(new base::StringValue("https://corp.monkey.net/*"));
[email protected]01253d272013-10-21 17:07:50274 policy_map.Set(policy::key::kExtensionInstallSources,
275 policy::POLICY_LEVEL_MANDATORY,
276 policy::POLICY_SCOPE_USER,
277 list.DeepCopy(),
278 NULL);
279 handler.ApplyPolicySettings(policy_map, &prefs);
280 ASSERT_TRUE(prefs.GetValue(kTestPref, &value));
281 EXPECT_TRUE(base::Value::Equals(&list, value));
282}
283
284} // namespace extensions