OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <string> | 5 #include <string> |
6 | 6 |
7 #include "app/test/data/resource.h" | 7 #include "app/test/data/resource.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
11 #include "chrome/browser/policy/configuration_policy_pref_store.h" | 11 #include "chrome/browser/policy/configuration_policy_pref_store.h" |
12 #include "chrome/browser/policy/mock_configuration_policy_provider.h" | 12 #include "chrome/browser/policy/mock_configuration_policy_provider.h" |
13 #include "chrome/browser/prefs/browser_prefs.h" | 13 #include "chrome/browser/prefs/browser_prefs.h" |
14 #include "chrome/browser/prefs/command_line_pref_store.h" | 14 #include "chrome/browser/prefs/command_line_pref_store.h" |
15 #include "chrome/browser/prefs/pref_change_registrar.h" | 15 #include "chrome/browser/prefs/pref_change_registrar.h" |
16 #include "chrome/browser/prefs/pref_observer_mock.h" | 16 #include "chrome/browser/prefs/pref_observer_mock.h" |
17 #include "chrome/browser/prefs/pref_service_mock_builder.h" | 17 #include "chrome/browser/prefs/pref_service_mock_builder.h" |
18 #include "chrome/browser/prefs/pref_value_store.h" | 18 #include "chrome/browser/prefs/pref_value_store.h" |
19 #include "chrome/browser/prefs/proxy_config_dictionary.h" | |
20 #include "chrome/browser/prefs/testing_pref_store.h" | 19 #include "chrome/browser/prefs/testing_pref_store.h" |
21 #include "chrome/common/chrome_paths.h" | 20 #include "chrome/common/chrome_paths.h" |
22 #include "chrome/common/chrome_switches.h" | 21 #include "chrome/common/chrome_switches.h" |
23 #include "chrome/common/pref_names.h" | 22 #include "chrome/common/pref_names.h" |
24 #include "chrome/test/testing_pref_service.h" | 23 #include "chrome/test/testing_pref_service.h" |
25 #include "testing/gmock/include/gmock/gmock.h" | 24 #include "testing/gmock/include/gmock/gmock.h" |
26 #include "testing/gtest/include/gtest/gtest.h" | 25 #include "testing/gtest/include/gtest/gtest.h" |
27 | 26 |
28 using testing::_; | 27 using testing::_; |
29 using testing::Mock; | 28 using testing::Mock; |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 prefs.FindPreference(prefs::kStabilityLaunchCount); | 161 prefs.FindPreference(prefs::kStabilityLaunchCount); |
163 ASSERT_TRUE(pref); | 162 ASSERT_TRUE(pref); |
164 const Value* value = pref->GetValue(); | 163 const Value* value = pref->GetValue(); |
165 ASSERT_TRUE(value); | 164 ASSERT_TRUE(value); |
166 EXPECT_EQ(Value::TYPE_INTEGER, value->GetType()); | 165 EXPECT_EQ(Value::TYPE_INTEGER, value->GetType()); |
167 int actual_int_value = -1; | 166 int actual_int_value = -1; |
168 EXPECT_TRUE(value->GetAsInteger(&actual_int_value)); | 167 EXPECT_TRUE(value->GetAsInteger(&actual_int_value)); |
169 EXPECT_EQ(kTestValue, actual_int_value); | 168 EXPECT_EQ(kTestValue, actual_int_value); |
170 } | 169 } |
171 | 170 |
172 void assertProxyMode(const ProxyConfigDictionary& dict, | |
173 ProxyPrefs::ProxyMode expected_mode) { | |
174 ProxyPrefs::ProxyMode actual_mode; | |
175 ASSERT_TRUE(dict.GetMode(&actual_mode)); | |
176 EXPECT_EQ(expected_mode, actual_mode); | |
177 } | |
178 | |
179 void assertProxyServer(const ProxyConfigDictionary& dict, | |
180 const std::string& expected) { | |
181 std::string actual; | |
182 if (!expected.empty()) { | |
183 ASSERT_TRUE(dict.GetProxyServer(&actual)); | |
184 EXPECT_EQ(expected, actual); | |
185 } else { | |
186 EXPECT_FALSE(dict.GetProxyServer(&actual)); | |
187 } | |
188 } | |
189 | |
190 void assertPacUrl(const ProxyConfigDictionary& dict, | |
191 const std::string& expected) { | |
192 std::string actual; | |
193 if (!expected.empty()) { | |
194 ASSERT_TRUE(dict.GetPacUrl(&actual)); | |
195 EXPECT_EQ(expected, actual); | |
196 } else { | |
197 EXPECT_FALSE(dict.GetPacUrl(&actual)); | |
198 } | |
199 } | |
200 | |
201 void assertBypassList(const ProxyConfigDictionary& dict, | |
202 const std::string& expected) { | |
203 std::string actual; | |
204 if (!expected.empty()) { | |
205 ASSERT_TRUE(dict.GetBypassList(&actual)); | |
206 EXPECT_EQ(expected, actual); | |
207 } else { | |
208 EXPECT_FALSE(dict.GetBypassList(&actual)); | |
209 } | |
210 } | |
211 | |
212 void assertProxyModeWithoutParams(const ProxyConfigDictionary& dict, | |
213 ProxyPrefs::ProxyMode proxy_mode) { | |
214 assertProxyMode(dict, proxy_mode); | |
215 assertProxyServer(dict, ""); | |
216 assertPacUrl(dict, ""); | |
217 assertBypassList(dict, ""); | |
218 } | |
219 | |
220 TEST(PrefServiceTest, ProxyPolicyOverridesCommandLineOptions) { | |
221 CommandLine command_line(CommandLine::NO_PROGRAM); | |
222 command_line.AppendSwitchASCII(switches::kProxyBypassList, "123"); | |
223 command_line.AppendSwitchASCII(switches::kProxyServer, "789"); | |
224 scoped_ptr<policy::MockConfigurationPolicyProvider> provider( | |
225 new policy::MockConfigurationPolicyProvider()); | |
226 Value* mode_name = Value::CreateStringValue( | |
227 ProxyPrefs::kFixedServersProxyModeName); | |
228 provider->AddPolicy(policy::kPolicyProxyMode, mode_name); | |
229 provider->AddPolicy(policy::kPolicyProxyBypassList, | |
230 Value::CreateStringValue("abc")); | |
231 provider->AddPolicy(policy::kPolicyProxyServer, | |
232 Value::CreateStringValue("ghi")); | |
233 | |
234 // First verify that command-line options are set correctly when | |
235 // there is no policy in effect. | |
236 PrefServiceMockBuilder builder; | |
237 builder.WithCommandLine(&command_line); | |
238 scoped_ptr<PrefService> prefs(builder.Create()); | |
239 browser::RegisterUserPrefs(prefs.get()); | |
240 ProxyConfigDictionary dict(prefs->GetDictionary(prefs::kProxy)); | |
241 assertProxyMode(dict, ProxyPrefs::MODE_FIXED_SERVERS); | |
242 assertProxyServer(dict, "789"); | |
243 assertPacUrl(dict, ""); | |
244 assertBypassList(dict, "123"); | |
245 | |
246 // Try a second time time with the managed PrefStore in place, the | |
247 // manual proxy policy should have removed all traces of the command | |
248 // line and replaced them with the policy versions. | |
249 builder.WithCommandLine(&command_line); | |
250 builder.WithManagedPlatformProvider(provider.get()); | |
251 scoped_ptr<PrefService> prefs2(builder.Create()); | |
252 browser::RegisterUserPrefs(prefs2.get()); | |
253 ProxyConfigDictionary dict2(prefs2->GetDictionary(prefs::kProxy)); | |
254 assertProxyMode(dict2, ProxyPrefs::MODE_FIXED_SERVERS); | |
255 assertProxyServer(dict2, "ghi"); | |
256 assertPacUrl(dict2, ""); | |
257 assertBypassList(dict2, "abc"); | |
258 } | |
259 | |
260 TEST(PrefServiceTest, ProxyPolicyOverridesUnrelatedCommandLineOptions) { | |
261 CommandLine command_line(CommandLine::NO_PROGRAM); | |
262 command_line.AppendSwitchASCII(switches::kProxyBypassList, "123"); | |
263 command_line.AppendSwitchASCII(switches::kProxyServer, "789"); | |
264 scoped_ptr<policy::MockConfigurationPolicyProvider> provider( | |
265 new policy::MockConfigurationPolicyProvider()); | |
266 Value* mode_name = Value::CreateStringValue( | |
267 ProxyPrefs::kAutoDetectProxyModeName); | |
268 provider->AddPolicy(policy::kPolicyProxyMode, mode_name); | |
269 | |
270 // First verify that command-line options are set correctly when | |
271 // there is no policy in effect. | |
272 PrefServiceMockBuilder builder; | |
273 builder.WithCommandLine(&command_line); | |
274 scoped_ptr<PrefService> prefs(builder.Create()); | |
275 browser::RegisterUserPrefs(prefs.get()); | |
276 ProxyConfigDictionary dict(prefs->GetDictionary(prefs::kProxy)); | |
277 assertProxyMode(dict, ProxyPrefs::MODE_FIXED_SERVERS); | |
278 assertProxyServer(dict, "789"); | |
279 assertPacUrl(dict, ""); | |
280 assertBypassList(dict, "123"); | |
281 | |
282 // Try a second time time with the managed PrefStore in place, the | |
283 // no proxy policy should have removed all traces of the command | |
284 // line proxy settings, even though they were not the specific one | |
285 // set in policy. | |
286 builder.WithCommandLine(&command_line); | |
287 builder.WithManagedPlatformProvider(provider.get()); | |
288 scoped_ptr<PrefService> prefs2(builder.Create()); | |
289 browser::RegisterUserPrefs(prefs2.get()); | |
290 ProxyConfigDictionary dict2(prefs2->GetDictionary(prefs::kProxy)); | |
291 assertProxyModeWithoutParams(dict2, ProxyPrefs::MODE_AUTO_DETECT); | |
292 } | |
293 | |
294 TEST(PrefServiceTest, ProxyPolicyOverridesCommandLineNoProxy) { | |
295 CommandLine command_line(CommandLine::NO_PROGRAM); | |
296 command_line.AppendSwitch(switches::kNoProxyServer); | |
297 scoped_ptr<policy::MockConfigurationPolicyProvider> provider( | |
298 new policy::MockConfigurationPolicyProvider()); | |
299 Value* mode_name = Value::CreateStringValue( | |
300 ProxyPrefs::kAutoDetectProxyModeName); | |
301 provider->AddPolicy(policy::kPolicyProxyMode, mode_name); | |
302 | |
303 // First verify that command-line options are set correctly when | |
304 // there is no policy in effect. | |
305 PrefServiceMockBuilder builder; | |
306 builder.WithCommandLine(&command_line); | |
307 scoped_ptr<PrefService> prefs(builder.Create()); | |
308 browser::RegisterUserPrefs(prefs.get()); | |
309 ProxyConfigDictionary dict(prefs->GetDictionary(prefs::kProxy)); | |
310 assertProxyModeWithoutParams(dict, ProxyPrefs::MODE_DIRECT); | |
311 | |
312 // Try a second time time with the managed PrefStore in place, the | |
313 // auto-detect should be overridden. The default pref store must be | |
314 // in place with the appropriate default value for this to work. | |
315 builder.WithCommandLine(&command_line); | |
316 builder.WithManagedPlatformProvider(provider.get()); | |
317 scoped_ptr<PrefService> prefs2(builder.Create()); | |
318 browser::RegisterUserPrefs(prefs2.get()); | |
319 ProxyConfigDictionary dict2(prefs2->GetDictionary(prefs::kProxy)); | |
320 assertProxyModeWithoutParams(dict2, ProxyPrefs::MODE_AUTO_DETECT); | |
321 } | |
322 | |
323 TEST(PrefServiceTest, ProxyPolicyOverridesCommandLineAutoDetect) { | |
324 CommandLine command_line(CommandLine::NO_PROGRAM); | |
325 command_line.AppendSwitch(switches::kProxyAutoDetect); | |
326 scoped_ptr<policy::MockConfigurationPolicyProvider> provider( | |
327 new policy::MockConfigurationPolicyProvider()); | |
328 Value* mode_name = Value::CreateStringValue( | |
329 ProxyPrefs::kDirectProxyModeName); | |
330 provider->AddPolicy(policy::kPolicyProxyMode, mode_name); | |
331 | |
332 // First verify that the auto-detect is set if there is no managed | |
333 // PrefStore. | |
334 PrefServiceMockBuilder builder; | |
335 builder.WithCommandLine(&command_line); | |
336 scoped_ptr<PrefService> prefs(builder.Create()); | |
337 browser::RegisterUserPrefs(prefs.get()); | |
338 ProxyConfigDictionary dict(prefs->GetDictionary(prefs::kProxy)); | |
339 assertProxyModeWithoutParams(dict, ProxyPrefs::MODE_AUTO_DETECT); | |
340 | |
341 // Try a second time time with the managed PrefStore in place, the | |
342 // auto-detect should be overridden. The default pref store must be | |
343 // in place with the appropriate default value for this to work. | |
344 builder.WithCommandLine(&command_line); | |
345 builder.WithManagedPlatformProvider(provider.get()); | |
346 scoped_ptr<PrefService> prefs2(builder.Create()); | |
347 browser::RegisterUserPrefs(prefs2.get()); | |
348 ProxyConfigDictionary dict2(prefs2->GetDictionary(prefs::kProxy)); | |
349 assertProxyModeWithoutParams(dict2, ProxyPrefs::MODE_DIRECT); | |
350 } | |
351 | |
352 class PrefServiceSetValueTest : public testing::Test { | 171 class PrefServiceSetValueTest : public testing::Test { |
353 protected: | 172 protected: |
354 static const char kName[]; | 173 static const char kName[]; |
355 static const char kValue[]; | 174 static const char kValue[]; |
356 | 175 |
357 TestingPrefService prefs_; | 176 TestingPrefService prefs_; |
358 PrefObserverMock observer_; | 177 PrefObserverMock observer_; |
359 }; | 178 }; |
360 | 179 |
361 const char PrefServiceSetValueTest::kName[] = "name"; | 180 const char PrefServiceSetValueTest::kName[] = "name"; |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
429 | 248 |
430 EXPECT_CALL(observer_, Observe(_, _, _)).Times(0); | 249 EXPECT_CALL(observer_, Observe(_, _, _)).Times(0); |
431 prefs_.Set(kName, new_value); | 250 prefs_.Set(kName, new_value); |
432 Mock::VerifyAndClearExpectations(&observer_); | 251 Mock::VerifyAndClearExpectations(&observer_); |
433 | 252 |
434 ListValue empty; | 253 ListValue empty; |
435 observer_.Expect(&prefs_, kName, &empty); | 254 observer_.Expect(&prefs_, kName, &empty); |
436 prefs_.Set(kName, empty); | 255 prefs_.Set(kName, empty); |
437 Mock::VerifyAndClearExpectations(&observer_); | 256 Mock::VerifyAndClearExpectations(&observer_); |
438 } | 257 } |
OLD | NEW |