OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "net/proxy/proxy_service.h" | 5 #include "net/proxy/proxy_service.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 ASSERT_EQ(1u, resolver->pending_requests().size()); | 209 ASSERT_EQ(1u, resolver->pending_requests().size()); |
210 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 210 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
211 | 211 |
212 // Set the result in proxy resolver. | 212 // Set the result in proxy resolver. |
213 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy"); | 213 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy"); |
214 resolver->pending_requests()[0]->CompleteNow(OK); | 214 resolver->pending_requests()[0]->CompleteNow(OK); |
215 | 215 |
216 EXPECT_EQ(OK, callback.WaitForResult()); | 216 EXPECT_EQ(OK, callback.WaitForResult()); |
217 EXPECT_FALSE(info.is_direct()); | 217 EXPECT_FALSE(info.is_direct()); |
218 EXPECT_EQ("foopy:80", info.proxy_server().ToURI()); | 218 EXPECT_EQ("foopy:80", info.proxy_server().ToURI()); |
| 219 EXPECT_TRUE(info.did_use_pac_script()); |
219 | 220 |
220 // Check the NetLog was filled correctly. | 221 // Check the NetLog was filled correctly. |
221 CapturingNetLog::CapturedEntryList entries; | 222 CapturingNetLog::CapturedEntryList entries; |
222 log.GetEntries(&entries); | 223 log.GetEntries(&entries); |
223 | 224 |
224 EXPECT_EQ(5u, entries.size()); | 225 EXPECT_EQ(5u, entries.size()); |
225 EXPECT_TRUE(LogContainsBeginEvent( | 226 EXPECT_TRUE(LogContainsBeginEvent( |
226 entries, 0, NetLog::TYPE_PROXY_SERVICE)); | 227 entries, 0, NetLog::TYPE_PROXY_SERVICE)); |
227 EXPECT_TRUE(LogContainsBeginEvent( | 228 EXPECT_TRUE(LogContainsBeginEvent( |
228 entries, 1, NetLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC)); | 229 entries, 1, NetLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC)); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
285 ASSERT_EQ(1u, resolver->pending_requests().size()); | 286 ASSERT_EQ(1u, resolver->pending_requests().size()); |
286 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 287 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
287 | 288 |
288 // Set the result in proxy resolver. | 289 // Set the result in proxy resolver. |
289 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy:8080"); | 290 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy:8080"); |
290 resolver->pending_requests()[0]->CompleteNow(OK); | 291 resolver->pending_requests()[0]->CompleteNow(OK); |
291 | 292 |
292 EXPECT_EQ(OK, callback1.WaitForResult()); | 293 EXPECT_EQ(OK, callback1.WaitForResult()); |
293 EXPECT_FALSE(info.is_direct()); | 294 EXPECT_FALSE(info.is_direct()); |
294 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI()); | 295 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI()); |
| 296 EXPECT_TRUE(info.did_use_pac_script()); |
295 | 297 |
296 // Now, imagine that connecting to foopy:8080 fails: there is nothing | 298 // Now, imagine that connecting to foopy:8080 fails: there is nothing |
297 // left to fallback to, since our proxy list was NOT terminated by | 299 // left to fallback to, since our proxy list was NOT terminated by |
298 // DIRECT. | 300 // DIRECT. |
299 TestCompletionCallback callback2; | 301 TestCompletionCallback callback2; |
300 rv = service.ReconsiderProxyAfterError( | 302 rv = service.ReconsiderProxyAfterError( |
301 url, &info, callback2.callback(), NULL, BoundNetLog()); | 303 url, &info, callback2.callback(), NULL, BoundNetLog()); |
302 // ReconsiderProxyAfterError returns error indicating nothing left. | 304 // ReconsiderProxyAfterError returns error indicating nothing left. |
303 EXPECT_EQ(ERR_FAILED, rv); | 305 EXPECT_EQ(ERR_FAILED, rv); |
304 EXPECT_TRUE(info.is_empty()); | 306 EXPECT_TRUE(info.is_empty()); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
375 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); | 377 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); |
376 | 378 |
377 // Fallback 4 -- Nothing to fall back to! | 379 // Fallback 4 -- Nothing to fall back to! |
378 TestCompletionCallback callback5; | 380 TestCompletionCallback callback5; |
379 rv = service.ReconsiderProxyAfterError(url, &info, callback5.callback(), NULL, | 381 rv = service.ReconsiderProxyAfterError(url, &info, callback5.callback(), NULL, |
380 BoundNetLog()); | 382 BoundNetLog()); |
381 EXPECT_EQ(ERR_FAILED, rv); | 383 EXPECT_EQ(ERR_FAILED, rv); |
382 EXPECT_TRUE(info.is_empty()); | 384 EXPECT_TRUE(info.is_empty()); |
383 } | 385 } |
384 | 386 |
| 387 TEST_F(ProxyServiceTest, PAC_ConfigSourcePropagates) { |
| 388 // Test whether the ProxyConfigSource set by the ProxyConfigService is applied |
| 389 // to ProxyInfo after the proxy is resolved via a PAC script. |
| 390 ProxyConfig config = |
| 391 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); |
| 392 config.set_source(PROXY_CONFIG_SOURCE_TEST); |
| 393 |
| 394 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 395 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 396 ProxyService service(config_service, resolver, NULL); |
| 397 |
| 398 // Resolve something. |
| 399 GURL url("http://www.google.com/"); |
| 400 ProxyInfo info; |
| 401 TestCompletionCallback callback; |
| 402 int rv = service.ResolveProxy( |
| 403 url, &info, callback.callback(), NULL, BoundNetLog()); |
| 404 ASSERT_EQ(ERR_IO_PENDING, rv); |
| 405 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 406 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 407 |
| 408 // Set the result in proxy resolver. |
| 409 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy"); |
| 410 resolver->pending_requests()[0]->CompleteNow(OK); |
| 411 |
| 412 EXPECT_EQ(OK, callback.WaitForResult()); |
| 413 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); |
| 414 EXPECT_TRUE(info.did_use_pac_script()); |
| 415 } |
| 416 |
385 TEST_F(ProxyServiceTest, ProxyResolverFails) { | 417 TEST_F(ProxyServiceTest, ProxyResolverFails) { |
386 // Test what happens when the ProxyResolver fails. The download and setting | 418 // Test what happens when the ProxyResolver fails. The download and setting |
387 // of the PAC script have already succeeded, so this corresponds with a | 419 // of the PAC script have already succeeded, so this corresponds with a |
388 // javascript runtime error while calling FindProxyForURL(). | 420 // javascript runtime error while calling FindProxyForURL(). |
389 | 421 |
390 MockProxyConfigService* config_service = | 422 MockProxyConfigService* config_service = |
391 new MockProxyConfigService("http://foopy/proxy.pac"); | 423 new MockProxyConfigService("http://foopy/proxy.pac"); |
392 | 424 |
393 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 425 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
394 | 426 |
(...skipping 718 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1113 ProxyInfo info; | 1145 ProxyInfo info; |
1114 TestCompletionCallback callback; | 1146 TestCompletionCallback callback; |
1115 int rv = service.ResolveProxy(test_url, &info, callback.callback(), NULL, | 1147 int rv = service.ResolveProxy(test_url, &info, callback.callback(), NULL, |
1116 BoundNetLog()); | 1148 BoundNetLog()); |
1117 EXPECT_EQ(OK, rv); | 1149 EXPECT_EQ(OK, rv); |
1118 EXPECT_FALSE(info.is_direct()); | 1150 EXPECT_FALSE(info.is_direct()); |
1119 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1151 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
1120 } | 1152 } |
1121 } | 1153 } |
1122 | 1154 |
| 1155 TEST_F(ProxyServiceTest, ProxyConfigSourcePropagates) { |
| 1156 // Test that the proxy config source is set correctly when resolving proxies |
| 1157 // using manual proxy rules. Namely, the config source should only be set if |
| 1158 // any of the rules were applied. |
| 1159 { |
| 1160 ProxyConfig config; |
| 1161 config.set_source(PROXY_CONFIG_SOURCE_TEST); |
| 1162 config.proxy_rules().ParseFromString("https=foopy2:8080"); |
| 1163 ProxyService service( |
| 1164 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL); |
| 1165 GURL test_url("http://www.google.com"); |
| 1166 ProxyInfo info; |
| 1167 TestCompletionCallback callback; |
| 1168 int rv = service.ResolveProxy(test_url, &info, callback.callback(), NULL, |
| 1169 BoundNetLog()); |
| 1170 ASSERT_EQ(OK, rv); |
| 1171 // Should be SOURCE_TEST, even if there are no HTTP proxies configured. |
| 1172 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); |
| 1173 } |
| 1174 { |
| 1175 ProxyConfig config; |
| 1176 config.set_source(PROXY_CONFIG_SOURCE_TEST); |
| 1177 config.proxy_rules().ParseFromString("https=foopy2:8080"); |
| 1178 ProxyService service( |
| 1179 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL); |
| 1180 GURL test_url("https://www.google.com"); |
| 1181 ProxyInfo info; |
| 1182 TestCompletionCallback callback; |
| 1183 int rv = service.ResolveProxy(test_url, &info, callback.callback(), NULL, |
| 1184 BoundNetLog()); |
| 1185 ASSERT_EQ(OK, rv); |
| 1186 // Used the HTTPS proxy. So source should be TEST. |
| 1187 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); |
| 1188 } |
| 1189 { |
| 1190 ProxyConfig config; |
| 1191 config.set_source(PROXY_CONFIG_SOURCE_TEST); |
| 1192 ProxyService service( |
| 1193 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL); |
| 1194 GURL test_url("http://www.google.com"); |
| 1195 ProxyInfo info; |
| 1196 TestCompletionCallback callback; |
| 1197 int rv = service.ResolveProxy(test_url, &info, callback.callback(), NULL, |
| 1198 BoundNetLog()); |
| 1199 ASSERT_EQ(OK, rv); |
| 1200 // ProxyConfig is empty. Source should still be TEST. |
| 1201 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); |
| 1202 } |
| 1203 } |
| 1204 |
1123 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries | 1205 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries |
1124 // fall back to the SOCKS proxy. | 1206 // fall back to the SOCKS proxy. |
1125 TEST_F(ProxyServiceTest, DefaultProxyFallbackToSOCKS) { | 1207 TEST_F(ProxyServiceTest, DefaultProxyFallbackToSOCKS) { |
1126 ProxyConfig config; | 1208 ProxyConfig config; |
1127 config.proxy_rules().ParseFromString("http=foopy1:8080;socks=foopy2:1080"); | 1209 config.proxy_rules().ParseFromString("http=foopy1:8080;socks=foopy2:1080"); |
1128 config.set_auto_detect(false); | 1210 config.set_auto_detect(false); |
1129 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 1211 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
1130 config.proxy_rules().type); | 1212 config.proxy_rules().type); |
1131 | 1213 |
1132 { | 1214 { |
(...skipping 1439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2572 ProxyInfo info3; | 2654 ProxyInfo info3; |
2573 TestCompletionCallback callback3; | 2655 TestCompletionCallback callback3; |
2574 rv = service.ResolveProxy( | 2656 rv = service.ResolveProxy( |
2575 GURL("http://request3"), &info3, callback3.callback(), NULL, | 2657 GURL("http://request3"), &info3, callback3.callback(), NULL, |
2576 BoundNetLog()); | 2658 BoundNetLog()); |
2577 EXPECT_EQ(OK, rv); | 2659 EXPECT_EQ(OK, rv); |
2578 EXPECT_TRUE(info3.is_direct()); | 2660 EXPECT_TRUE(info3.is_direct()); |
2579 } | 2661 } |
2580 | 2662 |
2581 } // namespace net | 2663 } // namespace net |
OLD | NEW |