OLD | NEW |
| (Empty) |
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. | |
4 | |
5 #include <string> | |
6 | |
7 #include "base/memory/scoped_ptr.h" | |
8 #include "base/values.h" | |
9 #include "chrome/browser/net/proxy_policy_handler.h" | |
10 #include "components/policy/core/browser/configuration_policy_pref_store.h" | |
11 #include "components/policy/core/browser/configuration_policy_pref_store_test.h" | |
12 #include "components/policy/core/common/policy_service_impl.h" | |
13 #include "components/policy/core/common/policy_types.h" | |
14 #include "components/proxy_config/proxy_config_dictionary.h" | |
15 #include "components/proxy_config/proxy_config_pref_names.h" | |
16 #include "policy/policy_constants.h" | |
17 #include "testing/gtest/include/gtest/gtest.h" | |
18 | |
19 namespace policy { | |
20 | |
21 // Test cases for the proxy policy settings. | |
22 class ProxyPolicyHandlerTest | |
23 : public ConfigurationPolicyPrefStoreTest { | |
24 public: | |
25 void SetUp() override { | |
26 ConfigurationPolicyPrefStoreTest::SetUp(); | |
27 handler_list_.AddHandler( | |
28 make_scoped_ptr<ConfigurationPolicyHandler>(new ProxyPolicyHandler)); | |
29 // Reset the PolicyServiceImpl to one that has the policy fixup | |
30 // preprocessor. The previous store must be nulled out first so that it | |
31 // removes itself from the service's observer list. | |
32 store_ = NULL; | |
33 policy_service_.reset(new PolicyServiceImpl(providers_)); | |
34 store_ = new ConfigurationPolicyPrefStore( | |
35 policy_service_.get(), &handler_list_, POLICY_LEVEL_MANDATORY); | |
36 } | |
37 | |
38 protected: | |
39 // Verify that all the proxy prefs are set to the specified expected values. | |
40 void VerifyProxyPrefs( | |
41 const std::string& expected_proxy_server, | |
42 const std::string& expected_proxy_pac_url, | |
43 const std::string& expected_proxy_bypass_list, | |
44 const ProxyPrefs::ProxyMode& expected_proxy_mode) { | |
45 const base::Value* value = NULL; | |
46 ASSERT_TRUE(store_->GetValue(proxy_config::prefs::kProxy, &value)); | |
47 ASSERT_EQ(base::Value::TYPE_DICTIONARY, value->GetType()); | |
48 ProxyConfigDictionary dict( | |
49 static_cast<const base::DictionaryValue*>(value)); | |
50 std::string s; | |
51 if (expected_proxy_server.empty()) { | |
52 EXPECT_FALSE(dict.GetProxyServer(&s)); | |
53 } else { | |
54 ASSERT_TRUE(dict.GetProxyServer(&s)); | |
55 EXPECT_EQ(expected_proxy_server, s); | |
56 } | |
57 if (expected_proxy_pac_url.empty()) { | |
58 EXPECT_FALSE(dict.GetPacUrl(&s)); | |
59 } else { | |
60 ASSERT_TRUE(dict.GetPacUrl(&s)); | |
61 EXPECT_EQ(expected_proxy_pac_url, s); | |
62 } | |
63 if (expected_proxy_bypass_list.empty()) { | |
64 EXPECT_FALSE(dict.GetBypassList(&s)); | |
65 } else { | |
66 ASSERT_TRUE(dict.GetBypassList(&s)); | |
67 EXPECT_EQ(expected_proxy_bypass_list, s); | |
68 } | |
69 ProxyPrefs::ProxyMode mode; | |
70 ASSERT_TRUE(dict.GetMode(&mode)); | |
71 EXPECT_EQ(expected_proxy_mode, mode); | |
72 } | |
73 }; | |
74 | |
75 TEST_F(ProxyPolicyHandlerTest, ManualOptions) { | |
76 PolicyMap policy; | |
77 policy.Set(key::kProxyBypassList, | |
78 POLICY_LEVEL_MANDATORY, | |
79 POLICY_SCOPE_USER, | |
80 POLICY_SOURCE_CLOUD, | |
81 new base::StringValue("http://chromium.org/override"), | |
82 NULL); | |
83 policy.Set(key::kProxyServer, | |
84 POLICY_LEVEL_MANDATORY, | |
85 POLICY_SCOPE_USER, | |
86 POLICY_SOURCE_CLOUD, | |
87 new base::StringValue("chromium.org"), | |
88 NULL); | |
89 policy.Set( | |
90 key::kProxyServerMode, | |
91 POLICY_LEVEL_MANDATORY, | |
92 POLICY_SCOPE_USER, | |
93 POLICY_SOURCE_CLOUD, | |
94 new base::FundamentalValue( | |
95 ProxyPolicyHandler::PROXY_MANUALLY_CONFIGURED_PROXY_SERVER_MODE), | |
96 NULL); | |
97 UpdateProviderPolicy(policy); | |
98 | |
99 VerifyProxyPrefs("chromium.org", | |
100 std::string(), | |
101 "http://chromium.org/override", | |
102 ProxyPrefs::MODE_FIXED_SERVERS); | |
103 } | |
104 | |
105 TEST_F(ProxyPolicyHandlerTest, ManualOptionsReversedApplyOrder) { | |
106 PolicyMap policy; | |
107 policy.Set( | |
108 key::kProxyServerMode, | |
109 POLICY_LEVEL_MANDATORY, | |
110 POLICY_SCOPE_USER, | |
111 POLICY_SOURCE_CLOUD, | |
112 new base::FundamentalValue( | |
113 ProxyPolicyHandler::PROXY_MANUALLY_CONFIGURED_PROXY_SERVER_MODE), | |
114 NULL); | |
115 policy.Set(key::kProxyBypassList, | |
116 POLICY_LEVEL_MANDATORY, | |
117 POLICY_SCOPE_USER, | |
118 POLICY_SOURCE_CLOUD, | |
119 new base::StringValue("http://chromium.org/override"), | |
120 NULL); | |
121 policy.Set(key::kProxyServer, | |
122 POLICY_LEVEL_MANDATORY, | |
123 POLICY_SCOPE_USER, | |
124 POLICY_SOURCE_CLOUD, | |
125 new base::StringValue("chromium.org"), | |
126 NULL); | |
127 UpdateProviderPolicy(policy); | |
128 | |
129 VerifyProxyPrefs("chromium.org", | |
130 std::string(), | |
131 "http://chromium.org/override", | |
132 ProxyPrefs::MODE_FIXED_SERVERS); | |
133 } | |
134 | |
135 TEST_F(ProxyPolicyHandlerTest, ManualOptionsInvalid) { | |
136 PolicyMap policy; | |
137 policy.Set( | |
138 key::kProxyServerMode, | |
139 POLICY_LEVEL_MANDATORY, | |
140 POLICY_SCOPE_USER, | |
141 POLICY_SOURCE_CLOUD, | |
142 new base::FundamentalValue( | |
143 ProxyPolicyHandler::PROXY_MANUALLY_CONFIGURED_PROXY_SERVER_MODE), | |
144 NULL); | |
145 UpdateProviderPolicy(policy); | |
146 | |
147 const base::Value* value = NULL; | |
148 EXPECT_FALSE(store_->GetValue(proxy_config::prefs::kProxy, &value)); | |
149 } | |
150 | |
151 TEST_F(ProxyPolicyHandlerTest, NoProxyServerMode) { | |
152 PolicyMap policy; | |
153 policy.Set(key::kProxyServerMode, | |
154 POLICY_LEVEL_MANDATORY, | |
155 POLICY_SCOPE_USER, | |
156 POLICY_SOURCE_CLOUD, | |
157 new base::FundamentalValue(ProxyPolicyHandler::PROXY_SERVER_MODE), | |
158 NULL); | |
159 UpdateProviderPolicy(policy); | |
160 VerifyProxyPrefs( | |
161 std::string(), std::string(), std::string(), ProxyPrefs::MODE_DIRECT); | |
162 } | |
163 | |
164 TEST_F(ProxyPolicyHandlerTest, NoProxyModeName) { | |
165 PolicyMap policy; | |
166 policy.Set(key::kProxyMode, | |
167 POLICY_LEVEL_MANDATORY, | |
168 POLICY_SCOPE_USER, | |
169 POLICY_SOURCE_CLOUD, | |
170 new base::StringValue(ProxyPrefs::kDirectProxyModeName), | |
171 NULL); | |
172 UpdateProviderPolicy(policy); | |
173 VerifyProxyPrefs( | |
174 std::string(), std::string(), std::string(), ProxyPrefs::MODE_DIRECT); | |
175 } | |
176 | |
177 TEST_F(ProxyPolicyHandlerTest, AutoDetectProxyServerMode) { | |
178 PolicyMap policy; | |
179 policy.Set(key::kProxyServerMode, | |
180 POLICY_LEVEL_MANDATORY, | |
181 POLICY_SCOPE_USER, | |
182 POLICY_SOURCE_CLOUD, | |
183 new base::FundamentalValue( | |
184 ProxyPolicyHandler::PROXY_AUTO_DETECT_PROXY_SERVER_MODE), | |
185 NULL); | |
186 UpdateProviderPolicy(policy); | |
187 VerifyProxyPrefs(std::string(), | |
188 std::string(), | |
189 std::string(), | |
190 ProxyPrefs::MODE_AUTO_DETECT); | |
191 } | |
192 | |
193 TEST_F(ProxyPolicyHandlerTest, AutoDetectProxyModeName) { | |
194 PolicyMap policy; | |
195 policy.Set(key::kProxyMode, | |
196 POLICY_LEVEL_MANDATORY, | |
197 POLICY_SCOPE_USER, | |
198 POLICY_SOURCE_CLOUD, | |
199 new base::StringValue(ProxyPrefs::kAutoDetectProxyModeName), | |
200 NULL); | |
201 UpdateProviderPolicy(policy); | |
202 VerifyProxyPrefs(std::string(), | |
203 std::string(), | |
204 std::string(), | |
205 ProxyPrefs::MODE_AUTO_DETECT); | |
206 } | |
207 | |
208 TEST_F(ProxyPolicyHandlerTest, PacScriptProxyMode) { | |
209 PolicyMap policy; | |
210 policy.Set(key::kProxyPacUrl, | |
211 POLICY_LEVEL_MANDATORY, | |
212 POLICY_SCOPE_USER, | |
213 POLICY_SOURCE_CLOUD, | |
214 new base::StringValue("http://short.org/proxy.pac"), | |
215 NULL); | |
216 policy.Set(key::kProxyMode, | |
217 POLICY_LEVEL_MANDATORY, | |
218 POLICY_SCOPE_USER, | |
219 POLICY_SOURCE_CLOUD, | |
220 new base::StringValue(ProxyPrefs::kPacScriptProxyModeName), | |
221 NULL); | |
222 UpdateProviderPolicy(policy); | |
223 VerifyProxyPrefs(std::string(), | |
224 "http://short.org/proxy.pac", | |
225 std::string(), | |
226 ProxyPrefs::MODE_PAC_SCRIPT); | |
227 } | |
228 | |
229 TEST_F(ProxyPolicyHandlerTest, PacScriptProxyModeInvalid) { | |
230 PolicyMap policy; | |
231 policy.Set(key::kProxyMode, | |
232 POLICY_LEVEL_MANDATORY, | |
233 POLICY_SCOPE_USER, | |
234 POLICY_SOURCE_CLOUD, | |
235 new base::StringValue(ProxyPrefs::kPacScriptProxyModeName), | |
236 NULL); | |
237 UpdateProviderPolicy(policy); | |
238 const base::Value* value = NULL; | |
239 EXPECT_FALSE(store_->GetValue(proxy_config::prefs::kProxy, &value)); | |
240 } | |
241 | |
242 // Regression test for http://crbug.com/78016, CPanel returns empty strings | |
243 // for unset properties. | |
244 TEST_F(ProxyPolicyHandlerTest, PacScriptProxyModeBug78016) { | |
245 PolicyMap policy; | |
246 policy.Set(key::kProxyServer, | |
247 POLICY_LEVEL_MANDATORY, | |
248 POLICY_SCOPE_USER, | |
249 POLICY_SOURCE_CLOUD, | |
250 new base::StringValue(std::string()), | |
251 NULL); | |
252 policy.Set(key::kProxyPacUrl, | |
253 POLICY_LEVEL_MANDATORY, | |
254 POLICY_SCOPE_USER, | |
255 POLICY_SOURCE_CLOUD, | |
256 new base::StringValue("http://short.org/proxy.pac"), | |
257 NULL); | |
258 policy.Set(key::kProxyMode, | |
259 POLICY_LEVEL_MANDATORY, | |
260 POLICY_SCOPE_USER, | |
261 POLICY_SOURCE_CLOUD, | |
262 new base::StringValue(ProxyPrefs::kPacScriptProxyModeName), | |
263 NULL); | |
264 UpdateProviderPolicy(policy); | |
265 VerifyProxyPrefs(std::string(), | |
266 "http://short.org/proxy.pac", | |
267 std::string(), | |
268 ProxyPrefs::MODE_PAC_SCRIPT); | |
269 } | |
270 | |
271 TEST_F(ProxyPolicyHandlerTest, UseSystemProxyServerMode) { | |
272 PolicyMap policy; | |
273 policy.Set(key::kProxyServerMode, | |
274 POLICY_LEVEL_MANDATORY, | |
275 POLICY_SCOPE_USER, | |
276 POLICY_SOURCE_CLOUD, | |
277 new base::FundamentalValue( | |
278 ProxyPolicyHandler::PROXY_USE_SYSTEM_PROXY_SERVER_MODE), | |
279 NULL); | |
280 UpdateProviderPolicy(policy); | |
281 VerifyProxyPrefs( | |
282 std::string(), std::string(), std::string(), ProxyPrefs::MODE_SYSTEM); | |
283 } | |
284 | |
285 TEST_F(ProxyPolicyHandlerTest, UseSystemProxyMode) { | |
286 PolicyMap policy; | |
287 policy.Set(key::kProxyMode, | |
288 POLICY_LEVEL_MANDATORY, | |
289 POLICY_SCOPE_USER, | |
290 POLICY_SOURCE_CLOUD, | |
291 new base::StringValue(ProxyPrefs::kSystemProxyModeName), | |
292 NULL); | |
293 UpdateProviderPolicy(policy); | |
294 VerifyProxyPrefs( | |
295 std::string(), std::string(), std::string(), ProxyPrefs::MODE_SYSTEM); | |
296 } | |
297 | |
298 TEST_F(ProxyPolicyHandlerTest, | |
299 ProxyModeOverridesProxyServerMode) { | |
300 PolicyMap policy; | |
301 policy.Set(key::kProxyServerMode, | |
302 POLICY_LEVEL_MANDATORY, | |
303 POLICY_SCOPE_USER, | |
304 POLICY_SOURCE_CLOUD, | |
305 new base::FundamentalValue(ProxyPolicyHandler::PROXY_SERVER_MODE), | |
306 NULL); | |
307 policy.Set(key::kProxyMode, | |
308 POLICY_LEVEL_MANDATORY, | |
309 POLICY_SCOPE_USER, | |
310 POLICY_SOURCE_CLOUD, | |
311 new base::StringValue(ProxyPrefs::kAutoDetectProxyModeName), | |
312 NULL); | |
313 UpdateProviderPolicy(policy); | |
314 VerifyProxyPrefs(std::string(), | |
315 std::string(), | |
316 std::string(), | |
317 ProxyPrefs::MODE_AUTO_DETECT); | |
318 } | |
319 | |
320 TEST_F(ProxyPolicyHandlerTest, ProxyInvalid) { | |
321 // No mode expects all three parameters being set. | |
322 PolicyMap policy; | |
323 policy.Set(key::kProxyPacUrl, | |
324 POLICY_LEVEL_MANDATORY, | |
325 POLICY_SCOPE_USER, | |
326 POLICY_SOURCE_CLOUD, | |
327 new base::StringValue("http://short.org/proxy.pac"), | |
328 NULL); | |
329 policy.Set(key::kProxyBypassList, | |
330 POLICY_LEVEL_MANDATORY, | |
331 POLICY_SCOPE_USER, | |
332 POLICY_SOURCE_CLOUD, | |
333 new base::StringValue("http://chromium.org/override"), | |
334 NULL); | |
335 policy.Set(key::kProxyServer, | |
336 POLICY_LEVEL_MANDATORY, | |
337 POLICY_SCOPE_USER, | |
338 POLICY_SOURCE_CLOUD, | |
339 new base::StringValue("chromium.org"), | |
340 NULL); | |
341 for (int i = 0; i < ProxyPolicyHandler::MODE_COUNT; ++i) { | |
342 policy.Set(key::kProxyServerMode, | |
343 POLICY_LEVEL_MANDATORY, | |
344 POLICY_SCOPE_USER, | |
345 POLICY_SOURCE_CLOUD, | |
346 new base::FundamentalValue(i), | |
347 NULL); | |
348 UpdateProviderPolicy(policy); | |
349 const base::Value* value = NULL; | |
350 EXPECT_FALSE(store_->GetValue(proxy_config::prefs::kProxy, &value)); | |
351 } | |
352 } | |
353 | |
354 } // namespace policy | |
OLD | NEW |