| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy:8080"); | 205 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy:8080"); |
| 206 resolver->pending_requests()[0]->CompleteNow(OK); | 206 resolver->pending_requests()[0]->CompleteNow(OK); |
| 207 | 207 |
| 208 EXPECT_EQ(OK, callback1.WaitForResult()); | 208 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 209 EXPECT_FALSE(info.is_direct()); | 209 EXPECT_FALSE(info.is_direct()); |
| 210 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI()); | 210 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI()); |
| 211 | 211 |
| 212 // Now, imagine that connecting to foopy:8080 fails: there is nothing | 212 // Now, imagine that connecting to foopy:8080 fails: there is nothing |
| 213 // left to fallback to, since our proxy list was NOT terminated by | 213 // left to fallback to, since our proxy list was NOT terminated by |
| 214 // DIRECT. | 214 // DIRECT. |
| 215 TestOldCompletionCallback callback2; | 215 TestCompletionCallback callback2; |
| 216 rv = service.ReconsiderProxyAfterError(url, &info, &callback2, NULL, | 216 rv = service.ReconsiderProxyAfterError(url, &info, callback2.callback(), NULL, |
| 217 BoundNetLog()); | 217 BoundNetLog()); |
| 218 // ReconsiderProxyAfterError returns error indicating nothing left. | 218 // ReconsiderProxyAfterError returns error indicating nothing left. |
| 219 EXPECT_EQ(ERR_FAILED, rv); | 219 EXPECT_EQ(ERR_FAILED, rv); |
| 220 EXPECT_TRUE(info.is_empty()); | 220 EXPECT_TRUE(info.is_empty()); |
| 221 } | 221 } |
| 222 | 222 |
| 223 // The proxy list could potentially contain the DIRECT fallback choice | 223 // The proxy list could potentially contain the DIRECT fallback choice |
| 224 // in a location other than the very end of the list, and could even | 224 // in a location other than the very end of the list, and could even |
| 225 // specify it multiple times. | 225 // specify it multiple times. |
| 226 // | 226 // |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 | 260 |
| 261 // Set the result in proxy resolver. | 261 // Set the result in proxy resolver. |
| 262 resolver->pending_requests()[0]->results()->UsePacString( | 262 resolver->pending_requests()[0]->results()->UsePacString( |
| 263 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); | 263 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); |
| 264 resolver->pending_requests()[0]->CompleteNow(OK); | 264 resolver->pending_requests()[0]->CompleteNow(OK); |
| 265 | 265 |
| 266 EXPECT_EQ(OK, callback1.WaitForResult()); | 266 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 267 EXPECT_TRUE(info.is_direct()); | 267 EXPECT_TRUE(info.is_direct()); |
| 268 | 268 |
| 269 // Fallback 1. | 269 // Fallback 1. |
| 270 TestOldCompletionCallback callback2; | 270 TestCompletionCallback callback2; |
| 271 rv = service.ReconsiderProxyAfterError(url, &info, &callback2, NULL, | 271 rv = service.ReconsiderProxyAfterError(url, &info, callback2.callback(), NULL, |
| 272 BoundNetLog()); | 272 BoundNetLog()); |
| 273 EXPECT_EQ(OK, rv); | 273 EXPECT_EQ(OK, rv); |
| 274 EXPECT_FALSE(info.is_direct()); | 274 EXPECT_FALSE(info.is_direct()); |
| 275 EXPECT_EQ("foobar:10", info.proxy_server().ToURI()); | 275 EXPECT_EQ("foobar:10", info.proxy_server().ToURI()); |
| 276 | 276 |
| 277 // Fallback 2. | 277 // Fallback 2. |
| 278 TestOldCompletionCallback callback3; | 278 TestCompletionCallback callback3; |
| 279 rv = service.ReconsiderProxyAfterError(url, &info, &callback3, NULL, | 279 rv = service.ReconsiderProxyAfterError(url, &info, callback3.callback(), NULL, |
| 280 BoundNetLog()); | 280 BoundNetLog()); |
| 281 EXPECT_EQ(OK, rv); | 281 EXPECT_EQ(OK, rv); |
| 282 EXPECT_TRUE(info.is_direct()); | 282 EXPECT_TRUE(info.is_direct()); |
| 283 | 283 |
| 284 // Fallback 3. | 284 // Fallback 3. |
| 285 TestOldCompletionCallback callback4; | 285 TestCompletionCallback callback4; |
| 286 rv = service.ReconsiderProxyAfterError(url, &info, &callback4, NULL, | 286 rv = service.ReconsiderProxyAfterError(url, &info, callback4.callback(), NULL, |
| 287 BoundNetLog()); | 287 BoundNetLog()); |
| 288 EXPECT_EQ(OK, rv); | 288 EXPECT_EQ(OK, rv); |
| 289 EXPECT_FALSE(info.is_direct()); | 289 EXPECT_FALSE(info.is_direct()); |
| 290 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); | 290 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); |
| 291 | 291 |
| 292 // Fallback 4 -- Nothing to fall back to! | 292 // Fallback 4 -- Nothing to fall back to! |
| 293 TestOldCompletionCallback callback5; | 293 TestCompletionCallback callback5; |
| 294 rv = service.ReconsiderProxyAfterError(url, &info, &callback5, NULL, | 294 rv = service.ReconsiderProxyAfterError(url, &info, callback5.callback(), NULL, |
| 295 BoundNetLog()); | 295 BoundNetLog()); |
| 296 EXPECT_EQ(ERR_FAILED, rv); | 296 EXPECT_EQ(ERR_FAILED, rv); |
| 297 EXPECT_TRUE(info.is_empty()); | 297 EXPECT_TRUE(info.is_empty()); |
| 298 } | 298 } |
| 299 | 299 |
| 300 TEST(ProxyServiceTest, ProxyResolverFails) { | 300 TEST(ProxyServiceTest, ProxyResolverFails) { |
| 301 // Test what happens when the ProxyResolver fails. The download and setting | 301 // Test what happens when the ProxyResolver fails. The download and setting |
| 302 // of the PAC script have already succeeded, so this corresponds with a | 302 // of the PAC script have already succeeded, so this corresponds with a |
| 303 // javascript runtime error while calling FindProxyForURL(). | 303 // javascript runtime error while calling FindProxyForURL(). |
| 304 | 304 |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 525 resolver->pending_requests()[0]->results()->UseNamedProxy( | 525 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 526 "foopy1:8080;foopy2:9090"); | 526 "foopy1:8080;foopy2:9090"); |
| 527 resolver->pending_requests()[0]->CompleteNow(OK); | 527 resolver->pending_requests()[0]->CompleteNow(OK); |
| 528 | 528 |
| 529 // The first item is valid. | 529 // The first item is valid. |
| 530 EXPECT_EQ(OK, callback1.WaitForResult()); | 530 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 531 EXPECT_FALSE(info.is_direct()); | 531 EXPECT_FALSE(info.is_direct()); |
| 532 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 532 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 533 | 533 |
| 534 // Fake an error on the proxy. | 534 // Fake an error on the proxy. |
| 535 TestOldCompletionCallback callback2; | 535 TestCompletionCallback callback2; |
| 536 rv = service.ReconsiderProxyAfterError(url, &info, &callback2, NULL, | 536 rv = service.ReconsiderProxyAfterError(url, &info, callback2.callback(), NULL, |
| 537 BoundNetLog()); | 537 BoundNetLog()); |
| 538 EXPECT_EQ(OK, rv); | 538 EXPECT_EQ(OK, rv); |
| 539 | 539 |
| 540 // The second proxy should be specified. | 540 // The second proxy should be specified. |
| 541 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 541 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 542 // Report back that the second proxy worked. This will globally mark the | 542 // Report back that the second proxy worked. This will globally mark the |
| 543 // first proxy as bad. | 543 // first proxy as bad. |
| 544 service.ReportSuccess(info); | 544 service.ReportSuccess(info); |
| 545 | 545 |
| 546 TestOldCompletionCallback callback3; | 546 TestOldCompletionCallback callback3; |
| 547 rv = service.ResolveProxy(url, &info, &callback3, NULL, BoundNetLog()); | 547 rv = service.ResolveProxy(url, &info, &callback3, NULL, BoundNetLog()); |
| 548 EXPECT_EQ(ERR_IO_PENDING, rv); | 548 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 549 | 549 |
| 550 ASSERT_EQ(1u, resolver->pending_requests().size()); | 550 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 551 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 551 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 552 | 552 |
| 553 // Set the result in proxy resolver -- the second result is already known | 553 // Set the result in proxy resolver -- the second result is already known |
| 554 // to be bad, so we will not try to use it initially. | 554 // to be bad, so we will not try to use it initially. |
| 555 resolver->pending_requests()[0]->results()->UseNamedProxy( | 555 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 556 "foopy3:7070;foopy1:8080;foopy2:9090"); | 556 "foopy3:7070;foopy1:8080;foopy2:9090"); |
| 557 resolver->pending_requests()[0]->CompleteNow(OK); | 557 resolver->pending_requests()[0]->CompleteNow(OK); |
| 558 | 558 |
| 559 EXPECT_EQ(OK, callback3.WaitForResult()); | 559 EXPECT_EQ(OK, callback3.WaitForResult()); |
| 560 EXPECT_FALSE(info.is_direct()); | 560 EXPECT_FALSE(info.is_direct()); |
| 561 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI()); | 561 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI()); |
| 562 | 562 |
| 563 // We fake another error. It should now try the third one. | 563 // We fake another error. It should now try the third one. |
| 564 TestOldCompletionCallback callback4; | 564 TestCompletionCallback callback4; |
| 565 rv = service.ReconsiderProxyAfterError(url, &info, &callback4, NULL, | 565 rv = service.ReconsiderProxyAfterError(url, &info, callback4.callback(), NULL, |
| 566 BoundNetLog()); | 566 BoundNetLog()); |
| 567 EXPECT_EQ(OK, rv); | 567 EXPECT_EQ(OK, rv); |
| 568 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 568 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 569 | 569 |
| 570 // We fake another error. At this point we have tried all of the | 570 // We fake another error. At this point we have tried all of the |
| 571 // proxy servers we thought were valid; next we try the proxy server | 571 // proxy servers we thought were valid; next we try the proxy server |
| 572 // that was in our bad proxies map (foopy1:8080). | 572 // that was in our bad proxies map (foopy1:8080). |
| 573 TestOldCompletionCallback callback5; | 573 TestCompletionCallback callback5; |
| 574 rv = service.ReconsiderProxyAfterError(url, &info, &callback5, NULL, | 574 rv = service.ReconsiderProxyAfterError(url, &info, callback5.callback(), NULL, |
| 575 BoundNetLog()); | 575 BoundNetLog()); |
| 576 EXPECT_EQ(OK, rv); | 576 EXPECT_EQ(OK, rv); |
| 577 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 577 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 578 | 578 |
| 579 // Fake another error, the last proxy is gone, the list should now be empty, | 579 // Fake another error, the last proxy is gone, the list should now be empty, |
| 580 // so there is nothing left to try. | 580 // so there is nothing left to try. |
| 581 TestOldCompletionCallback callback6; | 581 TestCompletionCallback callback6; |
| 582 rv = service.ReconsiderProxyAfterError(url, &info, &callback6, NULL, | 582 rv = service.ReconsiderProxyAfterError(url, &info, callback6.callback(), NULL, |
| 583 BoundNetLog()); | 583 BoundNetLog()); |
| 584 EXPECT_EQ(ERR_FAILED, rv); | 584 EXPECT_EQ(ERR_FAILED, rv); |
| 585 EXPECT_FALSE(info.is_direct()); | 585 EXPECT_FALSE(info.is_direct()); |
| 586 EXPECT_TRUE(info.is_empty()); | 586 EXPECT_TRUE(info.is_empty()); |
| 587 | 587 |
| 588 // Look up proxies again | 588 // Look up proxies again |
| 589 TestOldCompletionCallback callback7; | 589 TestCompletionCallback callback7; |
| 590 rv = service.ResolveProxy(url, &info, &callback7, NULL, BoundNetLog()); | 590 rv = service.ResolveProxy(url, &info, callback7.callback(), NULL, |
| 591 BoundNetLog()); |
| 591 EXPECT_EQ(ERR_IO_PENDING, rv); | 592 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 592 | 593 |
| 593 ASSERT_EQ(1u, resolver->pending_requests().size()); | 594 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 594 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 595 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 595 | 596 |
| 596 // This time, the first 3 results have been found to be bad, but only the | 597 // This time, the first 3 results have been found to be bad, but only the |
| 597 // first proxy has been confirmed ... | 598 // first proxy has been confirmed ... |
| 598 resolver->pending_requests()[0]->results()->UseNamedProxy( | 599 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 599 "foopy1:8080;foopy3:7070;foopy2:9090;foopy4:9091"); | 600 "foopy1:8080;foopy3:7070;foopy2:9090;foopy4:9091"); |
| 600 resolver->pending_requests()[0]->CompleteNow(OK); | 601 resolver->pending_requests()[0]->CompleteNow(OK); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 636 resolver->pending_requests()[0]->results()->UsePacString( | 637 resolver->pending_requests()[0]->results()->UsePacString( |
| 637 "PROXY foopy1:8080; PROXY foopy2:9090; DIRECT"); | 638 "PROXY foopy1:8080; PROXY foopy2:9090; DIRECT"); |
| 638 resolver->pending_requests()[0]->CompleteNow(OK); | 639 resolver->pending_requests()[0]->CompleteNow(OK); |
| 639 | 640 |
| 640 // Get the first result. | 641 // Get the first result. |
| 641 EXPECT_EQ(OK, callback1.WaitForResult()); | 642 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 642 EXPECT_FALSE(info.is_direct()); | 643 EXPECT_FALSE(info.is_direct()); |
| 643 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 644 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 644 | 645 |
| 645 // Fake an error on the proxy. | 646 // Fake an error on the proxy. |
| 646 TestOldCompletionCallback callback2; | 647 TestCompletionCallback callback2; |
| 647 rv = service.ReconsiderProxyAfterError(url, &info, &callback2, NULL, | 648 rv = service.ReconsiderProxyAfterError(url, &info, callback2.callback(), NULL, |
| 648 BoundNetLog()); | 649 BoundNetLog()); |
| 649 EXPECT_EQ(OK, rv); | 650 EXPECT_EQ(OK, rv); |
| 650 | 651 |
| 651 // Now we get back the second proxy. | 652 // Now we get back the second proxy. |
| 652 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 653 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 653 | 654 |
| 654 // Fake an error on this proxy as well. | 655 // Fake an error on this proxy as well. |
| 655 TestOldCompletionCallback callback3; | 656 TestCompletionCallback callback3; |
| 656 rv = service.ReconsiderProxyAfterError(url, &info, &callback3, NULL, | 657 rv = service.ReconsiderProxyAfterError(url, &info, callback3.callback(), NULL, |
| 657 BoundNetLog()); | 658 BoundNetLog()); |
| 658 EXPECT_EQ(OK, rv); | 659 EXPECT_EQ(OK, rv); |
| 659 | 660 |
| 660 // Finally, we get back DIRECT. | 661 // Finally, we get back DIRECT. |
| 661 EXPECT_TRUE(info.is_direct()); | 662 EXPECT_TRUE(info.is_direct()); |
| 662 | 663 |
| 663 // Now we tell the proxy service that even DIRECT failed. | 664 // Now we tell the proxy service that even DIRECT failed. |
| 664 TestOldCompletionCallback callback4; | 665 TestCompletionCallback callback4; |
| 665 rv = service.ReconsiderProxyAfterError(url, &info, &callback4, NULL, | 666 rv = service.ReconsiderProxyAfterError(url, &info, callback4.callback(), NULL, |
| 666 BoundNetLog()); | 667 BoundNetLog()); |
| 667 // There was nothing left to try after DIRECT, so we are out of | 668 // There was nothing left to try after DIRECT, so we are out of |
| 668 // choices. | 669 // choices. |
| 669 EXPECT_EQ(ERR_FAILED, rv); | 670 EXPECT_EQ(ERR_FAILED, rv); |
| 670 } | 671 } |
| 671 | 672 |
| 672 TEST(ProxyServiceTest, ProxyFallback_NewSettings) { | 673 TEST(ProxyServiceTest, ProxyFallback_NewSettings) { |
| 673 // Test proxy failover when new settings are available. | 674 // Test proxy failover when new settings are available. |
| 674 | 675 |
| 675 MockProxyConfigService* config_service = | 676 MockProxyConfigService* config_service = |
| (...skipping 25 matching lines...) Expand all Loading... |
| 701 | 702 |
| 702 // The first item is valid. | 703 // The first item is valid. |
| 703 EXPECT_EQ(OK, callback1.WaitForResult()); | 704 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 704 EXPECT_FALSE(info.is_direct()); | 705 EXPECT_FALSE(info.is_direct()); |
| 705 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 706 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 706 | 707 |
| 707 // Fake an error on the proxy, and also a new configuration on the proxy. | 708 // Fake an error on the proxy, and also a new configuration on the proxy. |
| 708 config_service->SetConfig( | 709 config_service->SetConfig( |
| 709 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy-new/proxy.pac"))); | 710 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy-new/proxy.pac"))); |
| 710 | 711 |
| 711 TestOldCompletionCallback callback2; | 712 TestCompletionCallback callback2; |
| 712 rv = service.ReconsiderProxyAfterError(url, &info, &callback2, NULL, | 713 rv = service.ReconsiderProxyAfterError(url, &info, callback2.callback(), NULL, |
| 713 BoundNetLog()); | 714 BoundNetLog()); |
| 714 EXPECT_EQ(ERR_IO_PENDING, rv); | 715 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 715 | 716 |
| 716 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"), | 717 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"), |
| 717 resolver->pending_set_pac_script_request()->script_data()->url()); | 718 resolver->pending_set_pac_script_request()->script_data()->url()); |
| 718 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 719 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 719 | 720 |
| 720 ASSERT_EQ(1u, resolver->pending_requests().size()); | 721 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 721 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 722 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 722 | 723 |
| 723 resolver->pending_requests()[0]->results()->UseNamedProxy( | 724 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 724 "foopy1:8080;foopy2:9090"); | 725 "foopy1:8080;foopy2:9090"); |
| 725 resolver->pending_requests()[0]->CompleteNow(OK); | 726 resolver->pending_requests()[0]->CompleteNow(OK); |
| 726 | 727 |
| 727 // The first proxy is still there since the configuration changed. | 728 // The first proxy is still there since the configuration changed. |
| 728 EXPECT_EQ(OK, callback2.WaitForResult()); | 729 EXPECT_EQ(OK, callback2.WaitForResult()); |
| 729 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 730 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 730 | 731 |
| 731 // We fake another error. It should now ignore the first one. | 732 // We fake another error. It should now ignore the first one. |
| 732 TestOldCompletionCallback callback3; | 733 TestCompletionCallback callback3; |
| 733 rv = service.ReconsiderProxyAfterError(url, &info, &callback3, NULL, | 734 rv = service.ReconsiderProxyAfterError(url, &info, callback3.callback(), NULL, |
| 734 BoundNetLog()); | 735 BoundNetLog()); |
| 735 EXPECT_EQ(OK, rv); | 736 EXPECT_EQ(OK, rv); |
| 736 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 737 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 737 | 738 |
| 738 // We simulate a new configuration. | 739 // We simulate a new configuration. |
| 739 config_service->SetConfig( | 740 config_service->SetConfig( |
| 740 ProxyConfig::CreateFromCustomPacURL( | 741 ProxyConfig::CreateFromCustomPacURL( |
| 741 GURL("http://foopy-new2/proxy.pac"))); | 742 GURL("http://foopy-new2/proxy.pac"))); |
| 742 | 743 |
| 743 // We fake another error. It should go back to the first proxy. | 744 // We fake another error. It should go back to the first proxy. |
| 744 TestOldCompletionCallback callback4; | 745 TestCompletionCallback callback4; |
| 745 rv = service.ReconsiderProxyAfterError(url, &info, &callback4, NULL, | 746 rv = service.ReconsiderProxyAfterError(url, &info, callback4.callback(), NULL, |
| 746 BoundNetLog()); | 747 BoundNetLog()); |
| 747 EXPECT_EQ(ERR_IO_PENDING, rv); | 748 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 748 | 749 |
| 749 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"), | 750 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"), |
| 750 resolver->pending_set_pac_script_request()->script_data()->url()); | 751 resolver->pending_set_pac_script_request()->script_data()->url()); |
| 751 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 752 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 752 | 753 |
| 753 ASSERT_EQ(1u, resolver->pending_requests().size()); | 754 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 754 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 755 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 755 | 756 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 788 resolver->pending_requests()[0]->results()->UseNamedProxy( | 789 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 789 "foopy1:8080;foopy2:9090"); | 790 "foopy1:8080;foopy2:9090"); |
| 790 resolver->pending_requests()[0]->CompleteNow(OK); | 791 resolver->pending_requests()[0]->CompleteNow(OK); |
| 791 | 792 |
| 792 // The first item is valid. | 793 // The first item is valid. |
| 793 EXPECT_EQ(OK, callback1.WaitForResult()); | 794 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 794 EXPECT_FALSE(info.is_direct()); | 795 EXPECT_FALSE(info.is_direct()); |
| 795 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 796 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 796 | 797 |
| 797 // Fake a proxy error. | 798 // Fake a proxy error. |
| 798 TestOldCompletionCallback callback2; | 799 TestCompletionCallback callback2; |
| 799 rv = service.ReconsiderProxyAfterError(url, &info, &callback2, NULL, | 800 rv = service.ReconsiderProxyAfterError(url, &info, callback2.callback(), NULL, |
| 800 BoundNetLog()); | 801 BoundNetLog()); |
| 801 EXPECT_EQ(OK, rv); | 802 EXPECT_EQ(OK, rv); |
| 802 | 803 |
| 803 // The first proxy is ignored, and the second one is selected. | 804 // The first proxy is ignored, and the second one is selected. |
| 804 EXPECT_FALSE(info.is_direct()); | 805 EXPECT_FALSE(info.is_direct()); |
| 805 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 806 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 806 | 807 |
| 807 // Fake a PAC failure. | 808 // Fake a PAC failure. |
| 808 ProxyInfo info2; | 809 ProxyInfo info2; |
| 809 TestOldCompletionCallback callback3; | 810 TestOldCompletionCallback callback3; |
| 810 rv = service.ResolveProxy(url, &info2, &callback3, NULL, BoundNetLog()); | 811 rv = service.ResolveProxy(url, &info2, &callback3, NULL, BoundNetLog()); |
| 811 EXPECT_EQ(ERR_IO_PENDING, rv); | 812 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 812 | 813 |
| 813 ASSERT_EQ(1u, resolver->pending_requests().size()); | 814 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 814 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 815 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 815 | 816 |
| 816 // This simulates a javascript runtime error in the PAC script. | 817 // This simulates a javascript runtime error in the PAC script. |
| 817 resolver->pending_requests()[0]->CompleteNow(ERR_FAILED); | 818 resolver->pending_requests()[0]->CompleteNow(ERR_FAILED); |
| 818 | 819 |
| 819 // Although the resolver failed, the ProxyService will implicitly fall-back | 820 // Although the resolver failed, the ProxyService will implicitly fall-back |
| 820 // to a DIRECT connection. | 821 // to a DIRECT connection. |
| 821 EXPECT_EQ(OK, callback3.WaitForResult()); | 822 EXPECT_EQ(OK, callback3.WaitForResult()); |
| 822 EXPECT_TRUE(info2.is_direct()); | 823 EXPECT_TRUE(info2.is_direct()); |
| 823 EXPECT_FALSE(info2.is_empty()); | 824 EXPECT_FALSE(info2.is_empty()); |
| 824 | 825 |
| 825 // The PAC script will work properly next time and successfully return a | 826 // The PAC script will work properly next time and successfully return a |
| 826 // proxy list. Since we have not marked the configuration as bad, it should | 827 // proxy list. Since we have not marked the configuration as bad, it should |
| 827 // "just work" the next time we call it. | 828 // "just work" the next time we call it. |
| 828 ProxyInfo info3; | 829 ProxyInfo info3; |
| 829 TestOldCompletionCallback callback4; | 830 TestCompletionCallback callback4; |
| 830 rv = service.ReconsiderProxyAfterError(url, &info3, &callback4, NULL, | 831 rv = service.ReconsiderProxyAfterError(url, &info3, callback4.callback(), |
| 831 BoundNetLog()); | 832 NULL, BoundNetLog()); |
| 832 EXPECT_EQ(ERR_IO_PENDING, rv); | 833 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 833 | 834 |
| 834 ASSERT_EQ(1u, resolver->pending_requests().size()); | 835 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 835 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 836 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 836 | 837 |
| 837 resolver->pending_requests()[0]->results()->UseNamedProxy( | 838 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 838 "foopy1:8080;foopy2:9090"); | 839 "foopy1:8080;foopy2:9090"); |
| 839 resolver->pending_requests()[0]->CompleteNow(OK); | 840 resolver->pending_requests()[0]->CompleteNow(OK); |
| 840 | 841 |
| 841 // The first proxy is not there since the it was added to the bad proxies | 842 // The first proxy is not there since the it was added to the bad proxies |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 875 resolver->pending_requests()[0]->results()->UseNamedProxy( | 876 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 876 "foopy1:8080;foopy2:9090"); | 877 "foopy1:8080;foopy2:9090"); |
| 877 resolver->pending_requests()[0]->CompleteNow(OK); | 878 resolver->pending_requests()[0]->CompleteNow(OK); |
| 878 | 879 |
| 879 // The first item is valid. | 880 // The first item is valid. |
| 880 EXPECT_EQ(OK, callback1.WaitForResult()); | 881 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 881 EXPECT_FALSE(info.is_direct()); | 882 EXPECT_FALSE(info.is_direct()); |
| 882 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 883 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 883 | 884 |
| 884 // Fake a proxy error. | 885 // Fake a proxy error. |
| 885 TestOldCompletionCallback callback2; | 886 TestCompletionCallback callback2; |
| 886 rv = service.ReconsiderProxyAfterError(url, &info, &callback2, NULL, | 887 rv = service.ReconsiderProxyAfterError(url, &info, callback2.callback(), NULL, |
| 887 BoundNetLog()); | 888 BoundNetLog()); |
| 888 EXPECT_EQ(OK, rv); | 889 EXPECT_EQ(OK, rv); |
| 889 | 890 |
| 890 // The first proxy is ignored, and the second one is selected. | 891 // The first proxy is ignored, and the second one is selected. |
| 891 EXPECT_FALSE(info.is_direct()); | 892 EXPECT_FALSE(info.is_direct()); |
| 892 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 893 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 893 | 894 |
| 894 // Fake a PAC failure. | 895 // Fake a PAC failure. |
| 895 ProxyInfo info2; | 896 ProxyInfo info2; |
| 896 TestOldCompletionCallback callback3; | 897 TestOldCompletionCallback callback3; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 907 // to a DIRECT connection as it is configured as mandatory. | 908 // to a DIRECT connection as it is configured as mandatory. |
| 908 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, | 909 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, |
| 909 callback3.WaitForResult()); | 910 callback3.WaitForResult()); |
| 910 EXPECT_FALSE(info2.is_direct()); | 911 EXPECT_FALSE(info2.is_direct()); |
| 911 EXPECT_TRUE(info2.is_empty()); | 912 EXPECT_TRUE(info2.is_empty()); |
| 912 | 913 |
| 913 // The PAC script will work properly next time and successfully return a | 914 // The PAC script will work properly next time and successfully return a |
| 914 // proxy list. Since we have not marked the configuration as bad, it should | 915 // proxy list. Since we have not marked the configuration as bad, it should |
| 915 // "just work" the next time we call it. | 916 // "just work" the next time we call it. |
| 916 ProxyInfo info3; | 917 ProxyInfo info3; |
| 917 TestOldCompletionCallback callback4; | 918 TestCompletionCallback callback4; |
| 918 rv = service.ReconsiderProxyAfterError(url, &info3, &callback4, NULL, | 919 rv = service.ReconsiderProxyAfterError(url, &info3, callback4.callback(), |
| 919 BoundNetLog()); | 920 NULL, BoundNetLog()); |
| 920 EXPECT_EQ(ERR_IO_PENDING, rv); | 921 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 921 | 922 |
| 922 ASSERT_EQ(1u, resolver->pending_requests().size()); | 923 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 923 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 924 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 924 | 925 |
| 925 resolver->pending_requests()[0]->results()->UseNamedProxy( | 926 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 926 "foopy1:8080;foopy2:9090"); | 927 "foopy1:8080;foopy2:9090"); |
| 927 resolver->pending_requests()[0]->CompleteNow(OK); | 928 resolver->pending_requests()[0]->CompleteNow(OK); |
| 928 | 929 |
| 929 // The first proxy is not there since the it was added to the bad proxies | 930 // The first proxy is not there since the it was added to the bad proxies |
| (...skipping 957 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1887 log.GetEntries(&entries); | 1888 log.GetEntries(&entries); |
| 1888 | 1889 |
| 1889 EXPECT_TRUE(LogContainsEntryWithType(entries, 0, | 1890 EXPECT_TRUE(LogContainsEntryWithType(entries, 0, |
| 1890 NetLog::TYPE_PROXY_CONFIG_CHANGED)); | 1891 NetLog::TYPE_PROXY_CONFIG_CHANGED)); |
| 1891 ASSERT_EQ(9u, entries.size()); | 1892 ASSERT_EQ(9u, entries.size()); |
| 1892 for (size_t i = 1; i < entries.size(); ++i) | 1893 for (size_t i = 1; i < entries.size(); ++i) |
| 1893 EXPECT_NE(NetLog::TYPE_PROXY_CONFIG_CHANGED, entries[i].type); | 1894 EXPECT_NE(NetLog::TYPE_PROXY_CONFIG_CHANGED, entries[i].type); |
| 1894 } | 1895 } |
| 1895 | 1896 |
| 1896 } // namespace net | 1897 } // namespace net |
| OLD | NEW |