| 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 |