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 |