| OLD | NEW |
| (Empty) |
| 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 | |
| 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 | |
| 14 namespace { | |
| 15 | |
| 16 const char kNoServer[] = ""; | |
| 17 const char kNoBypass[] = ""; | |
| 18 const char kNoPac[] = ""; | |
| 19 | |
| 20 } // namespace | |
| 21 | |
| 22 class 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. | |
| 72 // Disabled due to http://crbug.com/88937. | |
| 73 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, DISABLED_ProxyDirectSettings) { | |
| 74 ASSERT_TRUE(RunExtensionTestIncognito("proxy/direct")) << message_; | |
| 75 const Extension* extension = GetSingleLoadedExtension(); | |
| 76 ASSERT_TRUE(extension); | |
| 77 | |
| 78 PrefService* pref_service = browser()->profile()->GetPrefs(); | |
| 79 ValidateSettings(ProxyPrefs::MODE_DIRECT, kNoServer, kNoBypass, kNoPac, | |
| 80 pref_service); | |
| 81 } | |
| 82 | |
| 83 // Tests auto-detect settings. | |
| 84 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyAutoSettings) { | |
| 85 ASSERT_TRUE(RunExtensionTestIncognito("proxy/auto")) << message_; | |
| 86 const Extension* extension = GetSingleLoadedExtension(); | |
| 87 ASSERT_TRUE(extension); | |
| 88 | |
| 89 PrefService* pref_service = browser()->profile()->GetPrefs(); | |
| 90 ValidateSettings(ProxyPrefs::MODE_AUTO_DETECT, kNoServer, kNoBypass, kNoPac, | |
| 91 pref_service); | |
| 92 } | |
| 93 | |
| 94 // Tests PAC proxy settings. | |
| 95 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyPacScript) { | |
| 96 ASSERT_TRUE(RunExtensionTest("proxy/pac")) << message_; | |
| 97 const Extension* extension = GetSingleLoadedExtension(); | |
| 98 ASSERT_TRUE(extension); | |
| 99 | |
| 100 PrefService* pref_service = browser()->profile()->GetPrefs(); | |
| 101 ValidateSettings(ProxyPrefs::MODE_PAC_SCRIPT, kNoServer, kNoBypass, | |
| 102 "http://wpad/windows.pac", pref_service); | |
| 103 } | |
| 104 | |
| 105 // Tests PAC proxy settings. | |
| 106 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyPacData) { | |
| 107 ASSERT_TRUE(RunExtensionTest("proxy/pacdata")) << message_; | |
| 108 const Extension* extension = GetSingleLoadedExtension(); | |
| 109 ASSERT_TRUE(extension); | |
| 110 const char url[] = | |
| 111 "data:application/x-ns-proxy-autoconfig;base64,ZnVuY3Rpb24gRmluZFByb3h5R" | |
| 112 "m9yVVJMKHVybCwgaG9zdCkgewogIGlmIChob3N0ID09ICdmb29iYXIuY29tJykKICAgIHJl" | |
| 113 "dHVybiAnUFJPWFkgYmxhY2tob2xlOjgwJzsKICByZXR1cm4gJ0RJUkVDVCc7Cn0="; | |
| 114 PrefService* pref_service = browser()->profile()->GetPrefs(); | |
| 115 ValidateSettings(ProxyPrefs::MODE_PAC_SCRIPT, kNoServer, kNoBypass, | |
| 116 url, pref_service); | |
| 117 } | |
| 118 | |
| 119 // Tests setting a single proxy to cover all schemes. | |
| 120 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyFixedSingle) { | |
| 121 ASSERT_TRUE(RunExtensionTest("proxy/single")) << message_; | |
| 122 const Extension* extension = GetSingleLoadedExtension(); | |
| 123 ASSERT_TRUE(extension); | |
| 124 | |
| 125 PrefService* pref_service = browser()->profile()->GetPrefs(); | |
| 126 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS, | |
| 127 "127.0.0.1:100", | |
| 128 kNoBypass, | |
| 129 kNoPac, | |
| 130 pref_service); | |
| 131 } | |
| 132 | |
| 133 // Tests setting to use the system's proxy settings. | |
| 134 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxySystem) { | |
| 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. | |
| 145 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyFixedIndividual) { | |
| 146 ASSERT_TRUE(RunExtensionTestIncognito("proxy/individual")) << message_; | |
| 147 const Extension* extension = GetSingleLoadedExtension(); | |
| 148 ASSERT_TRUE(extension); | |
| 149 | |
| 150 PrefService* pref_service = browser()->profile()->GetPrefs(); | |
| 151 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS, | |
| 152 "http=1.1.1.1:80;" // http:// is pruned. | |
| 153 "https=2.2.2.2:80;" // http:// is pruned. | |
| 154 "ftp=3.3.3.3:9000;" // http:// is pruned. | |
| 155 "socks=socks4://4.4.4.4:9090", | |
| 156 kNoBypass, | |
| 157 kNoPac, | |
| 158 pref_service); | |
| 159 | |
| 160 // Now check the incognito preferences. | |
| 161 pref_service = browser()->profile()->GetOffTheRecordProfile()->GetPrefs(); | |
| 162 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS, | |
| 163 "http=1.1.1.1:80;" | |
| 164 "https=2.2.2.2:80;" | |
| 165 "ftp=3.3.3.3:9000;" | |
| 166 "socks=socks4://4.4.4.4:9090", | |
| 167 kNoBypass, | |
| 168 kNoPac, | |
| 169 pref_service); | |
| 170 } | |
| 171 | |
| 172 // Tests setting values only for incognito mode | |
| 173 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, | |
| 174 ProxyFixedIndividualIncognitoOnly) { | |
| 175 ASSERT_TRUE(RunExtensionTestIncognito("proxy/individual_incognito_only")) << | |
| 176 message_; | |
| 177 const Extension* extension = GetSingleLoadedExtension(); | |
| 178 ASSERT_TRUE(extension); | |
| 179 | |
| 180 PrefService* pref_service = browser()->profile()->GetPrefs(); | |
| 181 ExpectNoSettings(pref_service); | |
| 182 | |
| 183 // Now check the incognito preferences. | |
| 184 pref_service = browser()->profile()->GetOffTheRecordProfile()->GetPrefs(); | |
| 185 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS, | |
| 186 "http=1.1.1.1:80;" | |
| 187 "https=socks5://2.2.2.2:1080;" | |
| 188 "ftp=3.3.3.3:9000;" | |
| 189 "socks=socks4://4.4.4.4:9090", | |
| 190 kNoBypass, | |
| 191 kNoPac, | |
| 192 pref_service); | |
| 193 } | |
| 194 | |
| 195 // Tests setting values also for incognito mode | |
| 196 // Test disabled due to http://crbug.com/88972. | |
| 197 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, | |
| 198 DISABLED_ProxyFixedIndividualIncognitoAlso) { | |
| 199 ASSERT_TRUE(RunExtensionTestIncognito("proxy/individual_incognito_also")) << | |
| 200 message_; | |
| 201 const Extension* extension = GetSingleLoadedExtension(); | |
| 202 ASSERT_TRUE(extension); | |
| 203 | |
| 204 PrefService* pref_service = browser()->profile()->GetPrefs(); | |
| 205 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS, | |
| 206 "http=1.1.1.1:80;" | |
| 207 "https=socks5://2.2.2.2:1080;" | |
| 208 "ftp=3.3.3.3:9000;" | |
| 209 "socks=socks4://4.4.4.4:9090", | |
| 210 kNoBypass, | |
| 211 kNoPac, | |
| 212 pref_service); | |
| 213 | |
| 214 // Now check the incognito preferences. | |
| 215 pref_service = browser()->profile()->GetOffTheRecordProfile()->GetPrefs(); | |
| 216 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS, | |
| 217 "http=5.5.5.5:80;" | |
| 218 "https=socks5://6.6.6.6:1080;" | |
| 219 "ftp=7.7.7.7:9000;" | |
| 220 "socks=socks4://8.8.8.8:9090", | |
| 221 kNoBypass, | |
| 222 kNoPac, | |
| 223 pref_service); | |
| 224 } | |
| 225 | |
| 226 // Tests setting and unsetting values | |
| 227 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyFixedIndividualRemove) { | |
| 228 ASSERT_TRUE(RunExtensionTest("proxy/individual_remove")) << message_; | |
| 229 const Extension* extension = GetSingleLoadedExtension(); | |
| 230 ASSERT_TRUE(extension); | |
| 231 | |
| 232 PrefService* pref_service = browser()->profile()->GetPrefs(); | |
| 233 ExpectNoSettings(pref_service); | |
| 234 } | |
| 235 | |
| 236 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, | |
| 237 ProxyBypass) { | |
| 238 ASSERT_TRUE(RunExtensionTestIncognito("proxy/bypass")) << message_; | |
| 239 const Extension* extension = GetSingleLoadedExtension(); | |
| 240 ASSERT_TRUE(extension); | |
| 241 | |
| 242 PrefService* pref_service = browser()->profile()->GetPrefs(); | |
| 243 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS, | |
| 244 "http=1.1.1.1:80", | |
| 245 "localhost,::1,foo.bar,<local>", | |
| 246 kNoPac, | |
| 247 pref_service); | |
| 248 | |
| 249 // Now check the incognito preferences. | |
| 250 pref_service = browser()->profile()->GetOffTheRecordProfile()->GetPrefs(); | |
| 251 ValidateSettings(ProxyPrefs::MODE_FIXED_SERVERS, | |
| 252 "http=1.1.1.1:80", | |
| 253 "localhost,::1,foo.bar,<local>", | |
| 254 kNoPac, | |
| 255 pref_service); | |
| 256 } | |
| 257 | |
| 258 // This test sets proxy to an inavalid host "does.not.exist" and then fetches | |
| 259 // a page from localhost, expecting an error since host is invalid. | |
| 260 // On ChromeOS, localhost is by default bypassed, so the page from localhost | |
| 261 // will be fetched successfully, resulting in no error. Hence this test | |
| 262 // shouldn't run on ChromeOS. | |
| 263 #if defined(OS_CHROMEOS) | |
| 264 #define MAYBE_ProxyEventsInvalidProxy DISABLED_ProxyEventsInvalidProxy | |
| 265 #else | |
| 266 #define MAYBE_ProxyEventsInvalidProxy ProxyEventsInvalidProxy | |
| 267 #endif // defined(OS_CHROMEOS) | |
| 268 | |
| 269 // Tests error events: invalid proxy | |
| 270 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, MAYBE_ProxyEventsInvalidProxy) { | |
| 271 ASSERT_TRUE(StartTestServer()); | |
| 272 ASSERT_TRUE( | |
| 273 RunExtensionSubtest("proxy/events", "invalid_proxy.html")) << message_; | |
| 274 } | |
| 275 | |
| 276 // Tests error events: PAC script parse error. | |
| 277 IN_PROC_BROWSER_TEST_F(ProxySettingsApiTest, ProxyEventsParseError) { | |
| 278 ASSERT_TRUE( | |
| 279 RunExtensionSubtest("proxy/events", "parse_error.html")) << message_; | |
| 280 } | |
| OLD | NEW |