extension_proxy_apitest.cc revision 72a454cd3513ac24fbdd0e0cb9ad70b86a99b801
1// Copyright (c) 2010 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 "chrome/browser/extensions/extension_apitest.h" 6#include "chrome/browser/prefs/pref_service.h" 7#include "chrome/browser/prefs/proxy_config_dictionary.h" 8#include "chrome/browser/profiles/profile.h" 9#include "chrome/browser/ui/browser.h" 10#include "chrome/common/chrome_switches.h" 11#include "chrome/common/extensions/extension.h" 12#include "chrome/common/pref_names.h" 13 14namespace { 15 16const char kNoServer[] = ""; 17const char kNoBypass[] = ""; 18const char kNoPac[] = ""; 19 20} // namespace 21 22class ProxySettingsApiTest : public ExtensionApiTest { 23 protected: 24 void ValidateSettings(int expected_mode, 25 const std::string& expected_server, 26 const std::string& bypass, 27 const std::string& expected_pac_url, 28 PrefService* pref_service) { 29 const PrefService::Preference* pref = 30 pref_service->FindPreference(prefs::kProxy); 31 ASSERT_TRUE(pref != NULL); 32 EXPECT_TRUE(pref->IsExtensionControlled()); 33 34 ProxyConfigDictionary dict(pref_service->GetDictionary(prefs::kProxy)); 35 36 ProxyPrefs::ProxyMode mode; 37 ASSERT_TRUE(dict.GetMode(&mode)); 38 EXPECT_EQ(expected_mode, mode); 39 40 std::string value; 41 if (!bypass.empty()) { 42 ASSERT_TRUE(dict.GetBypassList(&value)); 43 EXPECT_EQ(bypass, value); 44 } else { 45 EXPECT_FALSE(dict.GetBypassList(&value)); 46 } 47 48 if (!expected_pac_url.empty()) { 49 ASSERT_TRUE(dict.GetPacUrl(&value)); 50 EXPECT_EQ(expected_pac_url, value); 51 } else { 52 EXPECT_FALSE(dict.GetPacUrl(&value)); 53 } 54 55 if (!expected_server.empty()) { 56 ASSERT_TRUE(dict.GetProxyServer(&value)); 57 EXPECT_EQ(expected_server, value); 58 } else { 59 EXPECT_FALSE(dict.GetProxyServer(&value)); 60 } 61 } 62 63 void ExpectNoSettings(PrefService* pref_service) { 64 const PrefService::Preference* pref = 65 pref_service->FindPreference(prefs::kProxy); 66 ASSERT_TRUE(pref != NULL); 67 EXPECT_FALSE(pref->IsExtensionControlled()); 68 } 69}; 70 71// Tests direct connection settings. 72IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyDirectSettings) { 73 CommandLine::ForCurrentProcess()->AppendSwitch( 74 switches::kEnableExperimentalExtensionApis); 75 76 ASSERT_TRUE(RunExtensionTest("proxy/direct")) << message_; 77 const Extension* extension = GetSingleLoadedExtension(); 78 ASSERT_TRUE(extension); 79 80 PrefService* pref_service = browser()->profile()->GetPrefs(); 81 ValidateSettings(ProxyPrefs::MODE_DIRECT, kNoServer, kNoBypass, kNoPac, 82 pref_service); 83} 84 85// Tests auto-detect settings. 86IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyAutoSettings) { 87 CommandLine::ForCurrentProcess()->AppendSwitch( 88 switches::kEnableExperimentalExtensionApis); 89 90 ASSERT_TRUE(RunExtensionTest("proxy/auto")) << message_; 91 const Extension* extension = GetSingleLoadedExtension(); 92 ASSERT_TRUE(extension); 93 94 PrefService* pref_service = browser()->profile()->GetPrefs(); 95 ValidateSettings(ProxyPrefs::MODE_AUTO_DETECT, kNoServer, kNoBypass, kNoPac, 96 pref_service); 97} 98 99// Tests PAC proxy settings. 100IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyPacScript) { 101 CommandLine::ForCurrentProcess()->AppendSwitch( 102 switches::kEnableExperimentalExtensionApis); 103 104 ASSERT_TRUE(RunExtensionTest("proxy/pac")) << message_; 105 const Extension* extension = GetSingleLoadedExtension(); 106 ASSERT_TRUE(extension); 107 108 PrefService* pref_service = browser()->profile()->GetPrefs(); 109 ValidateSettings(ProxyPrefs::MODE_PAC_SCRIPT, kNoServer, kNoBypass, 110 "http://wpad/windows.pac", pref_service); 111} 112 113// Tests setting a single proxy to cover all schemes. 114IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyFixedSingle) { 115 CommandLine::ForCurrentProcess()->AppendSwitch( 116 switches::kEnableExperimentalExtensionApis); 117 118 ASSERT_TRUE(RunExtensionTest("proxy/single")) << message_; 119 const Extension* extension = GetSingleLoadedExtension(); 120 ASSERT_TRUE(extension); 121 122 PrefService* pref_service = browser()->profile()->GetPrefs(); 123 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS, 124 "127.0.0.1:100", 125 kNoBypass, 126 kNoPac, 127 pref_service); 128} 129 130// Tests setting to use the system's proxy settings. 131IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxySystem) { 132 CommandLine::ForCurrentProcess()->AppendSwitch( 133 switches::kEnableExperimentalExtensionApis); 134 135 ASSERT_TRUE(RunExtensionTest("proxy/system")) << message_; 136 const Extension* extension = GetSingleLoadedExtension(); 137 ASSERT_TRUE(extension); 138 139 PrefService* pref_service = browser()->profile()->GetPrefs(); 140 ValidateSettings(ProxyPrefs::MODE_SYSTEM, kNoServer, kNoBypass, kNoPac, 141 pref_service); 142} 143 144// Tests setting separate proxies for each scheme. 145IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyFixedIndividual) { 146 CommandLine::ForCurrentProcess()->AppendSwitch( 147 switches::kEnableExperimentalExtensionApis); 148 149 ASSERT_TRUE(RunExtensionTest("proxy/individual")) << message_; 150 const Extension* extension = GetSingleLoadedExtension(); 151 ASSERT_TRUE(extension); 152 153 PrefService* pref_service = browser()->profile()->GetPrefs(); 154 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS, 155 "http=1.1.1.1:80;" // http:// is pruned. 156 "https=2.2.2.2:80;" // http:// is pruned. 157 "ftp=3.3.3.3:9000;" // http:// is pruned. 158 "socks=socks4://4.4.4.4:9090", 159 kNoBypass, 160 kNoPac, 161 pref_service); 162 163 // Now check the incognito preferences. 164 pref_service = browser()->profile()->GetOffTheRecordProfile()->GetPrefs(); 165 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS, 166 "http=1.1.1.1:80;" 167 "https=2.2.2.2:80;" 168 "ftp=3.3.3.3:9000;" 169 "socks=socks4://4.4.4.4:9090", 170 kNoBypass, 171 kNoPac, 172 pref_service); 173} 174 175// Tests setting values only for incognito mode 176IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, 177 ProxyFixedIndividualIncognitoOnly) { 178 CommandLine::ForCurrentProcess()->AppendSwitch( 179 switches::kEnableExperimentalExtensionApis); 180 181 ASSERT_TRUE(RunExtensionTest("proxy/individual_incognito_only")) << message_; 182 const Extension* extension = GetSingleLoadedExtension(); 183 ASSERT_TRUE(extension); 184 185 PrefService* pref_service = browser()->profile()->GetPrefs(); 186 ExpectNoSettings(pref_service); 187 188 // Now check the incognito preferences. 189 pref_service = browser()->profile()->GetOffTheRecordProfile()->GetPrefs(); 190 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS, 191 "http=1.1.1.1:80;" 192 "https=socks5://2.2.2.2:1080;" // socks5 equals socks. 193 "ftp=3.3.3.3:9000;" 194 "socks=socks4://4.4.4.4:9090", 195 kNoBypass, 196 kNoPac, 197 pref_service); 198} 199 200// Tests setting values also for incognito mode 201IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, 202 ProxyFixedIndividualIncognitoAlso) { 203 CommandLine::ForCurrentProcess()->AppendSwitch( 204 switches::kEnableExperimentalExtensionApis); 205 206 ASSERT_TRUE(RunExtensionTest("proxy/individual_incognito_also")) << message_; 207 const Extension* extension = GetSingleLoadedExtension(); 208 ASSERT_TRUE(extension); 209 210 PrefService* pref_service = browser()->profile()->GetPrefs(); 211 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS, 212 "http=1.1.1.1:80;" 213 "https=socks5://2.2.2.2:1080;" 214 "ftp=3.3.3.3:9000;" 215 "socks=socks4://4.4.4.4:9090", 216 kNoBypass, 217 kNoPac, 218 pref_service); 219 220 // Now check the incognito preferences. 221 pref_service = browser()->profile()->GetOffTheRecordProfile()->GetPrefs(); 222 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS, 223 "http=5.5.5.5:80;" 224 "https=socks5://6.6.6.6:1080;" 225 "ftp=7.7.7.7:9000;" 226 "socks=socks4://8.8.8.8:9090", 227 kNoBypass, 228 kNoPac, 229 pref_service); 230} 231 232// Tests setting and unsetting values 233IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyFixedIndividualRemove) { 234 CommandLine::ForCurrentProcess()->AppendSwitch( 235 switches::kEnableExperimentalExtensionApis); 236 237 ASSERT_TRUE(RunExtensionTest("proxy/individual_remove")) << message_; 238 const Extension* extension = GetSingleLoadedExtension(); 239 ASSERT_TRUE(extension); 240 241 PrefService* pref_service = browser()->profile()->GetPrefs(); 242 ExpectNoSettings(pref_service); 243} 244 245IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, 246 ProxyBypass) { 247 CommandLine::ForCurrentProcess()->AppendSwitch( 248 switches::kEnableExperimentalExtensionApis); 249 250 ASSERT_TRUE(RunExtensionTest("proxy/bypass")) << message_; 251 const Extension* extension = GetSingleLoadedExtension(); 252 ASSERT_TRUE(extension); 253 254 PrefService* pref_service = browser()->profile()->GetPrefs(); 255 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS, 256 "http=1.1.1.1:80", 257 "localhost,::1,foo.bar,<local>", 258 kNoPac, 259 pref_service); 260 261 // Now check the incognito preferences. 262 pref_service = browser()->profile()->GetOffTheRecordProfile()->GetPrefs(); 263 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS, 264 "http=1.1.1.1:80", 265 "localhost,::1,foo.bar,<local>", 266 kNoPac, 267 pref_service); 268} 269