| 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 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 308 | 308 |
| 309 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); | 309 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); |
| 310 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); | 310 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); |
| 311 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); | 311 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
| 312 | 312 |
| 313 // Now, imagine that connecting to foopy:8080 fails: there is nothing | 313 // Now, imagine that connecting to foopy:8080 fails: there is nothing |
| 314 // left to fallback to, since our proxy list was NOT terminated by | 314 // left to fallback to, since our proxy list was NOT terminated by |
| 315 // DIRECT. | 315 // DIRECT. |
| 316 TestCompletionCallback callback2; | 316 TestCompletionCallback callback2; |
| 317 rv = service.ReconsiderProxyAfterError( | 317 rv = service.ReconsiderProxyAfterError( |
| 318 url, &info, callback2.callback(), NULL, BoundNetLog()); | 318 url, net::ERR_PROXY_CONNECTION_FAILED, |
| 319 &info, callback2.callback(), NULL, BoundNetLog()); |
| 319 // ReconsiderProxyAfterError returns error indicating nothing left. | 320 // ReconsiderProxyAfterError returns error indicating nothing left. |
| 320 EXPECT_EQ(ERR_FAILED, rv); | 321 EXPECT_EQ(ERR_FAILED, rv); |
| 321 EXPECT_TRUE(info.is_empty()); | 322 EXPECT_TRUE(info.is_empty()); |
| 322 } | 323 } |
| 323 | 324 |
| 324 // Test that if the execution of the PAC script fails (i.e. javascript runtime | 325 // Test that if the execution of the PAC script fails (i.e. javascript runtime |
| 325 // error), and the PAC settings are non-mandatory, that we fall-back to direct. | 326 // error), and the PAC settings are non-mandatory, that we fall-back to direct. |
| 326 TEST_F(ProxyServiceTest, PAC_RuntimeError) { | 327 TEST_F(ProxyServiceTest, PAC_RuntimeError) { |
| 327 MockProxyConfigService* config_service = | 328 MockProxyConfigService* config_service = |
| 328 new MockProxyConfigService("http://foopy/proxy.pac"); | 329 new MockProxyConfigService("http://foopy/proxy.pac"); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 // Set the result in proxy resolver. | 404 // Set the result in proxy resolver. |
| 404 resolver->pending_requests()[0]->results()->UsePacString( | 405 resolver->pending_requests()[0]->results()->UsePacString( |
| 405 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); | 406 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); |
| 406 resolver->pending_requests()[0]->CompleteNow(OK); | 407 resolver->pending_requests()[0]->CompleteNow(OK); |
| 407 | 408 |
| 408 EXPECT_EQ(OK, callback1.WaitForResult()); | 409 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 409 EXPECT_TRUE(info.is_direct()); | 410 EXPECT_TRUE(info.is_direct()); |
| 410 | 411 |
| 411 // Fallback 1. | 412 // Fallback 1. |
| 412 TestCompletionCallback callback2; | 413 TestCompletionCallback callback2; |
| 413 rv = service.ReconsiderProxyAfterError(url, &info, callback2.callback(), NULL, | 414 rv = service.ReconsiderProxyAfterError(url, net::ERR_PROXY_CONNECTION_FAILED, |
| 415 &info, callback2.callback(), NULL, |
| 414 BoundNetLog()); | 416 BoundNetLog()); |
| 415 EXPECT_EQ(OK, rv); | 417 EXPECT_EQ(OK, rv); |
| 416 EXPECT_FALSE(info.is_direct()); | 418 EXPECT_FALSE(info.is_direct()); |
| 417 EXPECT_EQ("foobar:10", info.proxy_server().ToURI()); | 419 EXPECT_EQ("foobar:10", info.proxy_server().ToURI()); |
| 418 | 420 |
| 419 // Fallback 2. | 421 // Fallback 2. |
| 420 TestCompletionCallback callback3; | 422 TestCompletionCallback callback3; |
| 421 rv = service.ReconsiderProxyAfterError(url, &info, callback3.callback(), NULL, | 423 rv = service.ReconsiderProxyAfterError(url, net::ERR_PROXY_CONNECTION_FAILED, |
| 424 &info, callback3.callback(), NULL, |
| 422 BoundNetLog()); | 425 BoundNetLog()); |
| 423 EXPECT_EQ(OK, rv); | 426 EXPECT_EQ(OK, rv); |
| 424 EXPECT_TRUE(info.is_direct()); | 427 EXPECT_TRUE(info.is_direct()); |
| 425 | 428 |
| 426 // Fallback 3. | 429 // Fallback 3. |
| 427 TestCompletionCallback callback4; | 430 TestCompletionCallback callback4; |
| 428 rv = service.ReconsiderProxyAfterError(url, &info, callback4.callback(), NULL, | 431 rv = service.ReconsiderProxyAfterError(url, net::ERR_PROXY_CONNECTION_FAILED, |
| 432 &info, callback4.callback(), NULL, |
| 429 BoundNetLog()); | 433 BoundNetLog()); |
| 430 EXPECT_EQ(OK, rv); | 434 EXPECT_EQ(OK, rv); |
| 431 EXPECT_FALSE(info.is_direct()); | 435 EXPECT_FALSE(info.is_direct()); |
| 432 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); | 436 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); |
| 433 | 437 |
| 434 // Fallback 4 -- Nothing to fall back to! | 438 // Fallback 4 -- Nothing to fall back to! |
| 435 TestCompletionCallback callback5; | 439 TestCompletionCallback callback5; |
| 436 rv = service.ReconsiderProxyAfterError(url, &info, callback5.callback(), NULL, | 440 rv = service.ReconsiderProxyAfterError(url, net::ERR_PROXY_CONNECTION_FAILED, |
| 441 &info, callback5.callback(), NULL, |
| 437 BoundNetLog()); | 442 BoundNetLog()); |
| 438 EXPECT_EQ(ERR_FAILED, rv); | 443 EXPECT_EQ(ERR_FAILED, rv); |
| 439 EXPECT_TRUE(info.is_empty()); | 444 EXPECT_TRUE(info.is_empty()); |
| 440 } | 445 } |
| 441 | 446 |
| 442 TEST_F(ProxyServiceTest, PAC_ConfigSourcePropagates) { | 447 TEST_F(ProxyServiceTest, PAC_ConfigSourcePropagates) { |
| 443 // Test whether the ProxyConfigSource set by the ProxyConfigService is applied | 448 // Test whether the ProxyConfigSource set by the ProxyConfigService is applied |
| 444 // to ProxyInfo after the proxy is resolved via a PAC script. | 449 // to ProxyInfo after the proxy is resolved via a PAC script. |
| 445 ProxyConfig config = | 450 ProxyConfig config = |
| 446 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); | 451 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 721 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 726 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 722 | 727 |
| 723 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); | 728 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); |
| 724 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); | 729 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); |
| 725 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); | 730 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
| 726 base::TimeTicks proxy_resolve_start_time = info.proxy_resolve_start_time(); | 731 base::TimeTicks proxy_resolve_start_time = info.proxy_resolve_start_time(); |
| 727 base::TimeTicks proxy_resolve_end_time = info.proxy_resolve_end_time(); | 732 base::TimeTicks proxy_resolve_end_time = info.proxy_resolve_end_time(); |
| 728 | 733 |
| 729 // Fake an error on the proxy. | 734 // Fake an error on the proxy. |
| 730 TestCompletionCallback callback2; | 735 TestCompletionCallback callback2; |
| 731 rv = service.ReconsiderProxyAfterError(url, &info, callback2.callback(), NULL, | 736 rv = service.ReconsiderProxyAfterError(url, net::ERR_PROXY_CONNECTION_FAILED, |
| 737 &info, callback2.callback(), NULL, |
| 732 BoundNetLog()); | 738 BoundNetLog()); |
| 733 EXPECT_EQ(OK, rv); | 739 EXPECT_EQ(OK, rv); |
| 734 | 740 |
| 735 // Proxy times should not have been modified by fallback. | 741 // Proxy times should not have been modified by fallback. |
| 736 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time()); | 742 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time()); |
| 737 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time()); | 743 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time()); |
| 738 | 744 |
| 739 // The second proxy should be specified. | 745 // The second proxy should be specified. |
| 740 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 746 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 741 // Report back that the second proxy worked. This will globally mark the | 747 // Report back that the second proxy worked. This will globally mark the |
| (...skipping 21 matching lines...) Expand all Loading... |
| 763 // Proxy times should have been updated, so get them again. | 769 // Proxy times should have been updated, so get them again. |
| 764 EXPECT_LE(proxy_resolve_end_time, info.proxy_resolve_start_time()); | 770 EXPECT_LE(proxy_resolve_end_time, info.proxy_resolve_start_time()); |
| 765 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); | 771 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); |
| 766 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); | 772 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); |
| 767 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); | 773 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
| 768 proxy_resolve_start_time = info.proxy_resolve_start_time(); | 774 proxy_resolve_start_time = info.proxy_resolve_start_time(); |
| 769 proxy_resolve_end_time = info.proxy_resolve_end_time(); | 775 proxy_resolve_end_time = info.proxy_resolve_end_time(); |
| 770 | 776 |
| 771 // We fake another error. It should now try the third one. | 777 // We fake another error. It should now try the third one. |
| 772 TestCompletionCallback callback4; | 778 TestCompletionCallback callback4; |
| 773 rv = service.ReconsiderProxyAfterError(url, &info, callback4.callback(), NULL, | 779 rv = service.ReconsiderProxyAfterError(url, net::ERR_PROXY_CONNECTION_FAILED, |
| 780 &info, callback4.callback(), NULL, |
| 774 BoundNetLog()); | 781 BoundNetLog()); |
| 775 EXPECT_EQ(OK, rv); | 782 EXPECT_EQ(OK, rv); |
| 776 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 783 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 777 | 784 |
| 778 // We fake another error. At this point we have tried all of the | 785 // We fake another error. At this point we have tried all of the |
| 779 // proxy servers we thought were valid; next we try the proxy server | 786 // proxy servers we thought were valid; next we try the proxy server |
| 780 // that was in our bad proxies map (foopy1:8080). | 787 // that was in our bad proxies map (foopy1:8080). |
| 781 TestCompletionCallback callback5; | 788 TestCompletionCallback callback5; |
| 782 rv = service.ReconsiderProxyAfterError(url, &info, callback5.callback(), NULL, | 789 rv = service.ReconsiderProxyAfterError(url, net::ERR_PROXY_CONNECTION_FAILED, |
| 790 &info, callback5.callback(), NULL, |
| 783 BoundNetLog()); | 791 BoundNetLog()); |
| 784 EXPECT_EQ(OK, rv); | 792 EXPECT_EQ(OK, rv); |
| 785 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 793 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 786 | 794 |
| 787 // Fake another error, the last proxy is gone, the list should now be empty, | 795 // Fake another error, the last proxy is gone, the list should now be empty, |
| 788 // so there is nothing left to try. | 796 // so there is nothing left to try. |
| 789 TestCompletionCallback callback6; | 797 TestCompletionCallback callback6; |
| 790 rv = service.ReconsiderProxyAfterError(url, &info, callback6.callback(), NULL, | 798 rv = service.ReconsiderProxyAfterError(url, net::ERR_PROXY_CONNECTION_FAILED, |
| 799 &info, callback6.callback(), NULL, |
| 791 BoundNetLog()); | 800 BoundNetLog()); |
| 792 EXPECT_EQ(ERR_FAILED, rv); | 801 EXPECT_EQ(ERR_FAILED, rv); |
| 793 EXPECT_FALSE(info.is_direct()); | 802 EXPECT_FALSE(info.is_direct()); |
| 794 EXPECT_TRUE(info.is_empty()); | 803 EXPECT_TRUE(info.is_empty()); |
| 795 | 804 |
| 796 // Proxy times should not have been modified by fallback. | 805 // Proxy times should not have been modified by fallback. |
| 797 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time()); | 806 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time()); |
| 798 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time()); | 807 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time()); |
| 799 | 808 |
| 800 // Look up proxies again | 809 // Look up proxies again |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 854 "PROXY foopy1:8080; PROXY foopy2:9090; DIRECT"); | 863 "PROXY foopy1:8080; PROXY foopy2:9090; DIRECT"); |
| 855 resolver->pending_requests()[0]->CompleteNow(OK); | 864 resolver->pending_requests()[0]->CompleteNow(OK); |
| 856 | 865 |
| 857 // Get the first result. | 866 // Get the first result. |
| 858 EXPECT_EQ(OK, callback1.WaitForResult()); | 867 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 859 EXPECT_FALSE(info.is_direct()); | 868 EXPECT_FALSE(info.is_direct()); |
| 860 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 869 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 861 | 870 |
| 862 // Fake an error on the proxy. | 871 // Fake an error on the proxy. |
| 863 TestCompletionCallback callback2; | 872 TestCompletionCallback callback2; |
| 864 rv = service.ReconsiderProxyAfterError(url, &info, callback2.callback(), NULL, | 873 rv = service.ReconsiderProxyAfterError(url, net::ERR_PROXY_CONNECTION_FAILED, |
| 874 &info, callback2.callback(), NULL, |
| 865 BoundNetLog()); | 875 BoundNetLog()); |
| 866 EXPECT_EQ(OK, rv); | 876 EXPECT_EQ(OK, rv); |
| 867 | 877 |
| 868 // Now we get back the second proxy. | 878 // Now we get back the second proxy. |
| 869 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 879 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 870 | 880 |
| 871 // Fake an error on this proxy as well. | 881 // Fake an error on this proxy as well. |
| 872 TestCompletionCallback callback3; | 882 TestCompletionCallback callback3; |
| 873 rv = service.ReconsiderProxyAfterError(url, &info, callback3.callback(), NULL, | 883 rv = service.ReconsiderProxyAfterError(url, net::ERR_PROXY_CONNECTION_FAILED, |
| 884 &info, callback3.callback(), NULL, |
| 874 BoundNetLog()); | 885 BoundNetLog()); |
| 875 EXPECT_EQ(OK, rv); | 886 EXPECT_EQ(OK, rv); |
| 876 | 887 |
| 877 // Finally, we get back DIRECT. | 888 // Finally, we get back DIRECT. |
| 878 EXPECT_TRUE(info.is_direct()); | 889 EXPECT_TRUE(info.is_direct()); |
| 879 | 890 |
| 880 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); | 891 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); |
| 881 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); | 892 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); |
| 882 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); | 893 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
| 883 | 894 |
| 884 // Now we tell the proxy service that even DIRECT failed. | 895 // Now we tell the proxy service that even DIRECT failed. |
| 885 TestCompletionCallback callback4; | 896 TestCompletionCallback callback4; |
| 886 rv = service.ReconsiderProxyAfterError(url, &info, callback4.callback(), NULL, | 897 rv = service.ReconsiderProxyAfterError(url, net::ERR_PROXY_CONNECTION_FAILED, |
| 898 &info, callback4.callback(), NULL, |
| 887 BoundNetLog()); | 899 BoundNetLog()); |
| 888 // There was nothing left to try after DIRECT, so we are out of | 900 // There was nothing left to try after DIRECT, so we are out of |
| 889 // choices. | 901 // choices. |
| 890 EXPECT_EQ(ERR_FAILED, rv); | 902 EXPECT_EQ(ERR_FAILED, rv); |
| 891 } | 903 } |
| 892 | 904 |
| 893 TEST_F(ProxyServiceTest, ProxyFallback_NewSettings) { | 905 TEST_F(ProxyServiceTest, ProxyFallback_NewSettings) { |
| 894 // Test proxy failover when new settings are available. | 906 // Test proxy failover when new settings are available. |
| 895 | 907 |
| 896 MockProxyConfigService* config_service = | 908 MockProxyConfigService* config_service = |
| (...skipping 27 matching lines...) Expand all Loading... |
| 924 // The first item is valid. | 936 // The first item is valid. |
| 925 EXPECT_EQ(OK, callback1.WaitForResult()); | 937 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 926 EXPECT_FALSE(info.is_direct()); | 938 EXPECT_FALSE(info.is_direct()); |
| 927 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 939 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 928 | 940 |
| 929 // Fake an error on the proxy, and also a new configuration on the proxy. | 941 // Fake an error on the proxy, and also a new configuration on the proxy. |
| 930 config_service->SetConfig( | 942 config_service->SetConfig( |
| 931 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy-new/proxy.pac"))); | 943 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy-new/proxy.pac"))); |
| 932 | 944 |
| 933 TestCompletionCallback callback2; | 945 TestCompletionCallback callback2; |
| 934 rv = service.ReconsiderProxyAfterError(url, &info, callback2.callback(), NULL, | 946 rv = service.ReconsiderProxyAfterError(url, net::ERR_PROXY_CONNECTION_FAILED, |
| 947 &info, callback2.callback(), NULL, |
| 935 BoundNetLog()); | 948 BoundNetLog()); |
| 936 EXPECT_EQ(ERR_IO_PENDING, rv); | 949 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 937 | 950 |
| 938 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"), | 951 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"), |
| 939 resolver->pending_set_pac_script_request()->script_data()->url()); | 952 resolver->pending_set_pac_script_request()->script_data()->url()); |
| 940 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 953 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 941 | 954 |
| 942 ASSERT_EQ(1u, resolver->pending_requests().size()); | 955 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 943 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 956 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 944 | 957 |
| 945 resolver->pending_requests()[0]->results()->UseNamedProxy( | 958 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 946 "foopy1:8080;foopy2:9090"); | 959 "foopy1:8080;foopy2:9090"); |
| 947 resolver->pending_requests()[0]->CompleteNow(OK); | 960 resolver->pending_requests()[0]->CompleteNow(OK); |
| 948 | 961 |
| 949 // The first proxy is still there since the configuration changed. | 962 // The first proxy is still there since the configuration changed. |
| 950 EXPECT_EQ(OK, callback2.WaitForResult()); | 963 EXPECT_EQ(OK, callback2.WaitForResult()); |
| 951 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 964 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 952 | 965 |
| 953 // We fake another error. It should now ignore the first one. | 966 // We fake another error. It should now ignore the first one. |
| 954 TestCompletionCallback callback3; | 967 TestCompletionCallback callback3; |
| 955 rv = service.ReconsiderProxyAfterError(url, &info, callback3.callback(), NULL, | 968 rv = service.ReconsiderProxyAfterError(url, net::ERR_PROXY_CONNECTION_FAILED, |
| 969 &info, callback3.callback(), NULL, |
| 956 BoundNetLog()); | 970 BoundNetLog()); |
| 957 EXPECT_EQ(OK, rv); | 971 EXPECT_EQ(OK, rv); |
| 958 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 972 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 959 | 973 |
| 960 // We simulate a new configuration. | 974 // We simulate a new configuration. |
| 961 config_service->SetConfig( | 975 config_service->SetConfig( |
| 962 ProxyConfig::CreateFromCustomPacURL( | 976 ProxyConfig::CreateFromCustomPacURL( |
| 963 GURL("http://foopy-new2/proxy.pac"))); | 977 GURL("http://foopy-new2/proxy.pac"))); |
| 964 | 978 |
| 965 // We fake another error. It should go back to the first proxy. | 979 // We fake another error. It should go back to the first proxy. |
| 966 TestCompletionCallback callback4; | 980 TestCompletionCallback callback4; |
| 967 rv = service.ReconsiderProxyAfterError(url, &info, callback4.callback(), NULL, | 981 rv = service.ReconsiderProxyAfterError(url, net::ERR_PROXY_CONNECTION_FAILED, |
| 982 &info, callback4.callback(), NULL, |
| 968 BoundNetLog()); | 983 BoundNetLog()); |
| 969 EXPECT_EQ(ERR_IO_PENDING, rv); | 984 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 970 | 985 |
| 971 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"), | 986 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"), |
| 972 resolver->pending_set_pac_script_request()->script_data()->url()); | 987 resolver->pending_set_pac_script_request()->script_data()->url()); |
| 973 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 988 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 974 | 989 |
| 975 ASSERT_EQ(1u, resolver->pending_requests().size()); | 990 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 976 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 991 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 977 | 992 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1016 "foopy1:8080;foopy2:9090"); | 1031 "foopy1:8080;foopy2:9090"); |
| 1017 resolver->pending_requests()[0]->CompleteNow(OK); | 1032 resolver->pending_requests()[0]->CompleteNow(OK); |
| 1018 | 1033 |
| 1019 // The first item is valid. | 1034 // The first item is valid. |
| 1020 EXPECT_EQ(OK, callback1.WaitForResult()); | 1035 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 1021 EXPECT_FALSE(info.is_direct()); | 1036 EXPECT_FALSE(info.is_direct()); |
| 1022 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1037 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 1023 | 1038 |
| 1024 // Fake a proxy error. | 1039 // Fake a proxy error. |
| 1025 TestCompletionCallback callback2; | 1040 TestCompletionCallback callback2; |
| 1026 rv = service.ReconsiderProxyAfterError(url, &info, callback2.callback(), NULL, | 1041 rv = service.ReconsiderProxyAfterError(url, net::ERR_PROXY_CONNECTION_FAILED, |
| 1042 &info, callback2.callback(), NULL, |
| 1027 BoundNetLog()); | 1043 BoundNetLog()); |
| 1028 EXPECT_EQ(OK, rv); | 1044 EXPECT_EQ(OK, rv); |
| 1029 | 1045 |
| 1030 // The first proxy is ignored, and the second one is selected. | 1046 // The first proxy is ignored, and the second one is selected. |
| 1031 EXPECT_FALSE(info.is_direct()); | 1047 EXPECT_FALSE(info.is_direct()); |
| 1032 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 1048 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 1033 | 1049 |
| 1034 // Fake a PAC failure. | 1050 // Fake a PAC failure. |
| 1035 ProxyInfo info2; | 1051 ProxyInfo info2; |
| 1036 TestCompletionCallback callback3; | 1052 TestCompletionCallback callback3; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1048 // to a DIRECT connection. | 1064 // to a DIRECT connection. |
| 1049 EXPECT_EQ(OK, callback3.WaitForResult()); | 1065 EXPECT_EQ(OK, callback3.WaitForResult()); |
| 1050 EXPECT_TRUE(info2.is_direct()); | 1066 EXPECT_TRUE(info2.is_direct()); |
| 1051 EXPECT_FALSE(info2.is_empty()); | 1067 EXPECT_FALSE(info2.is_empty()); |
| 1052 | 1068 |
| 1053 // The PAC script will work properly next time and successfully return a | 1069 // The PAC script will work properly next time and successfully return a |
| 1054 // proxy list. Since we have not marked the configuration as bad, it should | 1070 // proxy list. Since we have not marked the configuration as bad, it should |
| 1055 // "just work" the next time we call it. | 1071 // "just work" the next time we call it. |
| 1056 ProxyInfo info3; | 1072 ProxyInfo info3; |
| 1057 TestCompletionCallback callback4; | 1073 TestCompletionCallback callback4; |
| 1058 rv = service.ReconsiderProxyAfterError(url, &info3, callback4.callback(), | 1074 rv = service.ReconsiderProxyAfterError(url, net::ERR_PROXY_CONNECTION_FAILED, |
| 1075 &info3, callback4.callback(), |
| 1059 NULL, BoundNetLog()); | 1076 NULL, BoundNetLog()); |
| 1060 EXPECT_EQ(ERR_IO_PENDING, rv); | 1077 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1061 | 1078 |
| 1062 ASSERT_EQ(1u, resolver->pending_requests().size()); | 1079 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 1063 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 1080 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 1064 | 1081 |
| 1065 resolver->pending_requests()[0]->results()->UseNamedProxy( | 1082 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 1066 "foopy1:8080;foopy2:9090"); | 1083 "foopy1:8080;foopy2:9090"); |
| 1067 resolver->pending_requests()[0]->CompleteNow(OK); | 1084 resolver->pending_requests()[0]->CompleteNow(OK); |
| 1068 | 1085 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1109 "foopy1:8080;foopy2:9090"); | 1126 "foopy1:8080;foopy2:9090"); |
| 1110 resolver->pending_requests()[0]->CompleteNow(OK); | 1127 resolver->pending_requests()[0]->CompleteNow(OK); |
| 1111 | 1128 |
| 1112 // The first item is valid. | 1129 // The first item is valid. |
| 1113 EXPECT_EQ(OK, callback1.WaitForResult()); | 1130 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 1114 EXPECT_FALSE(info.is_direct()); | 1131 EXPECT_FALSE(info.is_direct()); |
| 1115 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1132 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 1116 | 1133 |
| 1117 // Fake a proxy error. | 1134 // Fake a proxy error. |
| 1118 TestCompletionCallback callback2; | 1135 TestCompletionCallback callback2; |
| 1119 rv = service.ReconsiderProxyAfterError(url, &info, callback2.callback(), NULL, | 1136 rv = service.ReconsiderProxyAfterError(url, net::ERR_PROXY_CONNECTION_FAILED, |
| 1137 &info, callback2.callback(), NULL, |
| 1120 BoundNetLog()); | 1138 BoundNetLog()); |
| 1121 EXPECT_EQ(OK, rv); | 1139 EXPECT_EQ(OK, rv); |
| 1122 | 1140 |
| 1123 // The first proxy is ignored, and the second one is selected. | 1141 // The first proxy is ignored, and the second one is selected. |
| 1124 EXPECT_FALSE(info.is_direct()); | 1142 EXPECT_FALSE(info.is_direct()); |
| 1125 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 1143 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 1126 | 1144 |
| 1127 // Fake a PAC failure. | 1145 // Fake a PAC failure. |
| 1128 ProxyInfo info2; | 1146 ProxyInfo info2; |
| 1129 TestCompletionCallback callback3; | 1147 TestCompletionCallback callback3; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1142 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, | 1160 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, |
| 1143 callback3.WaitForResult()); | 1161 callback3.WaitForResult()); |
| 1144 EXPECT_FALSE(info2.is_direct()); | 1162 EXPECT_FALSE(info2.is_direct()); |
| 1145 EXPECT_TRUE(info2.is_empty()); | 1163 EXPECT_TRUE(info2.is_empty()); |
| 1146 | 1164 |
| 1147 // The PAC script will work properly next time and successfully return a | 1165 // The PAC script will work properly next time and successfully return a |
| 1148 // proxy list. Since we have not marked the configuration as bad, it should | 1166 // proxy list. Since we have not marked the configuration as bad, it should |
| 1149 // "just work" the next time we call it. | 1167 // "just work" the next time we call it. |
| 1150 ProxyInfo info3; | 1168 ProxyInfo info3; |
| 1151 TestCompletionCallback callback4; | 1169 TestCompletionCallback callback4; |
| 1152 rv = service.ReconsiderProxyAfterError(url, &info3, callback4.callback(), | 1170 rv = service.ReconsiderProxyAfterError(url, net::ERR_PROXY_CONNECTION_FAILED, |
| 1171 &info3, callback4.callback(), |
| 1153 NULL, BoundNetLog()); | 1172 NULL, BoundNetLog()); |
| 1154 EXPECT_EQ(ERR_IO_PENDING, rv); | 1173 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1155 | 1174 |
| 1156 ASSERT_EQ(1u, resolver->pending_requests().size()); | 1175 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 1157 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 1176 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 1158 | 1177 |
| 1159 resolver->pending_requests()[0]->results()->UseNamedProxy( | 1178 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 1160 "foopy1:8080;foopy2:9090"); | 1179 "foopy1:8080;foopy2:9090"); |
| 1161 resolver->pending_requests()[0]->CompleteNow(OK); | 1180 resolver->pending_requests()[0]->CompleteNow(OK); |
| 1162 | 1181 |
| (...skipping 1621 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2784 ProxyInfo info3; | 2803 ProxyInfo info3; |
| 2785 TestCompletionCallback callback3; | 2804 TestCompletionCallback callback3; |
| 2786 rv = service.ResolveProxy( | 2805 rv = service.ResolveProxy( |
| 2787 GURL("http://request3"), &info3, callback3.callback(), NULL, | 2806 GURL("http://request3"), &info3, callback3.callback(), NULL, |
| 2788 BoundNetLog()); | 2807 BoundNetLog()); |
| 2789 EXPECT_EQ(OK, rv); | 2808 EXPECT_EQ(OK, rv); |
| 2790 EXPECT_TRUE(info3.is_direct()); | 2809 EXPECT_TRUE(info3.is_direct()); |
| 2791 } | 2810 } |
| 2792 | 2811 |
| 2793 } // namespace net | 2812 } // namespace net |
| OLD | NEW |