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 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
200 bool add_proxy_; | 200 bool add_proxy_; |
201 bool remove_proxy_; | 201 bool remove_proxy_; |
202 const ProxyService* proxy_service_; | 202 const ProxyService* proxy_service_; |
203 }; | 203 }; |
204 | 204 |
205 // A test network delegate that exercises the OnProxyFallback callback. | 205 // A test network delegate that exercises the OnProxyFallback callback. |
206 class TestProxyFallbackNetworkDelegate : public NetworkDelegate { | 206 class TestProxyFallbackNetworkDelegate : public NetworkDelegate { |
207 public: | 207 public: |
208 TestProxyFallbackNetworkDelegate() | 208 TestProxyFallbackNetworkDelegate() |
209 : on_proxy_fallback_called_(false), | 209 : on_proxy_fallback_called_(false), |
210 proxy_fallback_net_error_(0), | 210 proxy_fallback_net_error_(0) { |
Ryan Sleevi
2014/08/15 00:02:24
should this be "OK" instead of 0 ?
Not at Google. Contact bengr
2014/08/15 17:27:00
Done.
| |
211 proxy_did_fallback_(false) { | |
212 } | 211 } |
213 | 212 |
214 virtual void OnProxyFallback( | 213 virtual void OnProxyFallback( |
215 const ProxyServer& proxy_server, | 214 const ProxyServer& proxy_server, |
216 int net_error, | 215 int net_error) OVERRIDE { |
Ryan Sleevi
2014/08/15 00:02:24
Does this fit on one line now?
Not at Google. Contact bengr
2014/08/15 17:27:00
Done.
| |
217 bool did_fallback) OVERRIDE { | |
218 proxy_server_ = proxy_server; | 216 proxy_server_ = proxy_server; |
219 proxy_fallback_net_error_ = net_error; | 217 proxy_fallback_net_error_ = net_error; |
220 proxy_did_fallback_ = did_fallback; | |
221 on_proxy_fallback_called_ = true; | 218 on_proxy_fallback_called_ = true; |
222 } | 219 } |
223 | 220 |
224 bool on_proxy_fallback_called() const { | 221 bool on_proxy_fallback_called() const { |
225 return on_proxy_fallback_called_; | 222 return on_proxy_fallback_called_; |
226 } | 223 } |
227 | 224 |
228 const ProxyServer& proxy_server() const { | 225 const ProxyServer& proxy_server() const { |
229 return proxy_server_; | 226 return proxy_server_; |
230 } | 227 } |
231 | 228 |
232 int proxy_fallback_net_error() const { | 229 int proxy_fallback_net_error() const { |
233 return proxy_fallback_net_error_; | 230 return proxy_fallback_net_error_; |
234 } | 231 } |
235 | 232 |
236 bool proxy_did_fallback() const { | |
237 return proxy_did_fallback_; | |
238 } | |
239 | |
240 private: | 233 private: |
241 bool on_proxy_fallback_called_; | 234 bool on_proxy_fallback_called_; |
242 ProxyServer proxy_server_; | 235 ProxyServer proxy_server_; |
243 int proxy_fallback_net_error_; | 236 int proxy_fallback_net_error_; |
244 bool proxy_did_fallback_; | |
245 }; | 237 }; |
246 | 238 |
247 } // namespace | 239 } // namespace |
248 | 240 |
249 TEST_F(ProxyServiceTest, Direct) { | 241 TEST_F(ProxyServiceTest, Direct) { |
250 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 242 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
251 ProxyService service(new MockProxyConfigService( | 243 ProxyService service(new MockProxyConfigService( |
252 ProxyConfig::CreateDirect()), resolver, NULL); | 244 ProxyConfig::CreateDirect()), resolver, NULL); |
253 | 245 |
254 GURL url("http://www.google.com/"); | 246 GURL url("http://www.google.com/"); |
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
507 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI()); | 499 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI()); |
508 EXPECT_TRUE(info.did_use_pac_script()); | 500 EXPECT_TRUE(info.did_use_pac_script()); |
509 | 501 |
510 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); | 502 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); |
511 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); | 503 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); |
512 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); | 504 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
513 | 505 |
514 // Now, imagine that connecting to foopy:8080 fails: there is nothing | 506 // Now, imagine that connecting to foopy:8080 fails: there is nothing |
515 // left to fallback to, since our proxy list was NOT terminated by | 507 // left to fallback to, since our proxy list was NOT terminated by |
516 // DIRECT. | 508 // DIRECT. |
517 TestProxyFallbackNetworkDelegate network_delegate; | 509 NetworkDelegate network_delegate; |
518 TestCompletionCallback callback2; | 510 TestCompletionCallback callback2; |
519 ProxyServer expected_proxy_server = info.proxy_server(); | 511 ProxyServer expected_proxy_server = info.proxy_server(); |
520 rv = service.ReconsiderProxyAfterError( | 512 rv = service.ReconsiderProxyAfterError( |
521 url, net::LOAD_NORMAL, net::ERR_PROXY_CONNECTION_FAILED, | 513 url, net::LOAD_NORMAL, net::ERR_PROXY_CONNECTION_FAILED, |
522 &info, callback2.callback(), NULL, &network_delegate, BoundNetLog()); | 514 &info, callback2.callback(), NULL, &network_delegate, BoundNetLog()); |
523 // ReconsiderProxyAfterError returns error indicating nothing left. | 515 // ReconsiderProxyAfterError returns error indicating nothing left. |
524 EXPECT_EQ(ERR_FAILED, rv); | 516 EXPECT_EQ(ERR_FAILED, rv); |
525 EXPECT_TRUE(info.is_empty()); | 517 EXPECT_TRUE(info.is_empty()); |
526 EXPECT_TRUE(network_delegate.on_proxy_fallback_called()); | |
527 EXPECT_EQ(expected_proxy_server, network_delegate.proxy_server()); | |
528 EXPECT_EQ(net::ERR_PROXY_CONNECTION_FAILED, | |
529 network_delegate.proxy_fallback_net_error()); | |
530 EXPECT_FALSE(network_delegate.proxy_did_fallback()); | |
531 } | 518 } |
532 | 519 |
533 // Test that if the execution of the PAC script fails (i.e. javascript runtime | 520 // Test that if the execution of the PAC script fails (i.e. javascript runtime |
534 // error), and the PAC settings are non-mandatory, that we fall-back to direct. | 521 // error), and the PAC settings are non-mandatory, that we fall-back to direct. |
535 TEST_F(ProxyServiceTest, PAC_RuntimeError) { | 522 TEST_F(ProxyServiceTest, PAC_RuntimeError) { |
536 MockProxyConfigService* config_service = | 523 MockProxyConfigService* config_service = |
537 new MockProxyConfigService("http://foopy/proxy.pac"); | 524 new MockProxyConfigService("http://foopy/proxy.pac"); |
538 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 525 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
539 | 526 |
540 ProxyService service(config_service, resolver, NULL); | 527 ProxyService service(config_service, resolver, NULL); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
613 | 600 |
614 // Set the result in proxy resolver. | 601 // Set the result in proxy resolver. |
615 resolver->pending_requests()[0]->results()->UsePacString( | 602 resolver->pending_requests()[0]->results()->UsePacString( |
616 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); | 603 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); |
617 resolver->pending_requests()[0]->CompleteNow(OK); | 604 resolver->pending_requests()[0]->CompleteNow(OK); |
618 | 605 |
619 EXPECT_EQ(OK, callback1.WaitForResult()); | 606 EXPECT_EQ(OK, callback1.WaitForResult()); |
620 EXPECT_TRUE(info.is_direct()); | 607 EXPECT_TRUE(info.is_direct()); |
621 | 608 |
622 // Fallback 1. | 609 // Fallback 1. |
623 TestProxyFallbackNetworkDelegate network_delegate2; | |
624 TestCompletionCallback callback2; | 610 TestCompletionCallback callback2; |
625 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL, | 611 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL, |
626 net::ERR_PROXY_CONNECTION_FAILED, | 612 net::ERR_PROXY_CONNECTION_FAILED, |
627 &info, callback2.callback(), NULL, | 613 &info, callback2.callback(), NULL, |
628 NULL, BoundNetLog()); | 614 NULL, BoundNetLog()); |
629 EXPECT_EQ(OK, rv); | 615 EXPECT_EQ(OK, rv); |
630 EXPECT_FALSE(info.is_direct()); | 616 EXPECT_FALSE(info.is_direct()); |
631 EXPECT_EQ("foobar:10", info.proxy_server().ToURI()); | 617 EXPECT_EQ("foobar:10", info.proxy_server().ToURI()); |
632 // No network delegate provided. | |
633 EXPECT_FALSE(network_delegate2.on_proxy_fallback_called()); | |
634 | 618 |
635 // Fallback 2. | 619 // Fallback 2. |
636 TestProxyFallbackNetworkDelegate network_delegate3; | 620 NetworkDelegate network_delegate; |
637 ProxyServer expected_proxy_server3 = info.proxy_server(); | 621 ProxyServer expected_proxy_server3 = info.proxy_server(); |
638 TestCompletionCallback callback3; | 622 TestCompletionCallback callback3; |
639 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL, | 623 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL, |
640 net::ERR_PROXY_CONNECTION_FAILED, | 624 net::ERR_PROXY_CONNECTION_FAILED, |
641 &info, callback3.callback(), NULL, | 625 &info, callback3.callback(), NULL, |
642 &network_delegate3, BoundNetLog()); | 626 &network_delegate, BoundNetLog()); |
643 EXPECT_EQ(OK, rv); | 627 EXPECT_EQ(OK, rv); |
644 EXPECT_TRUE(info.is_direct()); | 628 EXPECT_TRUE(info.is_direct()); |
645 EXPECT_TRUE(network_delegate3.on_proxy_fallback_called()); | |
646 EXPECT_EQ(expected_proxy_server3, network_delegate3.proxy_server()); | |
647 EXPECT_EQ(net::ERR_PROXY_CONNECTION_FAILED, | |
648 network_delegate3.proxy_fallback_net_error()); | |
649 EXPECT_TRUE(network_delegate3.proxy_did_fallback()); | |
650 | 629 |
651 // Fallback 3. | 630 // Fallback 3. |
652 TestProxyFallbackNetworkDelegate network_delegate4; | |
653 ProxyServer expected_proxy_server4 = info.proxy_server(); | 631 ProxyServer expected_proxy_server4 = info.proxy_server(); |
654 TestCompletionCallback callback4; | 632 TestCompletionCallback callback4; |
655 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL, | 633 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL, |
656 net::ERR_PROXY_CONNECTION_FAILED, | 634 net::ERR_PROXY_CONNECTION_FAILED, |
657 &info, callback4.callback(), NULL, | 635 &info, callback4.callback(), NULL, |
658 &network_delegate4, BoundNetLog()); | 636 &network_delegate, BoundNetLog()); |
659 EXPECT_EQ(OK, rv); | 637 EXPECT_EQ(OK, rv); |
660 EXPECT_FALSE(info.is_direct()); | 638 EXPECT_FALSE(info.is_direct()); |
661 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); | 639 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); |
662 EXPECT_TRUE(network_delegate4.on_proxy_fallback_called()); | |
663 EXPECT_EQ(expected_proxy_server4, network_delegate4.proxy_server()); | |
664 EXPECT_EQ(net::ERR_PROXY_CONNECTION_FAILED, | |
665 network_delegate4.proxy_fallback_net_error()); | |
666 EXPECT_TRUE(network_delegate4.proxy_did_fallback()); | |
667 | 640 |
668 // Fallback 4 -- Nothing to fall back to! | 641 // Fallback 4 -- Nothing to fall back to! |
669 TestProxyFallbackNetworkDelegate network_delegate5; | |
670 ProxyServer expected_proxy_server5 = info.proxy_server(); | 642 ProxyServer expected_proxy_server5 = info.proxy_server(); |
671 TestCompletionCallback callback5; | 643 TestCompletionCallback callback5; |
672 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL, | 644 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL, |
673 net::ERR_PROXY_CONNECTION_FAILED, | 645 net::ERR_PROXY_CONNECTION_FAILED, |
674 &info, callback5.callback(), NULL, | 646 &info, callback5.callback(), NULL, |
675 &network_delegate5, BoundNetLog()); | 647 &network_delegate, BoundNetLog()); |
676 EXPECT_EQ(ERR_FAILED, rv); | 648 EXPECT_EQ(ERR_FAILED, rv); |
677 EXPECT_TRUE(info.is_empty()); | 649 EXPECT_TRUE(info.is_empty()); |
678 EXPECT_TRUE(network_delegate5.on_proxy_fallback_called()); | |
679 EXPECT_EQ(expected_proxy_server5, network_delegate5.proxy_server()); | |
680 EXPECT_EQ(net::ERR_PROXY_CONNECTION_FAILED, | |
681 network_delegate5.proxy_fallback_net_error()); | |
682 EXPECT_FALSE(network_delegate5.proxy_did_fallback()); | |
683 } | 650 } |
684 | 651 |
685 TEST_F(ProxyServiceTest, PAC_ConfigSourcePropagates) { | 652 TEST_F(ProxyServiceTest, PAC_ConfigSourcePropagates) { |
686 // Test whether the ProxyConfigSource set by the ProxyConfigService is applied | 653 // Test whether the ProxyConfigSource set by the ProxyConfigService is applied |
687 // to ProxyInfo after the proxy is resolved via a PAC script. | 654 // to ProxyInfo after the proxy is resolved via a PAC script. |
688 ProxyConfig config = | 655 ProxyConfig config = |
689 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); | 656 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); |
690 config.set_source(PROXY_CONFIG_SOURCE_TEST); | 657 config.set_source(PROXY_CONFIG_SOURCE_TEST); |
691 | 658 |
692 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 659 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
987 EXPECT_EQ(OK, rv); | 954 EXPECT_EQ(OK, rv); |
988 | 955 |
989 // Proxy times should not have been modified by fallback. | 956 // Proxy times should not have been modified by fallback. |
990 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time()); | 957 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time()); |
991 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time()); | 958 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time()); |
992 | 959 |
993 // The second proxy should be specified. | 960 // The second proxy should be specified. |
994 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 961 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
995 // Report back that the second proxy worked. This will globally mark the | 962 // Report back that the second proxy worked. This will globally mark the |
996 // first proxy as bad. | 963 // first proxy as bad. |
997 service.ReportSuccess(info); | 964 TestProxyFallbackNetworkDelegate test_delegate; |
965 service.ReportSuccess(info, &test_delegate); | |
966 EXPECT_EQ(info.proxy_server(), test_delegate.proxy_server()); | |
967 EXPECT_EQ(net::ERR_PROXY_CONNECTION_FAILED, | |
968 test_delegate.proxy_fallback_net_error()); | |
998 | 969 |
999 TestCompletionCallback callback3; | 970 TestCompletionCallback callback3; |
1000 rv = service.ResolveProxy( | 971 rv = service.ResolveProxy( |
1001 url, net::LOAD_NORMAL, &info, callback3.callback(), NULL, NULL, | 972 url, net::LOAD_NORMAL, &info, callback3.callback(), NULL, NULL, |
1002 BoundNetLog()); | 973 BoundNetLog()); |
1003 EXPECT_EQ(ERR_IO_PENDING, rv); | 974 EXPECT_EQ(ERR_IO_PENDING, rv); |
1004 | 975 |
1005 ASSERT_EQ(1u, resolver->pending_requests().size()); | 976 ASSERT_EQ(1u, resolver->pending_requests().size()); |
1006 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 977 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
1007 | 978 |
(...skipping 2097 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3105 ProxyInfo info3; | 3076 ProxyInfo info3; |
3106 TestCompletionCallback callback3; | 3077 TestCompletionCallback callback3; |
3107 rv = service.ResolveProxy( | 3078 rv = service.ResolveProxy( |
3108 GURL("http://request3"), net::LOAD_NORMAL, &info3, callback3.callback(), | 3079 GURL("http://request3"), net::LOAD_NORMAL, &info3, callback3.callback(), |
3109 NULL, NULL, BoundNetLog()); | 3080 NULL, NULL, BoundNetLog()); |
3110 EXPECT_EQ(OK, rv); | 3081 EXPECT_EQ(OK, rv); |
3111 EXPECT_TRUE(info3.is_direct()); | 3082 EXPECT_TRUE(info3.is_direct()); |
3112 } | 3083 } |
3113 | 3084 |
3114 } // namespace net | 3085 } // namespace net |
OLD | NEW |