15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/bind.h" 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/callback.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h" 9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/message_loop/message_loop.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/browser_prefs.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/prefs/pref_service_mock_factory.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/prefs/pref_service_syncable.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/proxy_config_dictionary.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/proxy_prefs.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/external_data_fetcher.h" 18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/mock_configuration_policy_provider.h" 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_map.h" 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/policy_service_impl.h" 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "policy/policy_constants.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Return; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void assertProxyMode(const ProxyConfigDictionary& dict, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyPrefs::ProxyMode expected_mode) { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyPrefs::ProxyMode actual_mode; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(dict.GetMode(&actual_mode)); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_mode, actual_mode); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void assertProxyServer(const ProxyConfigDictionary& dict, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected) { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string actual; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!expected.empty()) { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(dict.GetProxyServer(&actual)); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected, actual); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(dict.GetProxyServer(&actual)); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void assertPacUrl(const ProxyConfigDictionary& dict, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected) { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string actual; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!expected.empty()) { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(dict.GetPacUrl(&actual)); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected, actual); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(dict.GetPacUrl(&actual)); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void assertBypassList(const ProxyConfigDictionary& dict, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string actual; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!expected.empty()) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(dict.GetBypassList(&actual)); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected, actual); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(dict.GetBypassList(&actual)); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void assertProxyModeWithoutParams(const ProxyConfigDictionary& dict, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyPrefs::ProxyMode proxy_mode) { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertProxyMode(dict, proxy_mode); 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertProxyServer(dict, std::string()); 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertPacUrl(dict, std::string()); 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertBypassList(dict, std::string()); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProxyPolicyTest : public testing::Test { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyPolicyTest() 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : command_line_(CommandLine::NO_PROGRAM) {} 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(provider_, IsInitializationComplete(_)) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(true)); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyServiceImpl::Providers providers; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) providers.push_back(&provider_); 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) policy_service_.reset(new PolicyServiceImpl(providers)); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_.Init(); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_.Shutdown(); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<PrefService> CreatePrefService(bool with_managed_policies) { 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PrefServiceMockFactory factory; 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) factory.SetCommandLine(&command_line_); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (with_managed_policies) 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) factory.SetManagedPolicies(policy_service_.get()); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<user_prefs::PrefRegistrySyncable> registry( 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new user_prefs::PrefRegistrySyncable); 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<PrefServiceSyncable> prefs = 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) factory.CreateSyncable(registry.get()); 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chrome::RegisterUserProfilePrefs(registry.get()); 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return prefs.PassAs<PrefService>(); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 114a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::MessageLoop loop_; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine command_line_; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockConfigurationPolicyProvider provider_; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<PolicyServiceImpl> policy_service_; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyPolicyTest, OverridesCommandLineOptions) { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_.AppendSwitchASCII(switches::kProxyBypassList, "123"); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_.AppendSwitchASCII(switches::kProxyServer, "789"); 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Value* mode_name = 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new base::StringValue(ProxyPrefs::kFixedServersProxyModeName); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyMap policy; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy.Set(key::kProxyMode, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 1277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch mode_name, NULL); 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) policy.Set(key::kProxyBypassList, 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) POLICY_SCOPE_USER, 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new base::StringValue("abc"), 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) NULL); 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) policy.Set(key::kProxyServer, 1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) POLICY_SCOPE_USER, 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new base::StringValue("ghi"), 1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) NULL); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_.UpdateChromePolicy(policy); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // First verify that command-line options are set correctly when 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // there is no policy in effect. 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<PrefService> prefs(CreatePrefService(false)); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigDictionary dict(prefs->GetDictionary(prefs::kProxy)); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertProxyMode(dict, ProxyPrefs::MODE_FIXED_SERVERS); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertProxyServer(dict, "789"); 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertPacUrl(dict, std::string()); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertBypassList(dict, "123"); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try a second time time with the managed PrefStore in place, the 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // manual proxy policy should have removed all traces of the command 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // line and replaced them with the policy versions. 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) prefs = CreatePrefService(true); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigDictionary dict2(prefs->GetDictionary(prefs::kProxy)); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertProxyMode(dict2, ProxyPrefs::MODE_FIXED_SERVERS); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertProxyServer(dict2, "ghi"); 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertPacUrl(dict2, std::string()); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertBypassList(dict2, "abc"); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyPolicyTest, OverridesUnrelatedCommandLineOptions) { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_.AppendSwitchASCII(switches::kProxyBypassList, "123"); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_.AppendSwitchASCII(switches::kProxyServer, "789"); 1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Value* mode_name = 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new base::StringValue(ProxyPrefs::kAutoDetectProxyModeName); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyMap policy; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy.Set(key::kProxyMode, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 1677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch mode_name, NULL); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_.UpdateChromePolicy(policy); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // First verify that command-line options are set correctly when 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // there is no policy in effect. 172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<PrefService> prefs = CreatePrefService(false); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigDictionary dict(prefs->GetDictionary(prefs::kProxy)); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertProxyMode(dict, ProxyPrefs::MODE_FIXED_SERVERS); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertProxyServer(dict, "789"); 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assertPacUrl(dict, std::string()); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertBypassList(dict, "123"); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try a second time time with the managed PrefStore in place, the 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // no proxy policy should have removed all traces of the command 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // line proxy settings, even though they were not the specific one 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // set in policy. 183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) prefs = CreatePrefService(true); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigDictionary dict2(prefs->GetDictionary(prefs::kProxy)); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertProxyModeWithoutParams(dict2, ProxyPrefs::MODE_AUTO_DETECT); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyPolicyTest, OverridesCommandLineNoProxy) { 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_.AppendSwitch(switches::kNoProxyServer); 1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Value* mode_name = 1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new base::StringValue(ProxyPrefs::kAutoDetectProxyModeName); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyMap policy; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy.Set(key::kProxyMode, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 1947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch mode_name, NULL); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_.UpdateChromePolicy(policy); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // First verify that command-line options are set correctly when 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // there is no policy in effect. 199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<PrefService> prefs = CreatePrefService(false); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigDictionary dict(prefs->GetDictionary(prefs::kProxy)); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertProxyModeWithoutParams(dict, ProxyPrefs::MODE_DIRECT); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try a second time time with the managed PrefStore in place, the 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // auto-detect should be overridden. The default pref store must be 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in place with the appropriate default value for this to work. 206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) prefs = CreatePrefService(true); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigDictionary dict2(prefs->GetDictionary(prefs::kProxy)); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertProxyModeWithoutParams(dict2, ProxyPrefs::MODE_AUTO_DETECT); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyPolicyTest, OverridesCommandLineAutoDetect) { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_.AppendSwitch(switches::kProxyAutoDetect); 2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Value* mode_name = 2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new base::StringValue(ProxyPrefs::kDirectProxyModeName); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyMap policy; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy.Set(key::kProxyMode, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 2177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch mode_name, NULL); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_.UpdateChromePolicy(policy); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // First verify that the auto-detect is set if there is no managed 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PrefStore. 222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<PrefService> prefs = CreatePrefService(false); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigDictionary dict(prefs->GetDictionary(prefs::kProxy)); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertProxyModeWithoutParams(dict, ProxyPrefs::MODE_AUTO_DETECT); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try a second time time with the managed PrefStore in place, the 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // auto-detect should be overridden. The default pref store must be 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in place with the appropriate default value for this to work. 229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) prefs = CreatePrefService(true); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigDictionary dict2(prefs->GetDictionary(prefs::kProxy)); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertProxyModeWithoutParams(dict2, ProxyPrefs::MODE_DIRECT); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace policy 235