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 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
375 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); | 375 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); |
376 | 376 |
377 // Fallback 4 -- Nothing to fall back to! | 377 // Fallback 4 -- Nothing to fall back to! |
378 TestCompletionCallback callback5; | 378 TestCompletionCallback callback5; |
379 rv = service.ReconsiderProxyAfterError(url, &info, callback5.callback(), NULL, | 379 rv = service.ReconsiderProxyAfterError(url, &info, callback5.callback(), NULL, |
380 BoundNetLog()); | 380 BoundNetLog()); |
381 EXPECT_EQ(ERR_FAILED, rv); | 381 EXPECT_EQ(ERR_FAILED, rv); |
382 EXPECT_TRUE(info.is_empty()); | 382 EXPECT_TRUE(info.is_empty()); |
383 } | 383 } |
384 | 384 |
| 385 TEST_F(ProxyServiceTest, PAC_ConfigSourcePropagates) { |
| 386 // Test whether the ProxyConfigSource set by the ProxyConfigService is applied |
| 387 // to ProxyInfo after the proxy is resolved via a PAC script. |
| 388 ProxyConfig config = |
| 389 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); |
| 390 config.set_source(PROXY_CONFIG_SOURCE_TEST); |
| 391 |
| 392 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 393 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 394 ProxyService service(config_service, resolver, NULL); |
| 395 |
| 396 // Resolve something. |
| 397 GURL url("http://www.google.com/"); |
| 398 ProxyInfo info; |
| 399 TestCompletionCallback callback; |
| 400 int rv = service.ResolveProxy( |
| 401 url, &info, callback.callback(), NULL, BoundNetLog()); |
| 402 ASSERT_EQ(ERR_IO_PENDING, rv); |
| 403 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 404 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 405 |
| 406 // Set the result in proxy resolver. |
| 407 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy"); |
| 408 resolver->pending_requests()[0]->CompleteNow(OK); |
| 409 |
| 410 EXPECT_EQ(OK, callback.WaitForResult()); |
| 411 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); |
| 412 } |
| 413 |
385 TEST_F(ProxyServiceTest, ProxyResolverFails) { | 414 TEST_F(ProxyServiceTest, ProxyResolverFails) { |
386 // Test what happens when the ProxyResolver fails. The download and setting | 415 // Test what happens when the ProxyResolver fails. The download and setting |
387 // of the PAC script have already succeeded, so this corresponds with a | 416 // of the PAC script have already succeeded, so this corresponds with a |
388 // javascript runtime error while calling FindProxyForURL(). | 417 // javascript runtime error while calling FindProxyForURL(). |
389 | 418 |
390 MockProxyConfigService* config_service = | 419 MockProxyConfigService* config_service = |
391 new MockProxyConfigService("http://foopy/proxy.pac"); | 420 new MockProxyConfigService("http://foopy/proxy.pac"); |
392 | 421 |
393 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 422 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
394 | 423 |
(...skipping 718 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1113 ProxyInfo info; | 1142 ProxyInfo info; |
1114 TestCompletionCallback callback; | 1143 TestCompletionCallback callback; |
1115 int rv = service.ResolveProxy(test_url, &info, callback.callback(), NULL, | 1144 int rv = service.ResolveProxy(test_url, &info, callback.callback(), NULL, |
1116 BoundNetLog()); | 1145 BoundNetLog()); |
1117 EXPECT_EQ(OK, rv); | 1146 EXPECT_EQ(OK, rv); |
1118 EXPECT_FALSE(info.is_direct()); | 1147 EXPECT_FALSE(info.is_direct()); |
1119 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1148 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
1120 } | 1149 } |
1121 } | 1150 } |
1122 | 1151 |
| 1152 TEST_F(ProxyServiceTest, ProxyConfigSourcePropagates) { |
| 1153 // Test that the proxy config source is set correctly when resolving proxies |
| 1154 // using manual proxy rules. Namely, the config source should only be set if |
| 1155 // any of the rules were applied. |
| 1156 { |
| 1157 ProxyConfig config; |
| 1158 config.set_source(PROXY_CONFIG_SOURCE_TEST); |
| 1159 config.proxy_rules().ParseFromString("https=foopy2:8080"); |
| 1160 ProxyService service( |
| 1161 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL); |
| 1162 GURL test_url("http://www.google.com"); |
| 1163 ProxyInfo info; |
| 1164 TestCompletionCallback callback; |
| 1165 int rv = service.ResolveProxy(test_url, &info, callback.callback(), NULL, |
| 1166 BoundNetLog()); |
| 1167 ASSERT_EQ(OK, rv); |
| 1168 // Should be SOURCE_NONE, since there are no HTTP proxies configured. |
| 1169 EXPECT_EQ(PROXY_CONFIG_SOURCE_NONE, info.config_source()); |
| 1170 } |
| 1171 { |
| 1172 ProxyConfig config; |
| 1173 config.set_source(PROXY_CONFIG_SOURCE_TEST); |
| 1174 config.proxy_rules().ParseFromString("https=foopy2:8080"); |
| 1175 ProxyService service( |
| 1176 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL); |
| 1177 GURL test_url("https://www.google.com"); |
| 1178 ProxyInfo info; |
| 1179 TestCompletionCallback callback; |
| 1180 int rv = service.ResolveProxy(test_url, &info, callback.callback(), NULL, |
| 1181 BoundNetLog()); |
| 1182 ASSERT_EQ(OK, rv); |
| 1183 // Used the HTTPS proxy. So source should be TEST. |
| 1184 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); |
| 1185 } |
| 1186 { |
| 1187 ProxyConfig config; |
| 1188 config.set_source(PROXY_CONFIG_SOURCE_TEST); |
| 1189 ProxyService service( |
| 1190 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL); |
| 1191 GURL test_url("http://www.google.com"); |
| 1192 ProxyInfo info; |
| 1193 TestCompletionCallback callback; |
| 1194 int rv = service.ResolveProxy(test_url, &info, callback.callback(), NULL, |
| 1195 BoundNetLog()); |
| 1196 ASSERT_EQ(OK, rv); |
| 1197 // ProxyConfig is empty. Source should be NONE. |
| 1198 EXPECT_EQ(PROXY_CONFIG_SOURCE_NONE, info.config_source()); |
| 1199 } |
| 1200 } |
| 1201 |
1123 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries | 1202 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries |
1124 // fall back to the SOCKS proxy. | 1203 // fall back to the SOCKS proxy. |
1125 TEST_F(ProxyServiceTest, DefaultProxyFallbackToSOCKS) { | 1204 TEST_F(ProxyServiceTest, DefaultProxyFallbackToSOCKS) { |
1126 ProxyConfig config; | 1205 ProxyConfig config; |
1127 config.proxy_rules().ParseFromString("http=foopy1:8080;socks=foopy2:1080"); | 1206 config.proxy_rules().ParseFromString("http=foopy1:8080;socks=foopy2:1080"); |
1128 config.set_auto_detect(false); | 1207 config.set_auto_detect(false); |
1129 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 1208 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
1130 config.proxy_rules().type); | 1209 config.proxy_rules().type); |
1131 | 1210 |
1132 { | 1211 { |
(...skipping 1449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2582 ProxyInfo info3; | 2661 ProxyInfo info3; |
2583 TestCompletionCallback callback3; | 2662 TestCompletionCallback callback3; |
2584 rv = service.ResolveProxy( | 2663 rv = service.ResolveProxy( |
2585 GURL("http://request3"), &info3, callback3.callback(), NULL, | 2664 GURL("http://request3"), &info3, callback3.callback(), NULL, |
2586 BoundNetLog()); | 2665 BoundNetLog()); |
2587 EXPECT_EQ(OK, rv); | 2666 EXPECT_EQ(OK, rv); |
2588 EXPECT_TRUE(info3.is_direct()); | 2667 EXPECT_TRUE(info3.is_direct()); |
2589 } | 2668 } |
2590 | 2669 |
2591 } // namespace net | 2670 } // namespace net |
OLD | NEW |