blob: 4dbb80fcf475713b8cd3fbd9a83b2b27ebd343a5 [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
dcheng3b344bc22016-05-10 02:26:095#include <utility>
6
binjin1e1cc33a2014-10-09 18:08:167#include "base/json/json_reader.h"
Nick Peterson6bdf5822017-06-01 20:42:458#include "base/strings/stringprintf.h"
Nick Petersond952cb772018-03-07 15:46:039#include "build/build_config.h"
[email protected]01253d272013-10-21 17:07:5010#include "chrome/browser/extensions/external_policy_loader.h"
11#include "chrome/browser/extensions/policy_handlers.h"
[email protected]f6c403b2013-12-05 19:01:2512#include "components/policy/core/browser/policy_error_map.h"
[email protected]c4a138a2013-11-21 19:54:5713#include "components/policy/core/common/policy_map.h"
fhorschig64834b712015-09-21 14:20:2314#include "components/policy/core/common/policy_types.h"
binjin1e1cc33a2014-10-09 18:08:1615#include "components/policy/core/common/schema.h"
brettw39d6ba42016-08-24 16:56:3816#include "components/policy/policy_constants.h"
brettwb1fc1b82016-02-02 00:19:0817#include "components/prefs/pref_value_map.h"
[email protected]234fc5ff2014-01-16 23:32:2818#include "extensions/browser/pref_names.h"
[email protected]01253d272013-10-21 17:07:5019#include "testing/gtest/include/gtest/gtest.h"
20
Nick Petersond952cb772018-03-07 15:46:0321#if defined(OS_WIN)
22#include "base/win/win_util.h"
23#endif
24
[email protected]01253d272013-10-21 17:07:5025namespace extensions {
26
27const char kTestPref[] = "unit_test.test_pref";
binjin1e1cc33a2014-10-09 18:08:1628const char kTestManagementPolicy1[] =
29 "{"
30 " \"abcdefghijklmnopabcdefghijklmnop\": {"
31 " \"installation_mode\": \"force_installed\","
32 " },"
33 "}";
34const char kTestManagementPolicy2[] =
35 "{"
36 " \"abcdefghijklmnopabcdefghijklmnop\": {"
37 " \"installation_mode\": \"force_installed\","
38 " \"update_url\": \"http://example.com/app\","
39 " },"
40 " \"*\": {"
41 " \"installation_mode\": \"blocked\","
42 " },"
43 "}";
Nick Peterson6bdf5822017-06-01 20:42:4544const char kTestManagementPolicy3[] =
45 "{"
46 " \"*\": {"
47 " \"runtime_blocked_hosts\": [\"%s\"]"
48 " }"
49 "}";
50const char kTestManagementPolicy4[] =
51 "{"
52 " \"*\": {"
53 " \"runtime_allowed_hosts\": [\"%s\"]"
54 " }"
55 "}";
[email protected]01253d272013-10-21 17:07:5056
57TEST(ExtensionListPolicyHandlerTest, CheckPolicySettings) {
58 base::ListValue list;
59 policy::PolicyMap policy_map;
60 policy::PolicyErrorMap errors;
61 ExtensionListPolicyHandler handler(
62 policy::key::kExtensionInstallBlacklist, kTestPref, true);
63
64 policy_map.Set(policy::key::kExtensionInstallBlacklist,
dcheng3b344bc22016-05-10 02:26:0965 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
66 policy::POLICY_SOURCE_CLOUD, list.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:5067 errors.Clear();
68 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
69 EXPECT_TRUE(errors.empty());
70
dchengd9ea63862016-06-03 02:27:1871 list.AppendString("abcdefghijklmnopabcdefghijklmnop");
[email protected]01253d272013-10-21 17:07:5072 policy_map.Set(policy::key::kExtensionInstallBlacklist,
dcheng3b344bc22016-05-10 02:26:0973 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
74 policy::POLICY_SOURCE_CLOUD, list.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:5075 errors.Clear();
76 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
77 EXPECT_TRUE(errors.empty());
78
dchengd9ea63862016-06-03 02:27:1879 list.AppendString("*");
[email protected]01253d272013-10-21 17:07:5080 policy_map.Set(policy::key::kExtensionInstallBlacklist,
dcheng3b344bc22016-05-10 02:26:0981 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
82 policy::POLICY_SOURCE_CLOUD, list.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:5083 errors.Clear();
84 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
85 EXPECT_TRUE(errors.empty());
86
dchengd9ea63862016-06-03 02:27:1887 list.AppendString("invalid");
[email protected]01253d272013-10-21 17:07:5088 policy_map.Set(policy::key::kExtensionInstallBlacklist,
dcheng3b344bc22016-05-10 02:26:0989 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
90 policy::POLICY_SOURCE_CLOUD, list.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:5091 errors.Clear();
92 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
93 EXPECT_FALSE(errors.empty());
94 EXPECT_FALSE(
95 errors.GetErrors(policy::key::kExtensionInstallBlacklist).empty());
96}
97
Nick Peterson6bdf5822017-06-01 20:42:4598TEST(ExtensionSettingsPolicyHandlerTest, CheckPolicySettingsURL) {
Nick Peterson87ecb102018-10-16 04:55:0199 std::vector<std::string> good_urls = {"*://*.example.com", "*://example.com",
100 "http://cat.example.com", "<all_urls>"};
Nick Peterson6bdf5822017-06-01 20:42:45101
102 // Invalid URLPattern or with a non-standard path
103 std::vector<std::string> bad_urls = {
104 "://*.example.com", "*://example.com/cat*", "*://example.com/",
105 "*://*.example.com/*cat", "*://example.com/cat/*", "bad",
Nick Peterson87ecb102018-10-16 04:55:01106 "*://example.com/*", "https://example.*", "*://*.example.*"};
Nick Peterson6bdf5822017-06-01 20:42:45107
108 // Crafts and parses a ExtensionSettings policy to test URL parsing.
109 auto url_parses_successfully = [](const char* policy_template,
110 const std::string& url) {
111 std::string policy = base::StringPrintf(policy_template, url.c_str());
112 std::string error;
113 std::unique_ptr<base::Value> policy_value =
Lei Zhang582ecd12019-02-13 20:28:54114 base::JSONReader::ReadAndReturnErrorDeprecated(
Nick Peterson6bdf5822017-06-01 20:42:45115 policy, base::JSONParserOptions::JSON_ALLOW_TRAILING_COMMAS,
116 nullptr, &error);
117 if (!policy_value)
118 return false;
119
120 policy::Schema chrome_schema =
121 policy::Schema::Wrap(policy::GetChromeSchemaData());
122 policy::PolicyMap policy_map;
123 ExtensionSettingsPolicyHandler handler(chrome_schema);
124
125 policy_map.Set(policy::key::kExtensionSettings,
126 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
127 policy::POLICY_SOURCE_CLOUD, std::move(policy_value),
128 nullptr);
129
130 policy::PolicyErrorMap errors;
131 return handler.CheckPolicySettings(policy_map, &errors) && errors.empty();
132 };
133
134 for (const std::string& url : good_urls) {
135 EXPECT_TRUE(url_parses_successfully(kTestManagementPolicy3, url)) << url;
136 EXPECT_TRUE(url_parses_successfully(kTestManagementPolicy4, url)) << url;
137 }
138
139 for (const std::string& url : bad_urls) {
140 EXPECT_FALSE(url_parses_successfully(kTestManagementPolicy3, url)) << url;
141 EXPECT_FALSE(url_parses_successfully(kTestManagementPolicy4, url)) << url;
142 }
143}
144
[email protected]01253d272013-10-21 17:07:50145TEST(ExtensionListPolicyHandlerTest, ApplyPolicySettings) {
146 base::ListValue policy;
147 base::ListValue expected;
148 policy::PolicyMap policy_map;
149 PrefValueMap prefs;
150 base::Value* value = NULL;
151 ExtensionListPolicyHandler handler(
152 policy::key::kExtensionInstallBlacklist, kTestPref, false);
153
dchengd9ea63862016-06-03 02:27:18154 policy.AppendString("abcdefghijklmnopabcdefghijklmnop");
155 expected.AppendString("abcdefghijklmnopabcdefghijklmnop");
[email protected]01253d272013-10-21 17:07:50156
157 policy_map.Set(policy::key::kExtensionInstallBlacklist,
dcheng3b344bc22016-05-10 02:26:09158 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
159 policy::POLICY_SOURCE_CLOUD, policy.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:50160 handler.ApplyPolicySettings(policy_map, &prefs);
161 EXPECT_TRUE(prefs.GetValue(kTestPref, &value));
jdoerrie8551f922017-07-25 10:55:13162 EXPECT_EQ(expected, *value);
[email protected]01253d272013-10-21 17:07:50163
dchengd9ea63862016-06-03 02:27:18164 policy.AppendString("invalid");
[email protected]01253d272013-10-21 17:07:50165 policy_map.Set(policy::key::kExtensionInstallBlacklist,
dcheng3b344bc22016-05-10 02:26:09166 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
167 policy::POLICY_SOURCE_CLOUD, policy.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:50168 handler.ApplyPolicySettings(policy_map, &prefs);
169 EXPECT_TRUE(prefs.GetValue(kTestPref, &value));
jdoerrie8551f922017-07-25 10:55:13170 EXPECT_EQ(expected, *value);
[email protected]01253d272013-10-21 17:07:50171}
172
173TEST(ExtensionInstallForcelistPolicyHandlerTest, CheckPolicySettings) {
174 base::ListValue list;
175 policy::PolicyMap policy_map;
176 policy::PolicyErrorMap errors;
177 ExtensionInstallForcelistPolicyHandler handler;
178
Maksim Ivanoveaac2ff2018-04-16 16:23:24179 // Start with an empty policy.
[email protected]01253d272013-10-21 17:07:50180 policy_map.Set(policy::key::kExtensionInstallForcelist,
dcheng3b344bc22016-05-10 02:26:09181 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
182 policy::POLICY_SOURCE_CLOUD, list.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:50183 errors.Clear();
184 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
185 EXPECT_TRUE(errors.empty());
186
Maksim Ivanoveaac2ff2018-04-16 16:23:24187 // Add a correct entry. No errors should be generated.
[email protected]01253d272013-10-21 17:07:50188 list.AppendString("abcdefghijklmnopabcdefghijklmnop;http://example.com");
189 policy_map.Set(policy::key::kExtensionInstallForcelist,
dcheng3b344bc22016-05-10 02:26:09190 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
191 policy::POLICY_SOURCE_CLOUD, list.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:50192 errors.Clear();
193 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
194 EXPECT_TRUE(errors.empty());
195
196 // Add an erroneous entry. This should generate an error, but the good
197 // entry should still be translated successfully.
198 list.AppendString("adfasdf;http://example.com");
199 policy_map.Set(policy::key::kExtensionInstallForcelist,
dcheng3b344bc22016-05-10 02:26:09200 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
201 policy::POLICY_SOURCE_CLOUD, list.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:50202 errors.Clear();
203 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
204 EXPECT_EQ(1U, errors.size());
205
206 // Add an entry with bad URL, which should generate another error.
207 list.AppendString("abcdefghijklmnopabcdefghijklmnop;nourl");
208 policy_map.Set(policy::key::kExtensionInstallForcelist,
dcheng3b344bc22016-05-10 02:26:09209 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
210 policy::POLICY_SOURCE_CLOUD, list.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:50211 errors.Clear();
212 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
213 EXPECT_EQ(2U, errors.size());
214
Maksim Ivanoveaac2ff2018-04-16 16:23:24215 // Just an extension ID should be accepted.
[email protected]01253d272013-10-21 17:07:50216 list.AppendString("abcdefghijklmnopabcdefghijklmnop");
217 policy_map.Set(policy::key::kExtensionInstallForcelist,
dcheng3b344bc22016-05-10 02:26:09218 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
219 policy::POLICY_SOURCE_CLOUD, list.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:50220 errors.Clear();
221 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
Maksim Ivanoveaac2ff2018-04-16 16:23:24222 EXPECT_EQ(2U, errors.size());
[email protected]01253d272013-10-21 17:07:50223}
224
225TEST(ExtensionInstallForcelistPolicyHandlerTest, ApplyPolicySettings) {
226 base::ListValue policy;
227 base::DictionaryValue expected;
228 policy::PolicyMap policy_map;
229 PrefValueMap prefs;
230 base::Value* value = NULL;
231 ExtensionInstallForcelistPolicyHandler handler;
232
Maksim Ivanoveaac2ff2018-04-16 16:23:24233 // Start with the policy being missing. This shouldn't affect the pref.
[email protected]01253d272013-10-21 17:07:50234 handler.ApplyPolicySettings(policy_map, &prefs);
[email protected]234fc5ff2014-01-16 23:32:28235 EXPECT_FALSE(prefs.GetValue(pref_names::kInstallForceList, &value));
[email protected]01253d272013-10-21 17:07:50236 EXPECT_FALSE(value);
237
Maksim Ivanoveaac2ff2018-04-16 16:23:24238 // Set the policy to an empty value. This shouldn't affect the pref.
[email protected]01253d272013-10-21 17:07:50239 policy_map.Set(policy::key::kExtensionInstallForcelist,
dcheng3b344bc22016-05-10 02:26:09240 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
241 policy::POLICY_SOURCE_CLOUD, policy.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:50242 handler.ApplyPolicySettings(policy_map, &prefs);
[email protected]234fc5ff2014-01-16 23:32:28243 EXPECT_TRUE(prefs.GetValue(pref_names::kInstallForceList, &value));
jdoerrie8551f922017-07-25 10:55:13244 EXPECT_EQ(expected, *value);
[email protected]01253d272013-10-21 17:07:50245
Maksim Ivanoveaac2ff2018-04-16 16:23:24246 // Add a correct entry to the policy. The pref should contain a corresponding
247 // entry.
[email protected]01253d272013-10-21 17:07:50248 policy.AppendString("abcdefghijklmnopabcdefghijklmnop;http://example.com");
249 extensions::ExternalPolicyLoader::AddExtension(
250 &expected, "abcdefghijklmnopabcdefghijklmnop", "http://example.com");
251 policy_map.Set(policy::key::kExtensionInstallForcelist,
dcheng3b344bc22016-05-10 02:26:09252 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
253 policy::POLICY_SOURCE_CLOUD, policy.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:50254 handler.ApplyPolicySettings(policy_map, &prefs);
[email protected]234fc5ff2014-01-16 23:32:28255 EXPECT_TRUE(prefs.GetValue(pref_names::kInstallForceList, &value));
jdoerrie8551f922017-07-25 10:55:13256 EXPECT_EQ(expected, *value);
[email protected]01253d272013-10-21 17:07:50257
Maksim Ivanoveaac2ff2018-04-16 16:23:24258 // Add a correct entry with an omitted update URL. The pref should contain now
259 // two entries, with the default update URL substituted for the new entry.
260 // Note: the URL hardcoded below is part of the public policy contract (as
261 // documented in the policy_templates.json file), and therefore any changes to
262 // it must be carefully thought out.
263 policy.AppendString("bcdefghijklmnopabcdefghijklmnopa");
264 extensions::ExternalPolicyLoader::AddExtension(
265 &expected, "bcdefghijklmnopabcdefghijklmnopa",
266 "https://clients2.google.com/service/update2/crx");
267 policy_map.Set(policy::key::kExtensionInstallForcelist,
268 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
269 policy::POLICY_SOURCE_CLOUD, policy.CreateDeepCopy(), nullptr);
270 handler.ApplyPolicySettings(policy_map, &prefs);
271 EXPECT_TRUE(prefs.GetValue(pref_names::kInstallForceList, &value));
272 EXPECT_EQ(expected, *value);
273
274 // Add an invalid entry. The pref should still contain two previous entries.
[email protected]01253d272013-10-21 17:07:50275 policy.AppendString("invalid");
276 policy_map.Set(policy::key::kExtensionInstallForcelist,
dcheng3b344bc22016-05-10 02:26:09277 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
278 policy::POLICY_SOURCE_CLOUD, policy.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:50279 handler.ApplyPolicySettings(policy_map, &prefs);
[email protected]234fc5ff2014-01-16 23:32:28280 EXPECT_TRUE(prefs.GetValue(pref_names::kInstallForceList, &value));
jdoerrie8551f922017-07-25 10:55:13281 EXPECT_EQ(expected, *value);
[email protected]01253d272013-10-21 17:07:50282}
283
284TEST(ExtensionURLPatternListPolicyHandlerTest, CheckPolicySettings) {
285 base::ListValue list;
286 policy::PolicyMap policy_map;
287 policy::PolicyErrorMap errors;
288 ExtensionURLPatternListPolicyHandler handler(
289 policy::key::kExtensionInstallSources, kTestPref);
290
291 policy_map.Set(policy::key::kExtensionInstallSources,
dcheng3b344bc22016-05-10 02:26:09292 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
293 policy::POLICY_SOURCE_CLOUD, list.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:50294 errors.Clear();
295 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
296 EXPECT_TRUE(errors.empty());
297
dchengd9ea63862016-06-03 02:27:18298 list.AppendString("http://*.google.com/*");
[email protected]01253d272013-10-21 17:07:50299 policy_map.Set(policy::key::kExtensionInstallSources,
dcheng3b344bc22016-05-10 02:26:09300 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
301 policy::POLICY_SOURCE_CLOUD, list.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:50302 errors.Clear();
303 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
304 EXPECT_TRUE(errors.empty());
305
dchengd9ea63862016-06-03 02:27:18306 list.AppendString("<all_urls>");
[email protected]01253d272013-10-21 17:07:50307 policy_map.Set(policy::key::kExtensionInstallSources,
dcheng3b344bc22016-05-10 02:26:09308 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
309 policy::POLICY_SOURCE_CLOUD, list.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:50310 errors.Clear();
311 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
312 EXPECT_TRUE(errors.empty());
313
dchengd9ea63862016-06-03 02:27:18314 list.AppendString("invalid");
[email protected]01253d272013-10-21 17:07:50315 policy_map.Set(policy::key::kExtensionInstallSources,
dcheng3b344bc22016-05-10 02:26:09316 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
317 policy::POLICY_SOURCE_CLOUD, list.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:50318 errors.Clear();
319 EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors));
320 EXPECT_FALSE(errors.empty());
321 EXPECT_FALSE(errors.GetErrors(policy::key::kExtensionInstallSources).empty());
322
323 // URLPattern syntax has a different way to express 'all urls'. Though '*'
324 // would be compatible today, it would be brittle, so we disallow.
dchengd9ea63862016-06-03 02:27:18325 list.AppendString("*");
[email protected]01253d272013-10-21 17:07:50326 policy_map.Set(policy::key::kExtensionInstallSources,
dcheng3b344bc22016-05-10 02:26:09327 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
328 policy::POLICY_SOURCE_CLOUD, list.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:50329 errors.Clear();
330 EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors));
331 EXPECT_FALSE(errors.empty());
332 EXPECT_FALSE(errors.GetErrors(policy::key::kExtensionInstallSources).empty());
333}
334
335TEST(ExtensionURLPatternListPolicyHandlerTest, ApplyPolicySettings) {
336 base::ListValue list;
337 policy::PolicyMap policy_map;
338 PrefValueMap prefs;
339 base::Value* value = NULL;
340 ExtensionURLPatternListPolicyHandler handler(
341 policy::key::kExtensionInstallSources, kTestPref);
342
dchengd9ea63862016-06-03 02:27:18343 list.AppendString("https://corp.monkey.net/*");
[email protected]01253d272013-10-21 17:07:50344 policy_map.Set(policy::key::kExtensionInstallSources,
dcheng3b344bc22016-05-10 02:26:09345 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
346 policy::POLICY_SOURCE_CLOUD, list.CreateDeepCopy(), nullptr);
[email protected]01253d272013-10-21 17:07:50347 handler.ApplyPolicySettings(policy_map, &prefs);
348 ASSERT_TRUE(prefs.GetValue(kTestPref, &value));
jdoerrie8551f922017-07-25 10:55:13349 EXPECT_EQ(list, *value);
[email protected]01253d272013-10-21 17:07:50350}
351
binjin1e1cc33a2014-10-09 18:08:16352TEST(ExtensionSettingsPolicyHandlerTest, CheckPolicySettings) {
353 std::string error;
dchengc963c7142016-04-08 03:55:22354 std::unique_ptr<base::Value> policy_value =
Lei Zhang582ecd12019-02-13 20:28:54355 base::JSONReader::ReadAndReturnErrorDeprecated(
dchengc963c7142016-04-08 03:55:22356 kTestManagementPolicy1,
357 base::JSONParserOptions::JSON_ALLOW_TRAILING_COMMAS, NULL, &error);
binjin1e1cc33a2014-10-09 18:08:16358 ASSERT_TRUE(policy_value.get()) << error;
359
360 policy::Schema chrome_schema =
361 policy::Schema::Wrap(policy::GetChromeSchemaData());
362 policy::PolicyMap policy_map;
363 policy::PolicyErrorMap errors;
364 ExtensionSettingsPolicyHandler handler(chrome_schema);
365
366 policy_map.Set(policy::key::kExtensionSettings,
dcheng3b344bc22016-05-10 02:26:09367 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
368 policy::POLICY_SOURCE_CLOUD, std::move(policy_value), nullptr);
binjin1e1cc33a2014-10-09 18:08:16369 // CheckPolicySettings() fails due to missing update URL.
370 EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors));
371 EXPECT_FALSE(errors.empty());
372}
373
374TEST(ExtensionSettingsPolicyHandlerTest, ApplyPolicySettings) {
Nick Petersond952cb772018-03-07 15:46:03375// Mark as enterprise managed.
376#if defined(OS_WIN)
Roger Tawac1b544a82018-08-24 16:23:25377 base::win::ScopedDomainStateForTesting scoped_domain(true);
Nick Petersond952cb772018-03-07 15:46:03378#endif
379
binjin1e1cc33a2014-10-09 18:08:16380 std::string error;
dchengc963c7142016-04-08 03:55:22381 std::unique_ptr<base::Value> policy_value =
Lei Zhang582ecd12019-02-13 20:28:54382 base::JSONReader::ReadAndReturnErrorDeprecated(
dchengc963c7142016-04-08 03:55:22383 kTestManagementPolicy2,
384 base::JSONParserOptions::JSON_ALLOW_TRAILING_COMMAS, NULL, &error);
binjin1e1cc33a2014-10-09 18:08:16385 ASSERT_TRUE(policy_value.get()) << error;
386
387 policy::Schema chrome_schema =
388 policy::Schema::Wrap(policy::GetChromeSchemaData());
389 policy::PolicyMap policy_map;
390 policy::PolicyErrorMap errors;
391 PrefValueMap prefs;
392 ExtensionSettingsPolicyHandler handler(chrome_schema);
393
394 policy_map.Set(policy::key::kExtensionSettings,
dcheng3b344bc22016-05-10 02:26:09395 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
396 policy::POLICY_SOURCE_CLOUD, policy_value->CreateDeepCopy(),
397 nullptr);
binjin1e1cc33a2014-10-09 18:08:16398 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors));
399 handler.ApplyPolicySettings(policy_map, &prefs);
400 base::Value* value = NULL;
401 ASSERT_TRUE(prefs.GetValue(pref_names::kExtensionManagement, &value));
jdoerrie8551f922017-07-25 10:55:13402 EXPECT_EQ(*policy_value, *value);
binjin1e1cc33a2014-10-09 18:08:16403}
404
Nick Petersond952cb772018-03-07 15:46:03405// Only enterprise managed machines can auto install extensions from a location
406// other than the webstore https://crbug.com/809004.
407#if defined(OS_WIN)
408TEST(ExtensionSettingsPolicyHandlerTest, NonManagedOffWebstoreExtension) {
409 // Mark as not enterprise managed.
Roger Tawac1b544a82018-08-24 16:23:25410 base::win::ScopedDomainStateForTesting scoped_domain(false);
Nick Petersond952cb772018-03-07 15:46:03411
412 std::string error;
413 std::unique_ptr<base::Value> policy_value =
Lei Zhang582ecd12019-02-13 20:28:54414 base::JSONReader::ReadAndReturnErrorDeprecated(
Nick Petersond952cb772018-03-07 15:46:03415 kTestManagementPolicy2,
416 base::JSONParserOptions::JSON_ALLOW_TRAILING_COMMAS, nullptr, &error);
417 ASSERT_TRUE(policy_value.get()) << error;
418
419 policy::Schema chrome_schema =
420 policy::Schema::Wrap(policy::GetChromeSchemaData());
421 policy::PolicyMap policy_map;
422 policy::PolicyErrorMap errors;
423 PrefValueMap prefs;
424 ExtensionSettingsPolicyHandler handler(chrome_schema);
425
426 policy_map.Set(policy::key::kExtensionSettings,
427 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
428 policy::POLICY_SOURCE_CLOUD, policy_value->CreateDeepCopy(),
429 nullptr);
430 EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors));
431 EXPECT_FALSE(errors.empty());
432}
433#endif
434
[email protected]01253d272013-10-21 17:07:50435} // namespace extensions