Chromium Code Reviews| 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 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 233 | 233 |
| 234 private: | 234 private: |
| 235 bool on_proxy_fallback_called_; | 235 bool on_proxy_fallback_called_; |
| 236 ProxyServer proxy_server_; | 236 ProxyServer proxy_server_; |
| 237 int proxy_fallback_net_error_; | 237 int proxy_fallback_net_error_; |
| 238 }; | 238 }; |
| 239 | 239 |
| 240 } // namespace | 240 } // namespace |
| 241 | 241 |
| 242 TEST_F(ProxyServiceTest, Direct) { | 242 TEST_F(ProxyServiceTest, Direct) { |
| 243 MockAsyncProxyResolver resolver; | 243 MockAsyncProxyResolverFactory factory(false); |
| 244 ProxyService service( | 244 ProxyService service( |
| 245 new MockProxyConfigService(ProxyConfig::CreateDirect()), | 245 new MockProxyConfigService(ProxyConfig::CreateDirect()), |
| 246 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 246 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
|
eroman
2015/04/22 16:30:38
Would it be clearer to just get rid of ForwardingP
Sam McNally
2015/04/23 03:04:44
Done.
| |
| 247 | 247 |
| 248 GURL url("http://www.google.com/"); | 248 GURL url("http://www.google.com/"); |
| 249 | 249 |
| 250 ProxyInfo info; | 250 ProxyInfo info; |
| 251 TestCompletionCallback callback; | 251 TestCompletionCallback callback; |
| 252 BoundTestNetLog log; | 252 BoundTestNetLog log; |
| 253 int rv = service.ResolveProxy( | 253 int rv = service.ResolveProxy( |
| 254 url, net::LOAD_NORMAL, &info, callback.callback(), NULL, NULL, | 254 url, net::LOAD_NORMAL, &info, callback.callback(), NULL, NULL, |
| 255 log.bound()); | 255 log.bound()); |
| 256 EXPECT_EQ(OK, rv); | 256 EXPECT_EQ(OK, rv); |
| 257 EXPECT_TRUE(resolver.pending_requests().empty()); | 257 EXPECT_TRUE(factory.pending_requests().empty()); |
| 258 | 258 |
| 259 EXPECT_TRUE(info.is_direct()); | 259 EXPECT_TRUE(info.is_direct()); |
| 260 EXPECT_TRUE(info.proxy_resolve_start_time().is_null()); | 260 EXPECT_TRUE(info.proxy_resolve_start_time().is_null()); |
| 261 EXPECT_TRUE(info.proxy_resolve_end_time().is_null()); | 261 EXPECT_TRUE(info.proxy_resolve_end_time().is_null()); |
| 262 | 262 |
| 263 // Check the NetLog was filled correctly. | 263 // Check the NetLog was filled correctly. |
| 264 TestNetLog::CapturedEntryList entries; | 264 TestNetLog::CapturedEntryList entries; |
| 265 log.GetEntries(&entries); | 265 log.GetEntries(&entries); |
| 266 | 266 |
| 267 EXPECT_EQ(3u, entries.size()); | 267 EXPECT_EQ(3u, entries.size()); |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 376 bypass_url, net::LOAD_NORMAL, &info, callback.callback(), NULL, | 376 bypass_url, net::LOAD_NORMAL, &info, callback.callback(), NULL, |
| 377 &delegate, log.bound()); | 377 &delegate, log.bound()); |
| 378 EXPECT_TRUE(info.is_direct()); | 378 EXPECT_TRUE(info.is_direct()); |
| 379 } | 379 } |
| 380 | 380 |
| 381 TEST_F(ProxyServiceTest, PAC) { | 381 TEST_F(ProxyServiceTest, PAC) { |
| 382 MockProxyConfigService* config_service = | 382 MockProxyConfigService* config_service = |
| 383 new MockProxyConfigService("http://foopy/proxy.pac"); | 383 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 384 | 384 |
| 385 MockAsyncProxyResolver resolver; | 385 MockAsyncProxyResolver resolver; |
| 386 MockAsyncProxyResolverFactory factory(false); | |
| 386 | 387 |
| 387 ProxyService service( | 388 ProxyService service( |
| 388 config_service, | 389 config_service, |
| 389 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 390 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 390 | 391 |
| 391 GURL url("http://www.google.com/"); | 392 GURL url("http://www.google.com/"); |
| 392 | 393 |
| 393 ProxyInfo info; | 394 ProxyInfo info; |
| 394 TestCompletionCallback callback; | 395 TestCompletionCallback callback; |
| 395 ProxyService::PacRequest* request; | 396 ProxyService::PacRequest* request; |
| 396 BoundTestNetLog log; | 397 BoundTestNetLog log; |
| 397 | 398 |
| 398 int rv = service.ResolveProxy( | 399 int rv = service.ResolveProxy( |
| 399 url, net::LOAD_NORMAL, &info, callback.callback(), &request, NULL, | 400 url, net::LOAD_NORMAL, &info, callback.callback(), &request, NULL, |
| 400 log.bound()); | 401 log.bound()); |
| 401 EXPECT_EQ(ERR_IO_PENDING, rv); | 402 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 402 | 403 |
| 403 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request)); | 404 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request)); |
| 404 | 405 |
| 406 ASSERT_EQ(1u, factory.pending_requests().size()); | |
| 405 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 407 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 406 resolver.pending_set_pac_script_request()->script_data()->url()); | 408 factory.pending_requests()[0]->script_data()->url()); |
| 407 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 409 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 408 | 410 |
| 409 ASSERT_EQ(1u, resolver.pending_requests().size()); | 411 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 410 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 412 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 411 | 413 |
| 412 // Set the result in proxy resolver. | 414 // Set the result in proxy resolver. |
| 413 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy"); | 415 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy"); |
| 414 resolver.pending_requests()[0]->CompleteNow(OK); | 416 resolver.pending_requests()[0]->CompleteNow(OK); |
| 415 | 417 |
| 416 EXPECT_EQ(OK, callback.WaitForResult()); | 418 EXPECT_EQ(OK, callback.WaitForResult()); |
| 417 EXPECT_FALSE(info.is_direct()); | 419 EXPECT_FALSE(info.is_direct()); |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 437 entries, 4, NetLog::TYPE_PROXY_SERVICE)); | 439 entries, 4, NetLog::TYPE_PROXY_SERVICE)); |
| 438 } | 440 } |
| 439 | 441 |
| 440 // Test that the proxy resolver does not see the URL's username/password | 442 // Test that the proxy resolver does not see the URL's username/password |
| 441 // or its reference section. | 443 // or its reference section. |
| 442 TEST_F(ProxyServiceTest, PAC_NoIdentityOrHash) { | 444 TEST_F(ProxyServiceTest, PAC_NoIdentityOrHash) { |
| 443 MockProxyConfigService* config_service = | 445 MockProxyConfigService* config_service = |
| 444 new MockProxyConfigService("http://foopy/proxy.pac"); | 446 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 445 | 447 |
| 446 MockAsyncProxyResolver resolver; | 448 MockAsyncProxyResolver resolver; |
| 449 MockAsyncProxyResolverFactory factory(false); | |
| 447 | 450 |
| 448 ProxyService service( | 451 ProxyService service( |
| 449 config_service, | 452 config_service, |
| 450 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 453 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 451 | 454 |
| 452 GURL url("http://username:password@www.google.com/?ref#hash#hash"); | 455 GURL url("http://username:password@www.google.com/?ref#hash#hash"); |
| 453 | 456 |
| 454 ProxyInfo info; | 457 ProxyInfo info; |
| 455 TestCompletionCallback callback; | 458 TestCompletionCallback callback; |
| 456 int rv = service.ResolveProxy( | 459 int rv = service.ResolveProxy( |
| 457 url, net::LOAD_NORMAL, &info, callback.callback(), NULL, NULL, | 460 url, net::LOAD_NORMAL, &info, callback.callback(), NULL, NULL, |
| 458 BoundNetLog()); | 461 BoundNetLog()); |
| 459 EXPECT_EQ(ERR_IO_PENDING, rv); | 462 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 460 | 463 |
| 461 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 464 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 462 resolver.pending_set_pac_script_request()->script_data()->url()); | 465 factory.pending_requests()[0]->script_data()->url()); |
| 463 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 466 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 464 | 467 |
| 465 ASSERT_EQ(1u, resolver.pending_requests().size()); | 468 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 466 // The URL should have been simplified, stripping the username/password/hash. | 469 // The URL should have been simplified, stripping the username/password/hash. |
| 467 EXPECT_EQ(GURL("http://www.google.com/?ref"), | 470 EXPECT_EQ(GURL("http://www.google.com/?ref"), |
| 468 resolver.pending_requests()[0]->url()); | 471 resolver.pending_requests()[0]->url()); |
| 469 | 472 |
| 470 // We end here without ever completing the request -- destruction of | 473 // We end here without ever completing the request -- destruction of |
| 471 // ProxyService will cancel the outstanding request. | 474 // ProxyService will cancel the outstanding request. |
| 472 } | 475 } |
| 473 | 476 |
| 474 TEST_F(ProxyServiceTest, PAC_FailoverWithoutDirect) { | 477 TEST_F(ProxyServiceTest, PAC_FailoverWithoutDirect) { |
| 475 MockProxyConfigService* config_service = | 478 MockProxyConfigService* config_service = |
| 476 new MockProxyConfigService("http://foopy/proxy.pac"); | 479 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 477 MockAsyncProxyResolver resolver; | 480 MockAsyncProxyResolver resolver; |
| 481 MockAsyncProxyResolverFactory factory(false); | |
| 478 | 482 |
| 479 ProxyService service( | 483 ProxyService service( |
| 480 config_service, | 484 config_service, |
| 481 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 485 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 482 | 486 |
| 483 GURL url("http://www.google.com/"); | 487 GURL url("http://www.google.com/"); |
| 484 | 488 |
| 485 ProxyInfo info; | 489 ProxyInfo info; |
| 486 TestCompletionCallback callback1; | 490 TestCompletionCallback callback1; |
| 487 int rv = service.ResolveProxy( | 491 int rv = service.ResolveProxy( |
| 488 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, | 492 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, |
| 489 BoundNetLog()); | 493 BoundNetLog()); |
| 490 EXPECT_EQ(ERR_IO_PENDING, rv); | 494 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 491 | 495 |
| 492 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 496 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 493 resolver.pending_set_pac_script_request()->script_data()->url()); | 497 factory.pending_requests()[0]->script_data()->url()); |
| 494 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 498 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 495 | 499 |
| 496 ASSERT_EQ(1u, resolver.pending_requests().size()); | 500 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 497 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 501 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 498 | 502 |
| 499 // Set the result in proxy resolver. | 503 // Set the result in proxy resolver. |
| 500 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy:8080"); | 504 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy:8080"); |
| 501 resolver.pending_requests()[0]->CompleteNow(OK); | 505 resolver.pending_requests()[0]->CompleteNow(OK); |
| 502 | 506 |
| 503 EXPECT_EQ(OK, callback1.WaitForResult()); | 507 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 504 EXPECT_FALSE(info.is_direct()); | 508 EXPECT_FALSE(info.is_direct()); |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 522 EXPECT_EQ(ERR_FAILED, rv); | 526 EXPECT_EQ(ERR_FAILED, rv); |
| 523 EXPECT_TRUE(info.is_empty()); | 527 EXPECT_TRUE(info.is_empty()); |
| 524 } | 528 } |
| 525 | 529 |
| 526 // Test that if the execution of the PAC script fails (i.e. javascript runtime | 530 // Test that if the execution of the PAC script fails (i.e. javascript runtime |
| 527 // error), and the PAC settings are non-mandatory, that we fall-back to direct. | 531 // error), and the PAC settings are non-mandatory, that we fall-back to direct. |
| 528 TEST_F(ProxyServiceTest, PAC_RuntimeError) { | 532 TEST_F(ProxyServiceTest, PAC_RuntimeError) { |
| 529 MockProxyConfigService* config_service = | 533 MockProxyConfigService* config_service = |
| 530 new MockProxyConfigService("http://foopy/proxy.pac"); | 534 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 531 MockAsyncProxyResolver resolver; | 535 MockAsyncProxyResolver resolver; |
| 536 MockAsyncProxyResolverFactory factory(false); | |
| 532 | 537 |
| 533 ProxyService service( | 538 ProxyService service( |
| 534 config_service, | 539 config_service, |
| 535 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 540 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 536 | 541 |
| 537 GURL url("http://this-causes-js-error/"); | 542 GURL url("http://this-causes-js-error/"); |
| 538 | 543 |
| 539 ProxyInfo info; | 544 ProxyInfo info; |
| 540 TestCompletionCallback callback1; | 545 TestCompletionCallback callback1; |
| 541 int rv = service.ResolveProxy( | 546 int rv = service.ResolveProxy( |
| 542 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, | 547 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, |
| 543 BoundNetLog()); | 548 BoundNetLog()); |
| 544 EXPECT_EQ(ERR_IO_PENDING, rv); | 549 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 545 | 550 |
| 546 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 551 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 547 resolver.pending_set_pac_script_request()->script_data()->url()); | 552 factory.pending_requests()[0]->script_data()->url()); |
| 548 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 553 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 549 | 554 |
| 550 ASSERT_EQ(1u, resolver.pending_requests().size()); | 555 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 551 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 556 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 552 | 557 |
| 553 // Simulate a failure in the PAC executor. | 558 // Simulate a failure in the PAC executor. |
| 554 resolver.pending_requests()[0]->CompleteNow(ERR_PAC_SCRIPT_FAILED); | 559 resolver.pending_requests()[0]->CompleteNow(ERR_PAC_SCRIPT_FAILED); |
| 555 | 560 |
| 556 EXPECT_EQ(OK, callback1.WaitForResult()); | 561 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 557 | 562 |
| 558 // Since the PAC script was non-mandatory, we should have fallen-back to | 563 // Since the PAC script was non-mandatory, we should have fallen-back to |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 580 // | 585 // |
| 581 // For which we expect it to try DIRECT, then foobar:10, then DIRECT again, | 586 // For which we expect it to try DIRECT, then foobar:10, then DIRECT again, |
| 582 // then foobar:20, and then give up and error. | 587 // then foobar:20, and then give up and error. |
| 583 // | 588 // |
| 584 // The important check of this test is to make sure that DIRECT is not somehow | 589 // The important check of this test is to make sure that DIRECT is not somehow |
| 585 // cached as being a bad proxy. | 590 // cached as being a bad proxy. |
| 586 TEST_F(ProxyServiceTest, PAC_FailoverAfterDirect) { | 591 TEST_F(ProxyServiceTest, PAC_FailoverAfterDirect) { |
| 587 MockProxyConfigService* config_service = | 592 MockProxyConfigService* config_service = |
| 588 new MockProxyConfigService("http://foopy/proxy.pac"); | 593 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 589 MockAsyncProxyResolver resolver; | 594 MockAsyncProxyResolver resolver; |
| 595 MockAsyncProxyResolverFactory factory(false); | |
| 590 | 596 |
| 591 ProxyService service( | 597 ProxyService service( |
| 592 config_service, | 598 config_service, |
| 593 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 599 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 594 | 600 |
| 595 GURL url("http://www.google.com/"); | 601 GURL url("http://www.google.com/"); |
| 596 | 602 |
| 597 ProxyInfo info; | 603 ProxyInfo info; |
| 598 TestCompletionCallback callback1; | 604 TestCompletionCallback callback1; |
| 599 int rv = service.ResolveProxy( | 605 int rv = service.ResolveProxy( |
| 600 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, | 606 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, |
| 601 BoundNetLog()); | 607 BoundNetLog()); |
| 602 EXPECT_EQ(ERR_IO_PENDING, rv); | 608 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 603 | 609 |
| 604 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 610 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 605 resolver.pending_set_pac_script_request()->script_data()->url()); | 611 factory.pending_requests()[0]->script_data()->url()); |
| 606 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 612 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 607 | 613 |
| 608 ASSERT_EQ(1u, resolver.pending_requests().size()); | 614 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 609 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 615 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 610 | 616 |
| 611 // Set the result in proxy resolver. | 617 // Set the result in proxy resolver. |
| 612 resolver.pending_requests()[0]->results()->UsePacString( | 618 resolver.pending_requests()[0]->results()->UsePacString( |
| 613 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); | 619 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); |
| 614 resolver.pending_requests()[0]->CompleteNow(OK); | 620 resolver.pending_requests()[0]->CompleteNow(OK); |
| 615 | 621 |
| 616 EXPECT_EQ(OK, callback1.WaitForResult()); | 622 EXPECT_EQ(OK, callback1.WaitForResult()); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 661 | 667 |
| 662 TEST_F(ProxyServiceTest, PAC_ConfigSourcePropagates) { | 668 TEST_F(ProxyServiceTest, PAC_ConfigSourcePropagates) { |
| 663 // Test whether the ProxyConfigSource set by the ProxyConfigService is applied | 669 // Test whether the ProxyConfigSource set by the ProxyConfigService is applied |
| 664 // to ProxyInfo after the proxy is resolved via a PAC script. | 670 // to ProxyInfo after the proxy is resolved via a PAC script. |
| 665 ProxyConfig config = | 671 ProxyConfig config = |
| 666 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); | 672 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); |
| 667 config.set_source(PROXY_CONFIG_SOURCE_TEST); | 673 config.set_source(PROXY_CONFIG_SOURCE_TEST); |
| 668 | 674 |
| 669 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 675 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 670 MockAsyncProxyResolver resolver; | 676 MockAsyncProxyResolver resolver; |
| 677 MockAsyncProxyResolverFactory factory(false); | |
| 671 ProxyService service( | 678 ProxyService service( |
| 672 config_service, | 679 config_service, |
| 673 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 680 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 674 | 681 |
| 675 // Resolve something. | 682 // Resolve something. |
| 676 GURL url("http://www.google.com/"); | 683 GURL url("http://www.google.com/"); |
| 677 ProxyInfo info; | 684 ProxyInfo info; |
| 678 TestCompletionCallback callback; | 685 TestCompletionCallback callback; |
| 679 int rv = service.ResolveProxy( | 686 int rv = service.ResolveProxy( |
| 680 url, net::LOAD_NORMAL, &info, callback.callback(), NULL, NULL, | 687 url, net::LOAD_NORMAL, &info, callback.callback(), NULL, NULL, |
| 681 BoundNetLog()); | 688 BoundNetLog()); |
| 682 ASSERT_EQ(ERR_IO_PENDING, rv); | 689 ASSERT_EQ(ERR_IO_PENDING, rv); |
| 683 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 690 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 684 ASSERT_EQ(1u, resolver.pending_requests().size()); | 691 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 685 | 692 |
| 686 // Set the result in proxy resolver. | 693 // Set the result in proxy resolver. |
| 687 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy"); | 694 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy"); |
| 688 resolver.pending_requests()[0]->CompleteNow(OK); | 695 resolver.pending_requests()[0]->CompleteNow(OK); |
| 689 | 696 |
| 690 EXPECT_EQ(OK, callback.WaitForResult()); | 697 EXPECT_EQ(OK, callback.WaitForResult()); |
| 691 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); | 698 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); |
| 692 EXPECT_TRUE(info.did_use_pac_script()); | 699 EXPECT_TRUE(info.did_use_pac_script()); |
| 693 | 700 |
| 694 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); | 701 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); |
| 695 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); | 702 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); |
| 696 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); | 703 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
| 697 } | 704 } |
| 698 | 705 |
| 699 TEST_F(ProxyServiceTest, ProxyResolverFails) { | 706 TEST_F(ProxyServiceTest, ProxyResolverFails) { |
| 700 // Test what happens when the ProxyResolver fails. The download and setting | 707 // Test what happens when the ProxyResolver fails. The download and setting |
| 701 // of the PAC script have already succeeded, so this corresponds with a | 708 // of the PAC script have already succeeded, so this corresponds with a |
| 702 // javascript runtime error while calling FindProxyForURL(). | 709 // javascript runtime error while calling FindProxyForURL(). |
| 703 | 710 |
| 704 MockProxyConfigService* config_service = | 711 MockProxyConfigService* config_service = |
| 705 new MockProxyConfigService("http://foopy/proxy.pac"); | 712 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 706 | 713 |
| 707 MockAsyncProxyResolver resolver; | 714 MockAsyncProxyResolver resolver; |
| 715 MockAsyncProxyResolverFactory factory(false); | |
| 708 | 716 |
| 709 ProxyService service( | 717 ProxyService service( |
| 710 config_service, | 718 config_service, |
| 711 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 719 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 712 | 720 |
| 713 // Start first resolve request. | 721 // Start first resolve request. |
| 714 GURL url("http://www.google.com/"); | 722 GURL url("http://www.google.com/"); |
| 715 ProxyInfo info; | 723 ProxyInfo info; |
| 716 TestCompletionCallback callback1; | 724 TestCompletionCallback callback1; |
| 717 int rv = service.ResolveProxy( | 725 int rv = service.ResolveProxy( |
| 718 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, | 726 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, |
| 719 BoundNetLog()); | 727 BoundNetLog()); |
| 720 EXPECT_EQ(ERR_IO_PENDING, rv); | 728 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 721 | 729 |
| 722 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 730 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 723 resolver.pending_set_pac_script_request()->script_data()->url()); | 731 factory.pending_requests()[0]->script_data()->url()); |
| 724 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 732 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 725 | 733 |
| 726 ASSERT_EQ(1u, resolver.pending_requests().size()); | 734 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 727 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 735 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 728 | 736 |
| 729 // Fail the first resolve request in MockAsyncProxyResolver. | 737 // Fail the first resolve request in MockAsyncProxyResolver. |
| 730 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); | 738 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); |
| 731 | 739 |
| 732 // Although the proxy resolver failed the request, ProxyService implicitly | 740 // Although the proxy resolver failed the request, ProxyService implicitly |
| 733 // falls-back to DIRECT. | 741 // falls-back to DIRECT. |
| 734 EXPECT_EQ(OK, callback1.WaitForResult()); | 742 EXPECT_EQ(OK, callback1.WaitForResult()); |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 763 TEST_F(ProxyServiceTest, ProxyScriptFetcherFailsDownloadingMandatoryPac) { | 771 TEST_F(ProxyServiceTest, ProxyScriptFetcherFailsDownloadingMandatoryPac) { |
| 764 // Test what happens when the ProxyScriptResolver fails to download a | 772 // Test what happens when the ProxyScriptResolver fails to download a |
| 765 // mandatory PAC script. | 773 // mandatory PAC script. |
| 766 | 774 |
| 767 ProxyConfig config( | 775 ProxyConfig config( |
| 768 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); | 776 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); |
| 769 config.set_pac_mandatory(true); | 777 config.set_pac_mandatory(true); |
| 770 | 778 |
| 771 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 779 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 772 | 780 |
| 773 MockAsyncProxyResolver resolver; | 781 MockAsyncProxyResolverFactory factory(false); |
| 774 | 782 |
| 775 ProxyService service( | 783 ProxyService service( |
| 776 config_service, | 784 config_service, |
| 777 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 785 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 778 | 786 |
| 779 // Start first resolve request. | 787 // Start first resolve request. |
| 780 GURL url("http://www.google.com/"); | 788 GURL url("http://www.google.com/"); |
| 781 ProxyInfo info; | 789 ProxyInfo info; |
| 782 TestCompletionCallback callback1; | 790 TestCompletionCallback callback1; |
| 783 int rv = service.ResolveProxy( | 791 int rv = service.ResolveProxy( |
| 784 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, | 792 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, |
| 785 BoundNetLog()); | 793 BoundNetLog()); |
| 786 EXPECT_EQ(ERR_IO_PENDING, rv); | 794 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 787 | 795 |
| 788 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 796 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 789 resolver.pending_set_pac_script_request()->script_data()->url()); | 797 factory.pending_requests()[0]->script_data()->url()); |
| 790 resolver.pending_set_pac_script_request()->CompleteNow(ERR_FAILED); | 798 factory.pending_requests()[0]->CompleteNow(ERR_FAILED, nullptr); |
| 791 | 799 |
| 792 ASSERT_EQ(0u, resolver.pending_requests().size()); | 800 ASSERT_EQ(0u, factory.pending_requests().size()); |
| 793 // As the proxy resolver failed the request and is configured for a mandatory | 801 // As the proxy resolver factory failed the request and is configured for a |
| 794 // PAC script, ProxyService must not implicitly fall-back to DIRECT. | 802 // mandatory PAC script, ProxyService must not implicitly fall-back to DIRECT. |
| 795 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, | 803 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, |
| 796 callback1.WaitForResult()); | 804 callback1.WaitForResult()); |
| 797 EXPECT_FALSE(info.is_direct()); | 805 EXPECT_FALSE(info.is_direct()); |
| 798 | 806 |
| 799 // As the proxy resolver failed the request and is configured for a mandatory | 807 // As the proxy resolver factory failed the request and is configured for a |
| 800 // PAC script, ProxyService must not implicitly fall-back to DIRECT. | 808 // mandatory PAC script, ProxyService must not implicitly fall-back to DIRECT. |
| 801 TestCompletionCallback callback2; | 809 TestCompletionCallback callback2; |
| 802 rv = service.ResolveProxy( | 810 rv = service.ResolveProxy( |
| 803 url, net::LOAD_NORMAL, &info, callback2.callback(), NULL, NULL, | 811 url, net::LOAD_NORMAL, &info, callback2.callback(), NULL, NULL, |
| 804 BoundNetLog()); | 812 BoundNetLog()); |
| 805 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, rv); | 813 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, rv); |
| 806 EXPECT_FALSE(info.is_direct()); | 814 EXPECT_FALSE(info.is_direct()); |
| 807 } | 815 } |
| 808 | 816 |
| 809 TEST_F(ProxyServiceTest, ProxyResolverFailsParsingJavaScriptMandatoryPac) { | 817 TEST_F(ProxyServiceTest, ProxyResolverFailsParsingJavaScriptMandatoryPac) { |
| 810 // Test what happens when the ProxyResolver fails that is configured to use a | 818 // Test what happens when the ProxyResolver fails that is configured to use a |
| 811 // mandatory PAC script. The download of the PAC script has already | 819 // mandatory PAC script. The download of the PAC script has already |
| 812 // succeeded but the PAC script contains no valid javascript. | 820 // succeeded but the PAC script contains no valid javascript. |
| 813 | 821 |
| 814 ProxyConfig config( | 822 ProxyConfig config( |
| 815 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); | 823 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); |
| 816 config.set_pac_mandatory(true); | 824 config.set_pac_mandatory(true); |
| 817 | 825 |
| 818 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 826 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 819 | 827 |
| 820 MockAsyncProxyResolverExpectsBytes resolver; | 828 MockAsyncProxyResolverFactory factory(true); |
| 821 | 829 |
| 822 ProxyService service( | 830 ProxyService service( |
| 823 config_service, | 831 config_service, |
| 824 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 832 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 825 | 833 |
| 826 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 834 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 827 DhcpProxyScriptFetcher* dhcp_fetcher = new DoNothingDhcpProxyScriptFetcher(); | 835 DhcpProxyScriptFetcher* dhcp_fetcher = new DoNothingDhcpProxyScriptFetcher(); |
| 828 service.SetProxyScriptFetchers(fetcher, dhcp_fetcher); | 836 service.SetProxyScriptFetchers(fetcher, dhcp_fetcher); |
| 829 | 837 |
| 830 // Start resolve request. | 838 // Start resolve request. |
| 831 GURL url("http://www.google.com/"); | 839 GURL url("http://www.google.com/"); |
| 832 ProxyInfo info; | 840 ProxyInfo info; |
| 833 TestCompletionCallback callback; | 841 TestCompletionCallback callback; |
| 834 int rv = service.ResolveProxy( | 842 int rv = service.ResolveProxy( |
| 835 url, net::LOAD_NORMAL, &info, callback.callback(), NULL, NULL, | 843 url, net::LOAD_NORMAL, &info, callback.callback(), NULL, NULL, |
| 836 BoundNetLog()); | 844 BoundNetLog()); |
| 837 EXPECT_EQ(ERR_IO_PENDING, rv); | 845 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 838 | 846 |
| 839 // Check that nothing has been sent to the proxy resolver yet. | 847 // Check that nothing has been sent to the proxy resolver factory yet. |
| 840 ASSERT_EQ(0u, resolver.pending_requests().size()); | 848 ASSERT_EQ(0u, factory.pending_requests().size()); |
| 841 | 849 |
| 842 // Downloading the PAC script succeeds. | 850 // Downloading the PAC script succeeds. |
| 843 EXPECT_TRUE(fetcher->has_pending_request()); | 851 EXPECT_TRUE(fetcher->has_pending_request()); |
| 844 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 852 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 845 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); | 853 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); |
| 846 | 854 |
| 847 EXPECT_FALSE(fetcher->has_pending_request()); | 855 EXPECT_FALSE(fetcher->has_pending_request()); |
| 848 ASSERT_EQ(0u, resolver.pending_requests().size()); | 856 ASSERT_EQ(0u, factory.pending_requests().size()); |
| 849 | 857 |
| 850 // Since ProxyScriptDecider failed to identify a valid PAC and PAC was | 858 // Since ProxyScriptDecider failed to identify a valid PAC and PAC was |
| 851 // mandatory for this configuration, the ProxyService must not implicitly | 859 // mandatory for this configuration, the ProxyService must not implicitly |
| 852 // fall-back to DIRECT. | 860 // fall-back to DIRECT. |
| 853 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, | 861 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, |
| 854 callback.WaitForResult()); | 862 callback.WaitForResult()); |
| 855 EXPECT_FALSE(info.is_direct()); | 863 EXPECT_FALSE(info.is_direct()); |
| 856 } | 864 } |
| 857 | 865 |
| 858 TEST_F(ProxyServiceTest, ProxyResolverFailsInJavaScriptMandatoryPac) { | 866 TEST_F(ProxyServiceTest, ProxyResolverFailsInJavaScriptMandatoryPac) { |
| 859 // Test what happens when the ProxyResolver fails that is configured to use a | 867 // Test what happens when the ProxyResolver fails that is configured to use a |
| 860 // mandatory PAC script. The download and setting of the PAC script have | 868 // mandatory PAC script. The download and setting of the PAC script have |
| 861 // already succeeded, so this corresponds with a javascript runtime error | 869 // already succeeded, so this corresponds with a javascript runtime error |
| 862 // while calling FindProxyForURL(). | 870 // while calling FindProxyForURL(). |
| 863 | 871 |
| 864 ProxyConfig config( | 872 ProxyConfig config( |
| 865 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); | 873 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); |
| 866 config.set_pac_mandatory(true); | 874 config.set_pac_mandatory(true); |
| 867 | 875 |
| 868 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 876 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 869 | 877 |
| 870 MockAsyncProxyResolver resolver; | 878 MockAsyncProxyResolver resolver; |
| 879 MockAsyncProxyResolverFactory factory(false); | |
| 871 | 880 |
| 872 ProxyService service( | 881 ProxyService service( |
| 873 config_service, | 882 config_service, |
| 874 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 883 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 875 | 884 |
| 876 // Start first resolve request. | 885 // Start first resolve request. |
| 877 GURL url("http://www.google.com/"); | 886 GURL url("http://www.google.com/"); |
| 878 ProxyInfo info; | 887 ProxyInfo info; |
| 879 TestCompletionCallback callback1; | 888 TestCompletionCallback callback1; |
| 880 int rv = service.ResolveProxy( | 889 int rv = service.ResolveProxy( |
| 881 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, | 890 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, |
| 882 BoundNetLog()); | 891 BoundNetLog()); |
| 883 EXPECT_EQ(ERR_IO_PENDING, rv); | 892 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 884 | 893 |
| 885 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 894 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 886 resolver.pending_set_pac_script_request()->script_data()->url()); | 895 factory.pending_requests()[0]->script_data()->url()); |
| 887 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 896 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 888 | 897 |
| 889 ASSERT_EQ(1u, resolver.pending_requests().size()); | 898 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 890 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 899 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 891 | 900 |
| 892 // Fail the first resolve request in MockAsyncProxyResolver. | 901 // Fail the first resolve request in MockAsyncProxyResolver. |
| 893 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); | 902 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); |
| 894 | 903 |
| 895 // As the proxy resolver failed the request and is configured for a mandatory | 904 // As the proxy resolver failed the request and is configured for a mandatory |
| 896 // PAC script, ProxyService must not implicitly fall-back to DIRECT. | 905 // PAC script, ProxyService must not implicitly fall-back to DIRECT. |
| 897 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, | 906 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 920 } | 929 } |
| 921 | 930 |
| 922 TEST_F(ProxyServiceTest, ProxyFallback) { | 931 TEST_F(ProxyServiceTest, ProxyFallback) { |
| 923 // Test what happens when we specify multiple proxy servers and some of them | 932 // Test what happens when we specify multiple proxy servers and some of them |
| 924 // are bad. | 933 // are bad. |
| 925 | 934 |
| 926 MockProxyConfigService* config_service = | 935 MockProxyConfigService* config_service = |
| 927 new MockProxyConfigService("http://foopy/proxy.pac"); | 936 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 928 | 937 |
| 929 MockAsyncProxyResolver resolver; | 938 MockAsyncProxyResolver resolver; |
| 939 MockAsyncProxyResolverFactory factory(false); | |
| 930 | 940 |
| 931 ProxyService service( | 941 ProxyService service( |
| 932 config_service, | 942 config_service, |
| 933 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 943 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 934 | 944 |
| 935 GURL url("http://www.google.com/"); | 945 GURL url("http://www.google.com/"); |
| 936 | 946 |
| 937 // Get the proxy information. | 947 // Get the proxy information. |
| 938 ProxyInfo info; | 948 ProxyInfo info; |
| 939 TestCompletionCallback callback1; | 949 TestCompletionCallback callback1; |
| 940 int rv = service.ResolveProxy( | 950 int rv = service.ResolveProxy( |
| 941 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, | 951 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, |
| 942 BoundNetLog()); | 952 BoundNetLog()); |
| 943 EXPECT_EQ(ERR_IO_PENDING, rv); | 953 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 944 | 954 |
| 945 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 955 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 946 resolver.pending_set_pac_script_request()->script_data()->url()); | 956 factory.pending_requests()[0]->script_data()->url()); |
| 947 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 957 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 948 | 958 |
| 949 ASSERT_EQ(1u, resolver.pending_requests().size()); | 959 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 950 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 960 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 951 | 961 |
| 952 // Set the result in proxy resolver. | 962 // Set the result in proxy resolver. |
| 953 resolver.pending_requests()[0]->results()->UseNamedProxy( | 963 resolver.pending_requests()[0]->results()->UseNamedProxy( |
| 954 "foopy1:8080;foopy2:9090"); | 964 "foopy1:8080;foopy2:9090"); |
| 955 resolver.pending_requests()[0]->CompleteNow(OK); | 965 resolver.pending_requests()[0]->CompleteNow(OK); |
| 956 | 966 |
| 957 // The first item is valid. | 967 // The first item is valid. |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1075 // TODO(nsylvain): Test that the proxy can be retried after the delay. | 1085 // TODO(nsylvain): Test that the proxy can be retried after the delay. |
| 1076 } | 1086 } |
| 1077 | 1087 |
| 1078 // This test is similar to ProxyFallback, but this time we have an explicit | 1088 // This test is similar to ProxyFallback, but this time we have an explicit |
| 1079 // fallback choice to DIRECT. | 1089 // fallback choice to DIRECT. |
| 1080 TEST_F(ProxyServiceTest, ProxyFallbackToDirect) { | 1090 TEST_F(ProxyServiceTest, ProxyFallbackToDirect) { |
| 1081 MockProxyConfigService* config_service = | 1091 MockProxyConfigService* config_service = |
| 1082 new MockProxyConfigService("http://foopy/proxy.pac"); | 1092 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1083 | 1093 |
| 1084 MockAsyncProxyResolver resolver; | 1094 MockAsyncProxyResolver resolver; |
| 1095 MockAsyncProxyResolverFactory factory(false); | |
| 1085 | 1096 |
| 1086 ProxyService service( | 1097 ProxyService service( |
| 1087 config_service, | 1098 config_service, |
| 1088 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 1099 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 1089 | 1100 |
| 1090 GURL url("http://www.google.com/"); | 1101 GURL url("http://www.google.com/"); |
| 1091 | 1102 |
| 1092 // Get the proxy information. | 1103 // Get the proxy information. |
| 1093 ProxyInfo info; | 1104 ProxyInfo info; |
| 1094 TestCompletionCallback callback1; | 1105 TestCompletionCallback callback1; |
| 1095 int rv = service.ResolveProxy( | 1106 int rv = service.ResolveProxy( |
| 1096 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, | 1107 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, |
| 1097 BoundNetLog()); | 1108 BoundNetLog()); |
| 1098 EXPECT_EQ(ERR_IO_PENDING, rv); | 1109 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1099 | 1110 |
| 1100 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 1111 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 1101 resolver.pending_set_pac_script_request()->script_data()->url()); | 1112 factory.pending_requests()[0]->script_data()->url()); |
| 1102 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 1113 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1103 | 1114 |
| 1104 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1115 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1105 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1116 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1106 | 1117 |
| 1107 // Set the result in proxy resolver. | 1118 // Set the result in proxy resolver. |
| 1108 resolver.pending_requests()[0]->results()->UsePacString( | 1119 resolver.pending_requests()[0]->results()->UsePacString( |
| 1109 "PROXY foopy1:8080; PROXY foopy2:9090; DIRECT"); | 1120 "PROXY foopy1:8080; PROXY foopy2:9090; DIRECT"); |
| 1110 resolver.pending_requests()[0]->CompleteNow(OK); | 1121 resolver.pending_requests()[0]->CompleteNow(OK); |
| 1111 | 1122 |
| 1112 // Get the first result. | 1123 // Get the first result. |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1151 EXPECT_EQ(ERR_FAILED, rv); | 1162 EXPECT_EQ(ERR_FAILED, rv); |
| 1152 } | 1163 } |
| 1153 | 1164 |
| 1154 TEST_F(ProxyServiceTest, ProxyFallback_NewSettings) { | 1165 TEST_F(ProxyServiceTest, ProxyFallback_NewSettings) { |
| 1155 // Test proxy failover when new settings are available. | 1166 // Test proxy failover when new settings are available. |
| 1156 | 1167 |
| 1157 MockProxyConfigService* config_service = | 1168 MockProxyConfigService* config_service = |
| 1158 new MockProxyConfigService("http://foopy/proxy.pac"); | 1169 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1159 | 1170 |
| 1160 MockAsyncProxyResolver resolver; | 1171 MockAsyncProxyResolver resolver; |
| 1172 MockAsyncProxyResolverFactory factory(false); | |
| 1161 | 1173 |
| 1162 ProxyService service( | 1174 ProxyService service( |
| 1163 config_service, | 1175 config_service, |
| 1164 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 1176 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 1165 | 1177 |
| 1166 GURL url("http://www.google.com/"); | 1178 GURL url("http://www.google.com/"); |
| 1167 | 1179 |
| 1168 // Get the proxy information. | 1180 // Get the proxy information. |
| 1169 ProxyInfo info; | 1181 ProxyInfo info; |
| 1170 TestCompletionCallback callback1; | 1182 TestCompletionCallback callback1; |
| 1171 int rv = service.ResolveProxy( | 1183 int rv = service.ResolveProxy( |
| 1172 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, | 1184 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, |
| 1173 BoundNetLog()); | 1185 BoundNetLog()); |
| 1174 EXPECT_EQ(ERR_IO_PENDING, rv); | 1186 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1175 | 1187 |
| 1176 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 1188 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 1177 resolver.pending_set_pac_script_request()->script_data()->url()); | 1189 factory.pending_requests()[0]->script_data()->url()); |
| 1178 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 1190 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1179 | 1191 |
| 1180 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1192 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1181 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1193 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1182 | 1194 |
| 1183 // Set the result in proxy resolver. | 1195 // Set the result in proxy resolver. |
| 1184 resolver.pending_requests()[0]->results()->UseNamedProxy( | 1196 resolver.pending_requests()[0]->results()->UseNamedProxy( |
| 1185 "foopy1:8080;foopy2:9090"); | 1197 "foopy1:8080;foopy2:9090"); |
| 1186 resolver.pending_requests()[0]->CompleteNow(OK); | 1198 resolver.pending_requests()[0]->CompleteNow(OK); |
| 1187 | 1199 |
| 1188 // The first item is valid. | 1200 // The first item is valid. |
| 1189 EXPECT_EQ(OK, callback1.WaitForResult()); | 1201 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 1190 EXPECT_FALSE(info.is_direct()); | 1202 EXPECT_FALSE(info.is_direct()); |
| 1191 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1203 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 1192 | 1204 |
| 1193 // Fake an error on the proxy, and also a new configuration on the proxy. | 1205 // Fake an error on the proxy, and also a new configuration on the proxy. |
| 1194 config_service->SetConfig( | 1206 config_service->SetConfig( |
| 1195 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy-new/proxy.pac"))); | 1207 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy-new/proxy.pac"))); |
| 1196 | 1208 |
| 1197 TestCompletionCallback callback2; | 1209 TestCompletionCallback callback2; |
| 1198 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL, | 1210 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL, |
| 1199 net::ERR_PROXY_CONNECTION_FAILED, | 1211 net::ERR_PROXY_CONNECTION_FAILED, |
| 1200 &info, callback2.callback(), NULL, | 1212 &info, callback2.callback(), NULL, |
| 1201 NULL, BoundNetLog()); | 1213 NULL, BoundNetLog()); |
| 1202 EXPECT_EQ(ERR_IO_PENDING, rv); | 1214 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1203 | 1215 |
| 1204 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"), | 1216 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"), |
| 1205 resolver.pending_set_pac_script_request()->script_data()->url()); | 1217 factory.pending_requests()[0]->script_data()->url()); |
| 1206 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 1218 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1207 | 1219 |
| 1208 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1220 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1209 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1221 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1210 | 1222 |
| 1211 resolver.pending_requests()[0]->results()->UseNamedProxy( | 1223 resolver.pending_requests()[0]->results()->UseNamedProxy( |
| 1212 "foopy1:8080;foopy2:9090"); | 1224 "foopy1:8080;foopy2:9090"); |
| 1213 resolver.pending_requests()[0]->CompleteNow(OK); | 1225 resolver.pending_requests()[0]->CompleteNow(OK); |
| 1214 | 1226 |
| 1215 // The first proxy is still there since the configuration changed. | 1227 // The first proxy is still there since the configuration changed. |
| 1216 EXPECT_EQ(OK, callback2.WaitForResult()); | 1228 EXPECT_EQ(OK, callback2.WaitForResult()); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 1232 | 1244 |
| 1233 // We fake another error. It should go back to the first proxy. | 1245 // We fake another error. It should go back to the first proxy. |
| 1234 TestCompletionCallback callback4; | 1246 TestCompletionCallback callback4; |
| 1235 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL, | 1247 rv = service.ReconsiderProxyAfterError(url, net::LOAD_NORMAL, |
| 1236 net::ERR_PROXY_CONNECTION_FAILED, | 1248 net::ERR_PROXY_CONNECTION_FAILED, |
| 1237 &info, callback4.callback(), NULL, | 1249 &info, callback4.callback(), NULL, |
| 1238 NULL, BoundNetLog()); | 1250 NULL, BoundNetLog()); |
| 1239 EXPECT_EQ(ERR_IO_PENDING, rv); | 1251 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1240 | 1252 |
| 1241 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"), | 1253 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"), |
| 1242 resolver.pending_set_pac_script_request()->script_data()->url()); | 1254 factory.pending_requests()[0]->script_data()->url()); |
| 1243 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 1255 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1244 | 1256 |
| 1245 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1257 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1246 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1258 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1247 | 1259 |
| 1248 resolver.pending_requests()[0]->results()->UseNamedProxy( | 1260 resolver.pending_requests()[0]->results()->UseNamedProxy( |
| 1249 "foopy1:8080;foopy2:9090"); | 1261 "foopy1:8080;foopy2:9090"); |
| 1250 resolver.pending_requests()[0]->CompleteNow(OK); | 1262 resolver.pending_requests()[0]->CompleteNow(OK); |
| 1251 | 1263 |
| 1252 EXPECT_EQ(OK, callback4.WaitForResult()); | 1264 EXPECT_EQ(OK, callback4.WaitForResult()); |
| 1253 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1265 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 1254 | 1266 |
| 1255 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); | 1267 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); |
| 1256 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); | 1268 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); |
| 1257 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); | 1269 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
| 1258 } | 1270 } |
| 1259 | 1271 |
| 1260 TEST_F(ProxyServiceTest, ProxyFallback_BadConfig) { | 1272 TEST_F(ProxyServiceTest, ProxyFallback_BadConfig) { |
| 1261 // Test proxy failover when the configuration is bad. | 1273 // Test proxy failover when the configuration is bad. |
| 1262 | 1274 |
| 1263 MockProxyConfigService* config_service = | 1275 MockProxyConfigService* config_service = |
| 1264 new MockProxyConfigService("http://foopy/proxy.pac"); | 1276 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1265 | 1277 |
| 1266 MockAsyncProxyResolver resolver; | 1278 MockAsyncProxyResolver resolver; |
| 1279 MockAsyncProxyResolverFactory factory(false); | |
| 1267 | 1280 |
| 1268 ProxyService service( | 1281 ProxyService service( |
| 1269 config_service, | 1282 config_service, |
| 1270 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 1283 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 1271 | 1284 |
| 1272 GURL url("http://www.google.com/"); | 1285 GURL url("http://www.google.com/"); |
| 1273 | 1286 |
| 1274 // Get the proxy information. | 1287 // Get the proxy information. |
| 1275 ProxyInfo info; | 1288 ProxyInfo info; |
| 1276 TestCompletionCallback callback1; | 1289 TestCompletionCallback callback1; |
| 1277 int rv = service.ResolveProxy( | 1290 int rv = service.ResolveProxy( |
| 1278 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, | 1291 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, |
| 1279 BoundNetLog()); | 1292 BoundNetLog()); |
| 1280 EXPECT_EQ(ERR_IO_PENDING, rv); | 1293 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1281 | 1294 |
| 1282 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 1295 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 1283 resolver.pending_set_pac_script_request()->script_data()->url()); | 1296 factory.pending_requests()[0]->script_data()->url()); |
| 1284 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 1297 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1285 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1298 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1286 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1299 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1287 | 1300 |
| 1288 resolver.pending_requests()[0]->results()->UseNamedProxy( | 1301 resolver.pending_requests()[0]->results()->UseNamedProxy( |
| 1289 "foopy1:8080;foopy2:9090"); | 1302 "foopy1:8080;foopy2:9090"); |
| 1290 resolver.pending_requests()[0]->CompleteNow(OK); | 1303 resolver.pending_requests()[0]->CompleteNow(OK); |
| 1291 | 1304 |
| 1292 // The first item is valid. | 1305 // The first item is valid. |
| 1293 EXPECT_EQ(OK, callback1.WaitForResult()); | 1306 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 1294 EXPECT_FALSE(info.is_direct()); | 1307 EXPECT_FALSE(info.is_direct()); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1358 TEST_F(ProxyServiceTest, ProxyFallback_BadConfigMandatory) { | 1371 TEST_F(ProxyServiceTest, ProxyFallback_BadConfigMandatory) { |
| 1359 // Test proxy failover when the configuration is bad. | 1372 // Test proxy failover when the configuration is bad. |
| 1360 | 1373 |
| 1361 ProxyConfig config( | 1374 ProxyConfig config( |
| 1362 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); | 1375 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); |
| 1363 | 1376 |
| 1364 config.set_pac_mandatory(true); | 1377 config.set_pac_mandatory(true); |
| 1365 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1378 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1366 | 1379 |
| 1367 MockAsyncProxyResolver resolver; | 1380 MockAsyncProxyResolver resolver; |
| 1381 MockAsyncProxyResolverFactory factory(false); | |
| 1368 | 1382 |
| 1369 ProxyService service( | 1383 ProxyService service( |
| 1370 config_service, | 1384 config_service, |
| 1371 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 1385 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 1372 | 1386 |
| 1373 GURL url("http://www.google.com/"); | 1387 GURL url("http://www.google.com/"); |
| 1374 | 1388 |
| 1375 // Get the proxy information. | 1389 // Get the proxy information. |
| 1376 ProxyInfo info; | 1390 ProxyInfo info; |
| 1377 TestCompletionCallback callback1; | 1391 TestCompletionCallback callback1; |
| 1378 int rv = service.ResolveProxy( | 1392 int rv = service.ResolveProxy( |
| 1379 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, | 1393 url, net::LOAD_NORMAL, &info, callback1.callback(), NULL, NULL, |
| 1380 BoundNetLog()); | 1394 BoundNetLog()); |
| 1381 EXPECT_EQ(ERR_IO_PENDING, rv); | 1395 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1382 | 1396 |
| 1383 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 1397 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 1384 resolver.pending_set_pac_script_request()->script_data()->url()); | 1398 factory.pending_requests()[0]->script_data()->url()); |
| 1385 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 1399 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1386 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1400 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1387 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1401 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1388 | 1402 |
| 1389 resolver.pending_requests()[0]->results()->UseNamedProxy( | 1403 resolver.pending_requests()[0]->results()->UseNamedProxy( |
| 1390 "foopy1:8080;foopy2:9090"); | 1404 "foopy1:8080;foopy2:9090"); |
| 1391 resolver.pending_requests()[0]->CompleteNow(OK); | 1405 resolver.pending_requests()[0]->CompleteNow(OK); |
| 1392 | 1406 |
| 1393 // The first item is valid. | 1407 // The first item is valid. |
| 1394 EXPECT_EQ(OK, callback1.WaitForResult()); | 1408 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 1395 EXPECT_FALSE(info.is_direct()); | 1409 EXPECT_FALSE(info.is_direct()); |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1648 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); | 1662 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); |
| 1649 } | 1663 } |
| 1650 } | 1664 } |
| 1651 | 1665 |
| 1652 // Test cancellation of an in-progress request. | 1666 // Test cancellation of an in-progress request. |
| 1653 TEST_F(ProxyServiceTest, CancelInProgressRequest) { | 1667 TEST_F(ProxyServiceTest, CancelInProgressRequest) { |
| 1654 MockProxyConfigService* config_service = | 1668 MockProxyConfigService* config_service = |
| 1655 new MockProxyConfigService("http://foopy/proxy.pac"); | 1669 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1656 | 1670 |
| 1657 MockAsyncProxyResolver resolver; | 1671 MockAsyncProxyResolver resolver; |
| 1672 MockAsyncProxyResolverFactory factory(false); | |
| 1658 | 1673 |
| 1659 ProxyService service( | 1674 ProxyService service( |
| 1660 config_service, | 1675 config_service, |
| 1661 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 1676 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 1662 | 1677 |
| 1663 // Start 3 requests. | 1678 // Start 3 requests. |
| 1664 | 1679 |
| 1665 ProxyInfo info1; | 1680 ProxyInfo info1; |
| 1666 TestCompletionCallback callback1; | 1681 TestCompletionCallback callback1; |
| 1667 int rv = service.ResolveProxy(GURL("http://request1"), net::LOAD_NORMAL, | 1682 int rv = service.ResolveProxy(GURL("http://request1"), net::LOAD_NORMAL, |
| 1668 &info1, callback1.callback(), NULL, NULL, | 1683 &info1, callback1.callback(), NULL, NULL, |
| 1669 BoundNetLog()); | 1684 BoundNetLog()); |
| 1670 EXPECT_EQ(ERR_IO_PENDING, rv); | 1685 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1671 | 1686 |
| 1672 // Nothing has been sent to the proxy resolver yet, since the proxy | |
| 1673 // resolver has not been configured yet. | |
| 1674 ASSERT_EQ(0u, resolver.pending_requests().size()); | |
| 1675 | |
| 1676 // Successfully initialize the PAC script. | 1687 // Successfully initialize the PAC script. |
| 1677 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 1688 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 1678 resolver.pending_set_pac_script_request()->script_data()->url()); | 1689 factory.pending_requests()[0]->script_data()->url()); |
| 1679 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 1690 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1680 | 1691 |
| 1681 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1692 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1682 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); | 1693 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); |
| 1683 | 1694 |
| 1684 ProxyInfo info2; | 1695 ProxyInfo info2; |
| 1685 TestCompletionCallback callback2; | 1696 TestCompletionCallback callback2; |
| 1686 ProxyService::PacRequest* request2; | 1697 ProxyService::PacRequest* request2; |
| 1687 rv = service.ResolveProxy(GURL("http://request2"), net::LOAD_NORMAL, &info2, | 1698 rv = service.ResolveProxy(GURL("http://request2"), net::LOAD_NORMAL, &info2, |
| 1688 callback2.callback(), &request2, NULL, | 1699 callback2.callback(), &request2, NULL, |
| 1689 BoundNetLog()); | 1700 BoundNetLog()); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1725 EXPECT_EQ(OK, callback3.WaitForResult()); | 1736 EXPECT_EQ(OK, callback3.WaitForResult()); |
| 1726 EXPECT_EQ("request3:80", info3.proxy_server().ToURI()); | 1737 EXPECT_EQ("request3:80", info3.proxy_server().ToURI()); |
| 1727 } | 1738 } |
| 1728 | 1739 |
| 1729 // Test the initial PAC download for resolver that expects bytes. | 1740 // Test the initial PAC download for resolver that expects bytes. |
| 1730 TEST_F(ProxyServiceTest, InitialPACScriptDownload) { | 1741 TEST_F(ProxyServiceTest, InitialPACScriptDownload) { |
| 1731 MockProxyConfigService* config_service = | 1742 MockProxyConfigService* config_service = |
| 1732 new MockProxyConfigService("http://foopy/proxy.pac"); | 1743 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1733 | 1744 |
| 1734 MockAsyncProxyResolverExpectsBytes resolver; | 1745 MockAsyncProxyResolverExpectsBytes resolver; |
| 1746 MockAsyncProxyResolverFactory factory(true); | |
| 1735 | 1747 |
| 1736 ProxyService service( | 1748 ProxyService service( |
| 1737 config_service, | 1749 config_service, |
| 1738 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 1750 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 1739 | 1751 |
| 1740 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1752 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1741 service.SetProxyScriptFetchers(fetcher, | 1753 service.SetProxyScriptFetchers(fetcher, |
| 1742 new DoNothingDhcpProxyScriptFetcher()); | 1754 new DoNothingDhcpProxyScriptFetcher()); |
| 1743 | 1755 |
| 1744 // Start 3 requests. | 1756 // Start 3 requests. |
| 1745 | 1757 |
| 1746 ProxyInfo info1; | 1758 ProxyInfo info1; |
| 1747 TestCompletionCallback callback1; | 1759 TestCompletionCallback callback1; |
| 1748 ProxyService::PacRequest* request1; | 1760 ProxyService::PacRequest* request1; |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 1764 EXPECT_EQ(ERR_IO_PENDING, rv); | 1776 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1765 | 1777 |
| 1766 ProxyInfo info3; | 1778 ProxyInfo info3; |
| 1767 TestCompletionCallback callback3; | 1779 TestCompletionCallback callback3; |
| 1768 ProxyService::PacRequest* request3; | 1780 ProxyService::PacRequest* request3; |
| 1769 rv = service.ResolveProxy(GURL("http://request3"), net::LOAD_NORMAL, &info3, | 1781 rv = service.ResolveProxy(GURL("http://request3"), net::LOAD_NORMAL, &info3, |
| 1770 callback3.callback(), &request3, NULL, | 1782 callback3.callback(), &request3, NULL, |
| 1771 BoundNetLog()); | 1783 BoundNetLog()); |
| 1772 EXPECT_EQ(ERR_IO_PENDING, rv); | 1784 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1773 | 1785 |
| 1774 // Nothing has been sent to the resolver yet. | 1786 // Nothing has been sent to the factory yet. |
| 1775 EXPECT_TRUE(resolver.pending_requests().empty()); | 1787 EXPECT_TRUE(factory.pending_requests().empty()); |
| 1776 | 1788 |
| 1777 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, | 1789 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, |
| 1778 service.GetLoadState(request1)); | 1790 service.GetLoadState(request1)); |
| 1779 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, | 1791 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, |
| 1780 service.GetLoadState(request2)); | 1792 service.GetLoadState(request2)); |
| 1781 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, | 1793 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, |
| 1782 service.GetLoadState(request3)); | 1794 service.GetLoadState(request3)); |
| 1783 | 1795 |
| 1784 // At this point the ProxyService should be waiting for the | 1796 // At this point the ProxyService should be waiting for the |
| 1785 // ProxyScriptFetcher to invoke its completion callback, notifying it of | 1797 // ProxyScriptFetcher to invoke its completion callback, notifying it of |
| 1786 // PAC script download completion. | 1798 // PAC script download completion. |
| 1787 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); | 1799 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); |
| 1788 | 1800 |
| 1789 // Now that the PAC script is downloaded, it will have been sent to the proxy | 1801 // Now that the PAC script is downloaded, it will have been sent to the proxy |
| 1790 // resolver. | 1802 // resolver. |
| 1791 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), | 1803 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), |
| 1792 resolver.pending_set_pac_script_request()->script_data()->utf16()); | 1804 factory.pending_requests()[0]->script_data()->utf16()); |
| 1793 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 1805 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1794 | 1806 |
| 1795 ASSERT_EQ(3u, resolver.pending_requests().size()); | 1807 ASSERT_EQ(3u, resolver.pending_requests().size()); |
| 1796 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); | 1808 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); |
| 1797 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[1]->url()); | 1809 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[1]->url()); |
| 1798 EXPECT_EQ(GURL("http://request3"), resolver.pending_requests()[2]->url()); | 1810 EXPECT_EQ(GURL("http://request3"), resolver.pending_requests()[2]->url()); |
| 1799 | 1811 |
| 1800 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request1)); | 1812 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request1)); |
| 1801 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request2)); | 1813 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request2)); |
| 1802 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request3)); | 1814 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request3)); |
| 1803 | 1815 |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 1832 EXPECT_FALSE(info3.proxy_resolve_end_time().is_null()); | 1844 EXPECT_FALSE(info3.proxy_resolve_end_time().is_null()); |
| 1833 EXPECT_LE(info3.proxy_resolve_start_time(), info3.proxy_resolve_end_time()); | 1845 EXPECT_LE(info3.proxy_resolve_start_time(), info3.proxy_resolve_end_time()); |
| 1834 } | 1846 } |
| 1835 | 1847 |
| 1836 // Test changing the ProxyScriptFetcher while PAC download is in progress. | 1848 // Test changing the ProxyScriptFetcher while PAC download is in progress. |
| 1837 TEST_F(ProxyServiceTest, ChangeScriptFetcherWhilePACDownloadInProgress) { | 1849 TEST_F(ProxyServiceTest, ChangeScriptFetcherWhilePACDownloadInProgress) { |
| 1838 MockProxyConfigService* config_service = | 1850 MockProxyConfigService* config_service = |
| 1839 new MockProxyConfigService("http://foopy/proxy.pac"); | 1851 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1840 | 1852 |
| 1841 MockAsyncProxyResolverExpectsBytes resolver; | 1853 MockAsyncProxyResolverExpectsBytes resolver; |
| 1854 MockAsyncProxyResolverFactory factory(true); | |
| 1842 | 1855 |
| 1843 ProxyService service( | 1856 ProxyService service( |
| 1844 config_service, | 1857 config_service, |
| 1845 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 1858 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 1846 | 1859 |
| 1847 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1860 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1848 service.SetProxyScriptFetchers(fetcher, | 1861 service.SetProxyScriptFetchers(fetcher, |
| 1849 new DoNothingDhcpProxyScriptFetcher()); | 1862 new DoNothingDhcpProxyScriptFetcher()); |
| 1850 | 1863 |
| 1851 // Start 2 requests. | 1864 // Start 2 requests. |
| 1852 | 1865 |
| 1853 ProxyInfo info1; | 1866 ProxyInfo info1; |
| 1854 TestCompletionCallback callback1; | 1867 TestCompletionCallback callback1; |
| 1855 int rv = service.ResolveProxy(GURL("http://request1"), net::LOAD_NORMAL, | 1868 int rv = service.ResolveProxy(GURL("http://request1"), net::LOAD_NORMAL, |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 1871 // ProxyScriptFetcher to invoke its completion callback, notifying it of | 1884 // ProxyScriptFetcher to invoke its completion callback, notifying it of |
| 1872 // PAC script download completion. | 1885 // PAC script download completion. |
| 1873 | 1886 |
| 1874 // We now change out the ProxyService's script fetcher. We should restart | 1887 // We now change out the ProxyService's script fetcher. We should restart |
| 1875 // the initialization with the new fetcher. | 1888 // the initialization with the new fetcher. |
| 1876 | 1889 |
| 1877 fetcher = new MockProxyScriptFetcher; | 1890 fetcher = new MockProxyScriptFetcher; |
| 1878 service.SetProxyScriptFetchers(fetcher, | 1891 service.SetProxyScriptFetchers(fetcher, |
| 1879 new DoNothingDhcpProxyScriptFetcher()); | 1892 new DoNothingDhcpProxyScriptFetcher()); |
| 1880 | 1893 |
| 1881 // Nothing has been sent to the resolver yet. | 1894 // Nothing has been sent to the factory yet. |
| 1882 EXPECT_TRUE(resolver.pending_requests().empty()); | 1895 EXPECT_TRUE(factory.pending_requests().empty()); |
| 1883 | 1896 |
| 1884 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); | 1897 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); |
| 1885 | 1898 |
| 1886 // Now that the PAC script is downloaded, it will have been sent to the proxy | 1899 // Now that the PAC script is downloaded, it will have been sent to the proxy |
| 1887 // resolver. | 1900 // resolver. |
| 1888 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), | 1901 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), |
| 1889 resolver.pending_set_pac_script_request()->script_data()->utf16()); | 1902 factory.pending_requests()[0]->script_data()->utf16()); |
| 1890 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 1903 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1891 | 1904 |
| 1892 ASSERT_EQ(2u, resolver.pending_requests().size()); | 1905 ASSERT_EQ(2u, resolver.pending_requests().size()); |
| 1893 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); | 1906 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); |
| 1894 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[1]->url()); | 1907 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[1]->url()); |
| 1895 } | 1908 } |
| 1896 | 1909 |
| 1897 // Test cancellation of a request, while the PAC script is being fetched. | 1910 // Test cancellation of a request, while the PAC script is being fetched. |
| 1898 TEST_F(ProxyServiceTest, CancelWhilePACFetching) { | 1911 TEST_F(ProxyServiceTest, CancelWhilePACFetching) { |
| 1899 MockProxyConfigService* config_service = | 1912 MockProxyConfigService* config_service = |
| 1900 new MockProxyConfigService("http://foopy/proxy.pac"); | 1913 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1901 | 1914 |
| 1902 MockAsyncProxyResolverExpectsBytes resolver; | 1915 MockAsyncProxyResolverExpectsBytes resolver; |
| 1916 MockAsyncProxyResolverFactory factory(true); | |
| 1903 | 1917 |
| 1904 ProxyService service( | 1918 ProxyService service( |
| 1905 config_service, | 1919 config_service, |
| 1906 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 1920 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 1907 | 1921 |
| 1908 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1922 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1909 service.SetProxyScriptFetchers(fetcher, | 1923 service.SetProxyScriptFetchers(fetcher, |
| 1910 new DoNothingDhcpProxyScriptFetcher()); | 1924 new DoNothingDhcpProxyScriptFetcher()); |
| 1911 | 1925 |
| 1912 // Start 3 requests. | 1926 // Start 3 requests. |
| 1913 ProxyInfo info1; | 1927 ProxyInfo info1; |
| 1914 TestCompletionCallback callback1; | 1928 TestCompletionCallback callback1; |
| 1915 ProxyService::PacRequest* request1; | 1929 ProxyService::PacRequest* request1; |
| 1916 BoundTestNetLog log1; | 1930 BoundTestNetLog log1; |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 1930 callback2.callback(), &request2, NULL, | 1944 callback2.callback(), &request2, NULL, |
| 1931 BoundNetLog()); | 1945 BoundNetLog()); |
| 1932 EXPECT_EQ(ERR_IO_PENDING, rv); | 1946 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1933 | 1947 |
| 1934 ProxyInfo info3; | 1948 ProxyInfo info3; |
| 1935 TestCompletionCallback callback3; | 1949 TestCompletionCallback callback3; |
| 1936 rv = service.ResolveProxy(GURL("http://request3"), net::LOAD_NORMAL, &info3, | 1950 rv = service.ResolveProxy(GURL("http://request3"), net::LOAD_NORMAL, &info3, |
| 1937 callback3.callback(), NULL, NULL, BoundNetLog()); | 1951 callback3.callback(), NULL, NULL, BoundNetLog()); |
| 1938 EXPECT_EQ(ERR_IO_PENDING, rv); | 1952 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1939 | 1953 |
| 1940 // Nothing has been sent to the resolver yet. | 1954 // Nothing has been sent to the factory yet. |
| 1941 EXPECT_TRUE(resolver.pending_requests().empty()); | 1955 EXPECT_TRUE(factory.pending_requests().empty()); |
| 1942 | 1956 |
| 1943 // Cancel the first 2 requests. | 1957 // Cancel the first 2 requests. |
| 1944 service.CancelPacRequest(request1); | 1958 service.CancelPacRequest(request1); |
| 1945 service.CancelPacRequest(request2); | 1959 service.CancelPacRequest(request2); |
| 1946 | 1960 |
| 1947 // At this point the ProxyService should be waiting for the | 1961 // At this point the ProxyService should be waiting for the |
| 1948 // ProxyScriptFetcher to invoke its completion callback, notifying it of | 1962 // ProxyScriptFetcher to invoke its completion callback, notifying it of |
| 1949 // PAC script download completion. | 1963 // PAC script download completion. |
| 1950 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); | 1964 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); |
| 1951 | 1965 |
| 1952 // Now that the PAC script is downloaded, it will have been sent to the | 1966 // Now that the PAC script is downloaded, it will have been sent to the |
| 1953 // proxy resolver. | 1967 // proxy resolver. |
| 1954 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), | 1968 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), |
| 1955 resolver.pending_set_pac_script_request()->script_data()->utf16()); | 1969 factory.pending_requests()[0]->script_data()->utf16()); |
| 1956 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 1970 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1957 | 1971 |
| 1958 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1972 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1959 EXPECT_EQ(GURL("http://request3"), resolver.pending_requests()[0]->url()); | 1973 EXPECT_EQ(GURL("http://request3"), resolver.pending_requests()[0]->url()); |
| 1960 | 1974 |
| 1961 // Complete all the requests. | 1975 // Complete all the requests. |
| 1962 resolver.pending_requests()[0]->results()->UseNamedProxy("request3:80"); | 1976 resolver.pending_requests()[0]->results()->UseNamedProxy("request3:80"); |
| 1963 resolver.pending_requests()[0]->CompleteNow(OK); | 1977 resolver.pending_requests()[0]->CompleteNow(OK); |
| 1964 | 1978 |
| 1965 EXPECT_EQ(OK, callback3.WaitForResult()); | 1979 EXPECT_EQ(OK, callback3.WaitForResult()); |
| 1966 EXPECT_EQ("request3:80", info3.proxy_server().ToURI()); | 1980 EXPECT_EQ("request3:80", info3.proxy_server().ToURI()); |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 1989 | 2003 |
| 1990 // Test that if auto-detect fails, we fall-back to the custom pac. | 2004 // Test that if auto-detect fails, we fall-back to the custom pac. |
| 1991 TEST_F(ProxyServiceTest, FallbackFromAutodetectToCustomPac) { | 2005 TEST_F(ProxyServiceTest, FallbackFromAutodetectToCustomPac) { |
| 1992 ProxyConfig config; | 2006 ProxyConfig config; |
| 1993 config.set_auto_detect(true); | 2007 config.set_auto_detect(true); |
| 1994 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 2008 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
| 1995 config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. | 2009 config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. |
| 1996 | 2010 |
| 1997 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 2011 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1998 MockAsyncProxyResolverExpectsBytes resolver; | 2012 MockAsyncProxyResolverExpectsBytes resolver; |
| 2013 MockAsyncProxyResolverFactory factory(true); | |
| 1999 ProxyService service( | 2014 ProxyService service( |
| 2000 config_service, | 2015 config_service, |
| 2001 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 2016 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 2002 | 2017 |
| 2003 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2018 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2004 service.SetProxyScriptFetchers(fetcher, | 2019 service.SetProxyScriptFetchers(fetcher, |
| 2005 new DoNothingDhcpProxyScriptFetcher()); | 2020 new DoNothingDhcpProxyScriptFetcher()); |
| 2006 | 2021 |
| 2007 // Start 2 requests. | 2022 // Start 2 requests. |
| 2008 | 2023 |
| 2009 ProxyInfo info1; | 2024 ProxyInfo info1; |
| 2010 TestCompletionCallback callback1; | 2025 TestCompletionCallback callback1; |
| 2011 int rv = service.ResolveProxy(GURL("http://request1"), net::LOAD_NORMAL, | 2026 int rv = service.ResolveProxy(GURL("http://request1"), net::LOAD_NORMAL, |
| 2012 &info1, callback1.callback(), NULL, NULL, | 2027 &info1, callback1.callback(), NULL, NULL, |
| 2013 BoundNetLog()); | 2028 BoundNetLog()); |
| 2014 EXPECT_EQ(ERR_IO_PENDING, rv); | 2029 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2015 | 2030 |
| 2016 ProxyInfo info2; | 2031 ProxyInfo info2; |
| 2017 TestCompletionCallback callback2; | 2032 TestCompletionCallback callback2; |
| 2018 ProxyService::PacRequest* request2; | 2033 ProxyService::PacRequest* request2; |
| 2019 rv = service.ResolveProxy(GURL("http://request2"), net::LOAD_NORMAL, &info2, | 2034 rv = service.ResolveProxy(GURL("http://request2"), net::LOAD_NORMAL, &info2, |
| 2020 callback2.callback(), &request2, NULL, | 2035 callback2.callback(), &request2, NULL, |
| 2021 BoundNetLog()); | 2036 BoundNetLog()); |
| 2022 EXPECT_EQ(ERR_IO_PENDING, rv); | 2037 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2023 | 2038 |
| 2024 // Check that nothing has been sent to the proxy resolver yet. | 2039 // Check that nothing has been sent to the proxy resolver factory yet. |
| 2025 ASSERT_EQ(0u, resolver.pending_requests().size()); | 2040 ASSERT_EQ(0u, factory.pending_requests().size()); |
| 2026 | 2041 |
| 2027 // It should be trying to auto-detect first -- FAIL the autodetect during | 2042 // It should be trying to auto-detect first -- FAIL the autodetect during |
| 2028 // the script download. | 2043 // the script download. |
| 2029 EXPECT_TRUE(fetcher->has_pending_request()); | 2044 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2030 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); | 2045 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
| 2031 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); | 2046 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); |
| 2032 | 2047 |
| 2033 // Next it should be trying the custom PAC url. | 2048 // Next it should be trying the custom PAC url. |
| 2034 EXPECT_TRUE(fetcher->has_pending_request()); | 2049 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2035 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2050 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2036 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); | 2051 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); |
| 2037 | 2052 |
| 2038 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), | 2053 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), |
| 2039 resolver.pending_set_pac_script_request()->script_data()->utf16()); | 2054 factory.pending_requests()[0]->script_data()->utf16()); |
| 2040 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 2055 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 2041 | 2056 |
| 2042 // Now finally, the pending requests should have been sent to the resolver | 2057 // Now finally, the pending requests should have been sent to the resolver |
| 2043 // (which was initialized with custom PAC script). | 2058 // (which was initialized with custom PAC script). |
| 2044 | 2059 |
| 2045 ASSERT_EQ(2u, resolver.pending_requests().size()); | 2060 ASSERT_EQ(2u, resolver.pending_requests().size()); |
| 2046 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); | 2061 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); |
| 2047 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[1]->url()); | 2062 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[1]->url()); |
| 2048 | 2063 |
| 2049 // Complete the pending requests. | 2064 // Complete the pending requests. |
| 2050 resolver.pending_requests()[1]->results()->UseNamedProxy("request2:80"); | 2065 resolver.pending_requests()[1]->results()->UseNamedProxy("request2:80"); |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 2069 // This is the same test as FallbackFromAutodetectToCustomPac, except | 2084 // This is the same test as FallbackFromAutodetectToCustomPac, except |
| 2070 // the auto-detect script fails parsing rather than downloading. | 2085 // the auto-detect script fails parsing rather than downloading. |
| 2071 TEST_F(ProxyServiceTest, FallbackFromAutodetectToCustomPac2) { | 2086 TEST_F(ProxyServiceTest, FallbackFromAutodetectToCustomPac2) { |
| 2072 ProxyConfig config; | 2087 ProxyConfig config; |
| 2073 config.set_auto_detect(true); | 2088 config.set_auto_detect(true); |
| 2074 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 2089 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
| 2075 config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. | 2090 config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. |
| 2076 | 2091 |
| 2077 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 2092 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 2078 MockAsyncProxyResolverExpectsBytes resolver; | 2093 MockAsyncProxyResolverExpectsBytes resolver; |
| 2094 MockAsyncProxyResolverFactory factory(true); | |
| 2079 ProxyService service( | 2095 ProxyService service( |
| 2080 config_service, | 2096 config_service, |
| 2081 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 2097 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 2082 | 2098 |
| 2083 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2099 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2084 service.SetProxyScriptFetchers(fetcher, | 2100 service.SetProxyScriptFetchers(fetcher, |
| 2085 new DoNothingDhcpProxyScriptFetcher()); | 2101 new DoNothingDhcpProxyScriptFetcher()); |
| 2086 | 2102 |
| 2087 // Start 2 requests. | 2103 // Start 2 requests. |
| 2088 | 2104 |
| 2089 ProxyInfo info1; | 2105 ProxyInfo info1; |
| 2090 TestCompletionCallback callback1; | 2106 TestCompletionCallback callback1; |
| 2091 int rv = service.ResolveProxy(GURL("http://request1"), net::LOAD_NORMAL, | 2107 int rv = service.ResolveProxy(GURL("http://request1"), net::LOAD_NORMAL, |
| 2092 &info1, callback1.callback(), NULL, NULL, | 2108 &info1, callback1.callback(), NULL, NULL, |
| 2093 BoundNetLog()); | 2109 BoundNetLog()); |
| 2094 EXPECT_EQ(ERR_IO_PENDING, rv); | 2110 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2095 | 2111 |
| 2096 ProxyInfo info2; | 2112 ProxyInfo info2; |
| 2097 TestCompletionCallback callback2; | 2113 TestCompletionCallback callback2; |
| 2098 ProxyService::PacRequest* request2; | 2114 ProxyService::PacRequest* request2; |
| 2099 rv = service.ResolveProxy(GURL("http://request2"), net::LOAD_NORMAL, &info2, | 2115 rv = service.ResolveProxy(GURL("http://request2"), net::LOAD_NORMAL, &info2, |
| 2100 callback2.callback(), &request2, NULL, | 2116 callback2.callback(), &request2, NULL, |
| 2101 BoundNetLog()); | 2117 BoundNetLog()); |
| 2102 EXPECT_EQ(ERR_IO_PENDING, rv); | 2118 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2103 | 2119 |
| 2104 // Check that nothing has been sent to the proxy resolver yet. | 2120 // Check that nothing has been sent to the proxy resolver factory yet. |
| 2105 ASSERT_EQ(0u, resolver.pending_requests().size()); | 2121 ASSERT_EQ(0u, factory.pending_requests().size()); |
| 2106 | 2122 |
| 2107 // It should be trying to auto-detect first -- succeed the download. | 2123 // It should be trying to auto-detect first -- succeed the download. |
| 2108 EXPECT_TRUE(fetcher->has_pending_request()); | 2124 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2109 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); | 2125 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
| 2110 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); | 2126 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); |
| 2111 | 2127 |
| 2112 // The script contents passed failed basic verification step (since didn't | 2128 // The script contents passed failed basic verification step (since didn't |
| 2113 // contain token FindProxyForURL), so it was never passed to the resolver. | 2129 // contain token FindProxyForURL), so it was never passed to the resolver. |
| 2114 | 2130 |
| 2115 // Next it should be trying the custom PAC url. | 2131 // Next it should be trying the custom PAC url. |
| 2116 EXPECT_TRUE(fetcher->has_pending_request()); | 2132 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2117 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2133 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2118 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); | 2134 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); |
| 2119 | 2135 |
| 2120 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), | 2136 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), |
| 2121 resolver.pending_set_pac_script_request()->script_data()->utf16()); | 2137 factory.pending_requests()[0]->script_data()->utf16()); |
| 2122 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 2138 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 2123 | 2139 |
| 2124 // Now finally, the pending requests should have been sent to the resolver | 2140 // Now finally, the pending requests should have been sent to the resolver |
| 2125 // (which was initialized with custom PAC script). | 2141 // (which was initialized with custom PAC script). |
| 2126 | 2142 |
| 2127 ASSERT_EQ(2u, resolver.pending_requests().size()); | 2143 ASSERT_EQ(2u, resolver.pending_requests().size()); |
| 2128 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); | 2144 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); |
| 2129 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[1]->url()); | 2145 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[1]->url()); |
| 2130 | 2146 |
| 2131 // Complete the pending requests. | 2147 // Complete the pending requests. |
| 2132 resolver.pending_requests()[1]->results()->UseNamedProxy("request2:80"); | 2148 resolver.pending_requests()[1]->results()->UseNamedProxy("request2:80"); |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 2144 | 2160 |
| 2145 // Test that if all of auto-detect, a custom PAC script, and manual settings | 2161 // Test that if all of auto-detect, a custom PAC script, and manual settings |
| 2146 // are given, then we will try them in that order. | 2162 // are given, then we will try them in that order. |
| 2147 TEST_F(ProxyServiceTest, FallbackFromAutodetectToCustomToManual) { | 2163 TEST_F(ProxyServiceTest, FallbackFromAutodetectToCustomToManual) { |
| 2148 ProxyConfig config; | 2164 ProxyConfig config; |
| 2149 config.set_auto_detect(true); | 2165 config.set_auto_detect(true); |
| 2150 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 2166 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
| 2151 config.proxy_rules().ParseFromString("http=foopy:80"); | 2167 config.proxy_rules().ParseFromString("http=foopy:80"); |
| 2152 | 2168 |
| 2153 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 2169 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 2154 MockAsyncProxyResolverExpectsBytes resolver; | 2170 MockAsyncProxyResolverFactory factory(true); |
| 2155 ProxyService service( | 2171 ProxyService service( |
| 2156 config_service, | 2172 config_service, |
| 2157 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 2173 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 2158 | 2174 |
| 2159 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2175 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2160 service.SetProxyScriptFetchers(fetcher, | 2176 service.SetProxyScriptFetchers(fetcher, |
| 2161 new DoNothingDhcpProxyScriptFetcher()); | 2177 new DoNothingDhcpProxyScriptFetcher()); |
| 2162 | 2178 |
| 2163 // Start 2 requests. | 2179 // Start 2 requests. |
| 2164 | 2180 |
| 2165 ProxyInfo info1; | 2181 ProxyInfo info1; |
| 2166 TestCompletionCallback callback1; | 2182 TestCompletionCallback callback1; |
| 2167 int rv = service.ResolveProxy(GURL("http://request1"), net::LOAD_NORMAL, | 2183 int rv = service.ResolveProxy(GURL("http://request1"), net::LOAD_NORMAL, |
| 2168 &info1, callback1.callback(), NULL, NULL, | 2184 &info1, callback1.callback(), NULL, NULL, |
| 2169 BoundNetLog()); | 2185 BoundNetLog()); |
| 2170 EXPECT_EQ(ERR_IO_PENDING, rv); | 2186 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2171 | 2187 |
| 2172 ProxyInfo info2; | 2188 ProxyInfo info2; |
| 2173 TestCompletionCallback callback2; | 2189 TestCompletionCallback callback2; |
| 2174 ProxyService::PacRequest* request2; | 2190 ProxyService::PacRequest* request2; |
| 2175 rv = service.ResolveProxy(GURL("http://request2"), net::LOAD_NORMAL, &info2, | 2191 rv = service.ResolveProxy(GURL("http://request2"), net::LOAD_NORMAL, &info2, |
| 2176 callback2.callback(), &request2, NULL, | 2192 callback2.callback(), &request2, NULL, |
| 2177 BoundNetLog()); | 2193 BoundNetLog()); |
| 2178 EXPECT_EQ(ERR_IO_PENDING, rv); | 2194 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2179 | 2195 |
| 2180 // Check that nothing has been sent to the proxy resolver yet. | 2196 // Check that nothing has been sent to the proxy resolver factory yet. |
| 2181 ASSERT_EQ(0u, resolver.pending_requests().size()); | 2197 ASSERT_EQ(0u, factory.pending_requests().size()); |
| 2182 | 2198 |
| 2183 // It should be trying to auto-detect first -- fail the download. | 2199 // It should be trying to auto-detect first -- fail the download. |
| 2184 EXPECT_TRUE(fetcher->has_pending_request()); | 2200 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2185 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); | 2201 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
| 2186 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); | 2202 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); |
| 2187 | 2203 |
| 2188 // Next it should be trying the custom PAC url -- fail the download. | 2204 // Next it should be trying the custom PAC url -- fail the download. |
| 2189 EXPECT_TRUE(fetcher->has_pending_request()); | 2205 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2190 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2206 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2191 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); | 2207 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); |
| 2192 | 2208 |
| 2193 // Since we never managed to initialize a resolver, nothing should have been | 2209 // Since we never managed to initialize a resolver, nothing should have been |
| 2194 // sent to it. | 2210 // sent to it. |
| 2195 ASSERT_EQ(0u, resolver.pending_requests().size()); | 2211 ASSERT_EQ(0u, factory.pending_requests().size()); |
| 2196 | 2212 |
| 2197 // Verify that requests ran as expected -- they should have fallen back to | 2213 // Verify that requests ran as expected -- they should have fallen back to |
| 2198 // the manual proxy configuration for HTTP urls. | 2214 // the manual proxy configuration for HTTP urls. |
| 2199 EXPECT_EQ(OK, callback1.WaitForResult()); | 2215 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 2200 EXPECT_EQ("foopy:80", info1.proxy_server().ToURI()); | 2216 EXPECT_EQ("foopy:80", info1.proxy_server().ToURI()); |
| 2201 | 2217 |
| 2202 EXPECT_EQ(OK, callback2.WaitForResult()); | 2218 EXPECT_EQ(OK, callback2.WaitForResult()); |
| 2203 EXPECT_EQ("foopy:80", info2.proxy_server().ToURI()); | 2219 EXPECT_EQ("foopy:80", info2.proxy_server().ToURI()); |
| 2204 } | 2220 } |
| 2205 | 2221 |
| 2206 // Test that the bypass rules are NOT applied when using autodetect. | 2222 // Test that the bypass rules are NOT applied when using autodetect. |
| 2207 TEST_F(ProxyServiceTest, BypassDoesntApplyToPac) { | 2223 TEST_F(ProxyServiceTest, BypassDoesntApplyToPac) { |
| 2208 ProxyConfig config; | 2224 ProxyConfig config; |
| 2209 config.set_auto_detect(true); | 2225 config.set_auto_detect(true); |
| 2210 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 2226 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
| 2211 config.proxy_rules().ParseFromString("http=foopy:80"); // Not used. | 2227 config.proxy_rules().ParseFromString("http=foopy:80"); // Not used. |
| 2212 config.proxy_rules().bypass_rules.ParseFromString("www.google.com"); | 2228 config.proxy_rules().bypass_rules.ParseFromString("www.google.com"); |
| 2213 | 2229 |
| 2214 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 2230 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 2215 MockAsyncProxyResolverExpectsBytes resolver; | 2231 MockAsyncProxyResolverExpectsBytes resolver; |
| 2232 MockAsyncProxyResolverFactory factory(true); | |
| 2216 ProxyService service( | 2233 ProxyService service( |
| 2217 config_service, | 2234 config_service, |
| 2218 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 2235 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 2219 | 2236 |
| 2220 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2237 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2221 service.SetProxyScriptFetchers(fetcher, | 2238 service.SetProxyScriptFetchers(fetcher, |
| 2222 new DoNothingDhcpProxyScriptFetcher()); | 2239 new DoNothingDhcpProxyScriptFetcher()); |
| 2223 | 2240 |
| 2224 // Start 1 requests. | 2241 // Start 1 requests. |
| 2225 | 2242 |
| 2226 ProxyInfo info1; | 2243 ProxyInfo info1; |
| 2227 TestCompletionCallback callback1; | 2244 TestCompletionCallback callback1; |
| 2228 int rv = service.ResolveProxy( | 2245 int rv = service.ResolveProxy( |
| 2229 GURL("http://www.google.com"), net::LOAD_NORMAL, &info1, | 2246 GURL("http://www.google.com"), net::LOAD_NORMAL, &info1, |
| 2230 callback1.callback(), NULL, NULL, BoundNetLog()); | 2247 callback1.callback(), NULL, NULL, BoundNetLog()); |
| 2231 EXPECT_EQ(ERR_IO_PENDING, rv); | 2248 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2232 | 2249 |
| 2233 // Check that nothing has been sent to the proxy resolver yet. | 2250 // Check that nothing has been sent to the proxy resolver factory yet. |
| 2234 ASSERT_EQ(0u, resolver.pending_requests().size()); | 2251 ASSERT_EQ(0u, factory.pending_requests().size()); |
| 2235 | 2252 |
| 2236 // It should be trying to auto-detect first -- succeed the download. | 2253 // It should be trying to auto-detect first -- succeed the download. |
| 2237 EXPECT_TRUE(fetcher->has_pending_request()); | 2254 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2238 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); | 2255 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
| 2239 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); | 2256 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); |
| 2240 | 2257 |
| 2241 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), | 2258 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), |
| 2242 resolver.pending_set_pac_script_request()->script_data()->utf16()); | 2259 factory.pending_requests()[0]->script_data()->utf16()); |
| 2243 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 2260 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 2244 | 2261 |
| 2245 ASSERT_EQ(1u, resolver.pending_requests().size()); | 2262 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 2246 EXPECT_EQ(GURL("http://www.google.com"), | 2263 EXPECT_EQ(GURL("http://www.google.com"), |
| 2247 resolver.pending_requests()[0]->url()); | 2264 resolver.pending_requests()[0]->url()); |
| 2248 | 2265 |
| 2249 // Complete the pending request. | 2266 // Complete the pending request. |
| 2250 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); | 2267 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); |
| 2251 resolver.pending_requests()[0]->CompleteNow(OK); | 2268 resolver.pending_requests()[0]->CompleteNow(OK); |
| 2252 | 2269 |
| 2253 // Verify that request ran as expected. | 2270 // Verify that request ran as expected. |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 2276 | 2293 |
| 2277 // Delete the ProxyService while InitProxyResolver has an outstanding | 2294 // Delete the ProxyService while InitProxyResolver has an outstanding |
| 2278 // request to the script fetcher. When run under valgrind, should not | 2295 // request to the script fetcher. When run under valgrind, should not |
| 2279 // have any memory errors (used to be that the ProxyScriptFetcher was | 2296 // have any memory errors (used to be that the ProxyScriptFetcher was |
| 2280 // being deleted prior to the InitProxyResolver). | 2297 // being deleted prior to the InitProxyResolver). |
| 2281 TEST_F(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingFetch) { | 2298 TEST_F(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingFetch) { |
| 2282 ProxyConfig config = | 2299 ProxyConfig config = |
| 2283 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); | 2300 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); |
| 2284 | 2301 |
| 2285 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 2302 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 2286 MockAsyncProxyResolverExpectsBytes resolver; | 2303 MockAsyncProxyResolverFactory factory(true); |
| 2287 ProxyService service( | 2304 ProxyService service( |
| 2288 config_service, | 2305 config_service, |
| 2289 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 2306 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 2290 | 2307 |
| 2291 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2308 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2292 service.SetProxyScriptFetchers(fetcher, | 2309 service.SetProxyScriptFetchers(fetcher, |
| 2293 new DoNothingDhcpProxyScriptFetcher()); | 2310 new DoNothingDhcpProxyScriptFetcher()); |
| 2294 | 2311 |
| 2295 // Start 1 request. | 2312 // Start 1 request. |
| 2296 | 2313 |
| 2297 ProxyInfo info1; | 2314 ProxyInfo info1; |
| 2298 TestCompletionCallback callback1; | 2315 TestCompletionCallback callback1; |
| 2299 int rv = service.ResolveProxy(GURL("http://www.google.com"), net::LOAD_NORMAL, | 2316 int rv = service.ResolveProxy(GURL("http://www.google.com"), net::LOAD_NORMAL, |
| 2300 &info1, callback1.callback(), NULL, NULL, | 2317 &info1, callback1.callback(), NULL, NULL, |
| 2301 BoundNetLog()); | 2318 BoundNetLog()); |
| 2302 EXPECT_EQ(ERR_IO_PENDING, rv); | 2319 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2303 | 2320 |
| 2304 // Check that nothing has been sent to the proxy resolver yet. | 2321 // Check that nothing has been sent to the proxy resolver factory yet. |
| 2305 ASSERT_EQ(0u, resolver.pending_requests().size()); | 2322 ASSERT_EQ(0u, factory.pending_requests().size()); |
| 2306 | 2323 |
| 2307 // InitProxyResolver should have issued a request to the ProxyScriptFetcher | 2324 // InitProxyResolver should have issued a request to the ProxyScriptFetcher |
| 2308 // and be waiting on that to complete. | 2325 // and be waiting on that to complete. |
| 2309 EXPECT_TRUE(fetcher->has_pending_request()); | 2326 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2310 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2327 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2311 } | 2328 } |
| 2312 | 2329 |
| 2313 // Delete the ProxyService while InitProxyResolver has an outstanding | 2330 // Delete the ProxyService while InitProxyResolver has an outstanding |
| 2314 // request to the proxy resolver. When run under valgrind, should not | 2331 // request to the proxy resolver. When run under valgrind, should not |
| 2315 // have any memory errors (used to be that the ProxyResolver was | 2332 // have any memory errors (used to be that the ProxyResolver was |
| 2316 // being deleted prior to the InitProxyResolver). | 2333 // being deleted prior to the InitProxyResolver). |
| 2317 TEST_F(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingSet) { | 2334 TEST_F(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingSet) { |
| 2318 MockProxyConfigService* config_service = | 2335 MockProxyConfigService* config_service = |
| 2319 new MockProxyConfigService("http://foopy/proxy.pac"); | 2336 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 2320 | 2337 |
| 2321 MockAsyncProxyResolver resolver; | 2338 MockAsyncProxyResolverFactory factory(false); |
| 2322 | 2339 |
| 2323 ProxyService service( | 2340 ProxyService service( |
| 2324 config_service, | 2341 config_service, |
| 2325 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 2342 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 2326 | 2343 |
| 2327 GURL url("http://www.google.com/"); | 2344 GURL url("http://www.google.com/"); |
| 2328 | 2345 |
| 2329 ProxyInfo info; | 2346 ProxyInfo info; |
| 2330 TestCompletionCallback callback; | 2347 TestCompletionCallback callback; |
| 2331 int rv = service.ResolveProxy( | 2348 int rv = service.ResolveProxy( |
| 2332 url, net::LOAD_NORMAL, &info, callback.callback(), NULL, NULL, | 2349 url, net::LOAD_NORMAL, &info, callback.callback(), NULL, NULL, |
| 2333 BoundNetLog()); | 2350 BoundNetLog()); |
| 2334 EXPECT_EQ(ERR_IO_PENDING, rv); | 2351 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2335 | 2352 |
| 2336 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 2353 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 2337 resolver.pending_set_pac_script_request()->script_data()->url()); | 2354 factory.pending_requests()[0]->script_data()->url()); |
| 2338 } | 2355 } |
| 2339 | 2356 |
| 2340 TEST_F(ProxyServiceTest, ResetProxyConfigService) { | 2357 TEST_F(ProxyServiceTest, ResetProxyConfigService) { |
| 2341 ProxyConfig config1; | 2358 ProxyConfig config1; |
| 2342 config1.proxy_rules().ParseFromString("foopy1:8080"); | 2359 config1.proxy_rules().ParseFromString("foopy1:8080"); |
| 2343 config1.set_auto_detect(false); | 2360 config1.set_auto_detect(false); |
| 2344 ProxyService service(new MockProxyConfigService(config1), nullptr, NULL); | 2361 ProxyService service(new MockProxyConfigService(config1), nullptr, NULL); |
| 2345 | 2362 |
| 2346 ProxyInfo info; | 2363 ProxyInfo info; |
| 2347 TestCompletionCallback callback1; | 2364 TestCompletionCallback callback1; |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 2362 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); | 2379 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); |
| 2363 } | 2380 } |
| 2364 | 2381 |
| 2365 // Test that when going from a configuration that required PAC to one | 2382 // Test that when going from a configuration that required PAC to one |
| 2366 // that does NOT, we unset the variable |should_use_proxy_resolver_|. | 2383 // that does NOT, we unset the variable |should_use_proxy_resolver_|. |
| 2367 TEST_F(ProxyServiceTest, UpdateConfigFromPACToDirect) { | 2384 TEST_F(ProxyServiceTest, UpdateConfigFromPACToDirect) { |
| 2368 ProxyConfig config = ProxyConfig::CreateAutoDetect(); | 2385 ProxyConfig config = ProxyConfig::CreateAutoDetect(); |
| 2369 | 2386 |
| 2370 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 2387 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 2371 MockAsyncProxyResolver resolver; | 2388 MockAsyncProxyResolver resolver; |
| 2389 MockAsyncProxyResolverFactory factory(false); | |
| 2372 ProxyService service( | 2390 ProxyService service( |
| 2373 config_service, | 2391 config_service, |
| 2374 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 2392 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 2375 | 2393 |
| 2376 // Start 1 request. | 2394 // Start 1 request. |
| 2377 | 2395 |
| 2378 ProxyInfo info1; | 2396 ProxyInfo info1; |
| 2379 TestCompletionCallback callback1; | 2397 TestCompletionCallback callback1; |
| 2380 int rv = service.ResolveProxy(GURL("http://www.google.com"), net::LOAD_NORMAL, | 2398 int rv = service.ResolveProxy(GURL("http://www.google.com"), net::LOAD_NORMAL, |
| 2381 &info1, callback1.callback(), NULL, NULL, | 2399 &info1, callback1.callback(), NULL, NULL, |
| 2382 BoundNetLog()); | 2400 BoundNetLog()); |
| 2383 EXPECT_EQ(ERR_IO_PENDING, rv); | 2401 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2384 | 2402 |
| 2385 // Check that nothing has been sent to the proxy resolver yet. | |
| 2386 ASSERT_EQ(0u, resolver.pending_requests().size()); | |
| 2387 | |
| 2388 // Successfully set the autodetect script. | 2403 // Successfully set the autodetect script. |
| 2389 EXPECT_EQ(ProxyResolverScriptData::TYPE_AUTO_DETECT, | 2404 EXPECT_EQ(ProxyResolverScriptData::TYPE_AUTO_DETECT, |
| 2390 resolver.pending_set_pac_script_request()->script_data()->type()); | 2405 factory.pending_requests()[0]->script_data()->type()); |
| 2391 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 2406 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 2392 | 2407 |
| 2393 // Complete the pending request. | 2408 // Complete the pending request. |
| 2394 ASSERT_EQ(1u, resolver.pending_requests().size()); | 2409 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 2395 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); | 2410 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); |
| 2396 resolver.pending_requests()[0]->CompleteNow(OK); | 2411 resolver.pending_requests()[0]->CompleteNow(OK); |
| 2397 | 2412 |
| 2398 // Verify that request ran as expected. | 2413 // Verify that request ran as expected. |
| 2399 EXPECT_EQ(OK, callback1.WaitForResult()); | 2414 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 2400 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); | 2415 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); |
| 2401 | 2416 |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 2415 EXPECT_EQ(OK, rv); | 2430 EXPECT_EQ(OK, rv); |
| 2416 | 2431 |
| 2417 EXPECT_TRUE(info2.is_direct()); | 2432 EXPECT_TRUE(info2.is_direct()); |
| 2418 } | 2433 } |
| 2419 | 2434 |
| 2420 TEST_F(ProxyServiceTest, NetworkChangeTriggersPacRefetch) { | 2435 TEST_F(ProxyServiceTest, NetworkChangeTriggersPacRefetch) { |
| 2421 MockProxyConfigService* config_service = | 2436 MockProxyConfigService* config_service = |
| 2422 new MockProxyConfigService("http://foopy/proxy.pac"); | 2437 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 2423 | 2438 |
| 2424 MockAsyncProxyResolverExpectsBytes resolver; | 2439 MockAsyncProxyResolverExpectsBytes resolver; |
| 2440 MockAsyncProxyResolverFactory factory(true); | |
| 2425 | 2441 |
| 2426 TestNetLog log; | 2442 TestNetLog log; |
| 2427 | 2443 |
| 2428 ProxyService service( | 2444 ProxyService service( |
| 2429 config_service, | 2445 config_service, |
| 2430 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), &log); | 2446 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), &log); |
| 2431 | 2447 |
| 2432 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2448 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2433 service.SetProxyScriptFetchers(fetcher, | 2449 service.SetProxyScriptFetchers(fetcher, |
| 2434 new DoNothingDhcpProxyScriptFetcher()); | 2450 new DoNothingDhcpProxyScriptFetcher()); |
| 2435 | 2451 |
| 2436 // Disable the "wait after IP address changes" hack, so this unit-test can | 2452 // Disable the "wait after IP address changes" hack, so this unit-test can |
| 2437 // complete quickly. | 2453 // complete quickly. |
| 2438 service.set_stall_proxy_auto_config_delay(base::TimeDelta()); | 2454 service.set_stall_proxy_auto_config_delay(base::TimeDelta()); |
| 2439 | 2455 |
| 2440 // Start 1 request. | 2456 // Start 1 request. |
| 2441 | 2457 |
| 2442 ProxyInfo info1; | 2458 ProxyInfo info1; |
| 2443 TestCompletionCallback callback1; | 2459 TestCompletionCallback callback1; |
| 2444 int rv = service.ResolveProxy(GURL("http://request1"), net::LOAD_NORMAL, | 2460 int rv = service.ResolveProxy(GURL("http://request1"), net::LOAD_NORMAL, |
| 2445 &info1, callback1.callback(), NULL, NULL, | 2461 &info1, callback1.callback(), NULL, NULL, |
| 2446 BoundNetLog()); | 2462 BoundNetLog()); |
| 2447 EXPECT_EQ(ERR_IO_PENDING, rv); | 2463 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2448 | 2464 |
| 2449 // The first request should have triggered initial download of PAC script. | 2465 // The first request should have triggered initial download of PAC script. |
| 2450 EXPECT_TRUE(fetcher->has_pending_request()); | 2466 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2451 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2467 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2452 | 2468 |
| 2453 // Nothing has been sent to the resolver yet. | 2469 // Nothing has been sent to the factory yet. |
| 2454 EXPECT_TRUE(resolver.pending_requests().empty()); | 2470 EXPECT_TRUE(factory.pending_requests().empty()); |
| 2455 | 2471 |
| 2456 // At this point the ProxyService should be waiting for the | 2472 // At this point the ProxyService should be waiting for the |
| 2457 // ProxyScriptFetcher to invoke its completion callback, notifying it of | 2473 // ProxyScriptFetcher to invoke its completion callback, notifying it of |
| 2458 // PAC script download completion. | 2474 // PAC script download completion. |
| 2459 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); | 2475 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); |
| 2460 | 2476 |
| 2461 // Now that the PAC script is downloaded, the request will have been sent to | 2477 // Now that the PAC script is downloaded, the request will have been sent to |
| 2462 // the proxy resolver. | 2478 // the proxy resolver. |
| 2463 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), | 2479 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), |
| 2464 resolver.pending_set_pac_script_request()->script_data()->utf16()); | 2480 factory.pending_requests()[0]->script_data()->utf16()); |
| 2465 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 2481 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 2466 | 2482 |
| 2467 ASSERT_EQ(1u, resolver.pending_requests().size()); | 2483 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 2468 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); | 2484 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); |
| 2469 | 2485 |
| 2470 // Complete the pending request. | 2486 // Complete the pending request. |
| 2471 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); | 2487 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); |
| 2472 resolver.pending_requests()[0]->CompleteNow(OK); | 2488 resolver.pending_requests()[0]->CompleteNow(OK); |
| 2473 | 2489 |
| 2474 // Wait for completion callback, and verify that the request ran as expected. | 2490 // Wait for completion callback, and verify that the request ran as expected. |
| 2475 EXPECT_EQ(OK, callback1.WaitForResult()); | 2491 EXPECT_EQ(OK, callback1.WaitForResult()); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 2486 TestCompletionCallback callback2; | 2502 TestCompletionCallback callback2; |
| 2487 rv = service.ResolveProxy(GURL("http://request2"), net::LOAD_NORMAL, &info2, | 2503 rv = service.ResolveProxy(GURL("http://request2"), net::LOAD_NORMAL, &info2, |
| 2488 callback2.callback(), NULL, NULL, BoundNetLog()); | 2504 callback2.callback(), NULL, NULL, BoundNetLog()); |
| 2489 EXPECT_EQ(ERR_IO_PENDING, rv); | 2505 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2490 | 2506 |
| 2491 // This second request should have triggered the re-download of the PAC | 2507 // This second request should have triggered the re-download of the PAC |
| 2492 // script (since we marked the network as having changed). | 2508 // script (since we marked the network as having changed). |
| 2493 EXPECT_TRUE(fetcher->has_pending_request()); | 2509 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2494 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2510 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2495 | 2511 |
| 2496 // Nothing has been sent to the resolver yet. | 2512 // Nothing has been sent to the factory yet. |
| 2497 EXPECT_TRUE(resolver.pending_requests().empty()); | 2513 EXPECT_TRUE(factory.pending_requests().empty()); |
| 2498 | 2514 |
| 2499 // Simulate the PAC script fetch as having completed (this time with | 2515 // Simulate the PAC script fetch as having completed (this time with |
| 2500 // different data). | 2516 // different data). |
| 2501 fetcher->NotifyFetchCompletion(OK, kValidPacScript2); | 2517 fetcher->NotifyFetchCompletion(OK, kValidPacScript2); |
| 2502 | 2518 |
| 2503 // Now that the PAC script is downloaded, the second request will have been | 2519 // Now that the PAC script is downloaded, the second request will have been |
| 2504 // sent to the proxy resolver. | 2520 // sent to the proxy resolver. |
| 2505 EXPECT_EQ(ASCIIToUTF16(kValidPacScript2), | 2521 EXPECT_EQ(ASCIIToUTF16(kValidPacScript2), |
| 2506 resolver.pending_set_pac_script_request()->script_data()->utf16()); | 2522 factory.pending_requests()[0]->script_data()->utf16()); |
| 2507 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 2523 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 2508 | 2524 |
| 2509 ASSERT_EQ(1u, resolver.pending_requests().size()); | 2525 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 2510 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); | 2526 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); |
| 2511 | 2527 |
| 2512 // Complete the pending second request. | 2528 // Complete the pending second request. |
| 2513 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); | 2529 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); |
| 2514 resolver.pending_requests()[0]->CompleteNow(OK); | 2530 resolver.pending_requests()[0]->CompleteNow(OK); |
| 2515 | 2531 |
| 2516 // Wait for completion callback, and verify that the request ran as expected. | 2532 // Wait for completion callback, and verify that the request ran as expected. |
| 2517 EXPECT_EQ(OK, callback2.WaitForResult()); | 2533 EXPECT_EQ(OK, callback2.WaitForResult()); |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 2537 TEST_F(ProxyServiceTest, PACScriptRefetchAfterFailure) { | 2553 TEST_F(ProxyServiceTest, PACScriptRefetchAfterFailure) { |
| 2538 // Change the retry policy to wait a mere 1 ms before retrying, so the test | 2554 // Change the retry policy to wait a mere 1 ms before retrying, so the test |
| 2539 // runs quickly. | 2555 // runs quickly. |
| 2540 ImmediatePollPolicy poll_policy; | 2556 ImmediatePollPolicy poll_policy; |
| 2541 ProxyService::set_pac_script_poll_policy(&poll_policy); | 2557 ProxyService::set_pac_script_poll_policy(&poll_policy); |
| 2542 | 2558 |
| 2543 MockProxyConfigService* config_service = | 2559 MockProxyConfigService* config_service = |
| 2544 new MockProxyConfigService("http://foopy/proxy.pac"); | 2560 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 2545 | 2561 |
| 2546 MockAsyncProxyResolverExpectsBytes resolver; | 2562 MockAsyncProxyResolverExpectsBytes resolver; |
| 2563 MockAsyncProxyResolverFactory factory(true); | |
| 2547 | 2564 |
| 2548 ProxyService service( | 2565 ProxyService service( |
| 2549 config_service, | 2566 config_service, |
| 2550 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 2567 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 2551 | 2568 |
| 2552 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2569 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2553 service.SetProxyScriptFetchers(fetcher, | 2570 service.SetProxyScriptFetchers(fetcher, |
| 2554 new DoNothingDhcpProxyScriptFetcher()); | 2571 new DoNothingDhcpProxyScriptFetcher()); |
| 2555 | 2572 |
| 2556 // Start 1 request. | 2573 // Start 1 request. |
| 2557 | 2574 |
| 2558 ProxyInfo info1; | 2575 ProxyInfo info1; |
| 2559 TestCompletionCallback callback1; | 2576 TestCompletionCallback callback1; |
| 2560 int rv = service.ResolveProxy( | 2577 int rv = service.ResolveProxy( |
| 2561 GURL("http://request1"), net::LOAD_NORMAL, &info1, callback1.callback(), | 2578 GURL("http://request1"), net::LOAD_NORMAL, &info1, callback1.callback(), |
| 2562 NULL, NULL, BoundNetLog()); | 2579 NULL, NULL, BoundNetLog()); |
| 2563 EXPECT_EQ(ERR_IO_PENDING, rv); | 2580 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2564 | 2581 |
| 2565 // The first request should have triggered initial download of PAC script. | 2582 // The first request should have triggered initial download of PAC script. |
| 2566 EXPECT_TRUE(fetcher->has_pending_request()); | 2583 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2567 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2584 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2568 | 2585 |
| 2569 // Nothing has been sent to the resolver yet. | 2586 // Nothing has been sent to the factory yet. |
| 2570 EXPECT_TRUE(resolver.pending_requests().empty()); | 2587 EXPECT_TRUE(factory.pending_requests().empty()); |
| 2571 | 2588 |
| 2572 // At this point the ProxyService should be waiting for the | 2589 // At this point the ProxyService should be waiting for the |
| 2573 // ProxyScriptFetcher to invoke its completion callback, notifying it of | 2590 // ProxyScriptFetcher to invoke its completion callback, notifying it of |
| 2574 // PAC script download completion. | 2591 // PAC script download completion. |
| 2575 // | 2592 // |
| 2576 // We simulate a failed download attempt, the proxy service should now | 2593 // We simulate a failed download attempt, the proxy service should now |
| 2577 // fall-back to DIRECT connections. | 2594 // fall-back to DIRECT connections. |
| 2578 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); | 2595 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); |
| 2579 | 2596 |
| 2580 ASSERT_TRUE(resolver.pending_requests().empty()); | 2597 ASSERT_TRUE(factory.pending_requests().empty()); |
| 2581 | 2598 |
| 2582 // Wait for completion callback, and verify it used DIRECT. | 2599 // Wait for completion callback, and verify it used DIRECT. |
| 2583 EXPECT_EQ(OK, callback1.WaitForResult()); | 2600 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 2584 EXPECT_TRUE(info1.is_direct()); | 2601 EXPECT_TRUE(info1.is_direct()); |
| 2585 | 2602 |
| 2586 // At this point we have initialized the proxy service using a PAC script, | 2603 // At this point we have initialized the proxy service using a PAC script, |
| 2587 // however it failed and fell-back to DIRECT. | 2604 // however it failed and fell-back to DIRECT. |
| 2588 // | 2605 // |
| 2589 // A background task to periodically re-check the PAC script for validity will | 2606 // A background task to periodically re-check the PAC script for validity will |
| 2590 // have been started. We will now wait for the next download attempt to start. | 2607 // have been started. We will now wait for the next download attempt to start. |
| 2591 // | 2608 // |
| 2592 // Note that we shouldn't have to wait long here, since our test enables a | 2609 // Note that we shouldn't have to wait long here, since our test enables a |
| 2593 // special unit-test mode. | 2610 // special unit-test mode. |
| 2594 fetcher->WaitUntilFetch(); | 2611 fetcher->WaitUntilFetch(); |
| 2595 | 2612 |
| 2596 ASSERT_TRUE(resolver.pending_requests().empty()); | 2613 ASSERT_TRUE(factory.pending_requests().empty()); |
| 2597 | 2614 |
| 2598 // Make sure that our background checker is trying to download the expected | 2615 // Make sure that our background checker is trying to download the expected |
| 2599 // PAC script (same one as before). This time we will simulate a successful | 2616 // PAC script (same one as before). This time we will simulate a successful |
| 2600 // download of the script. | 2617 // download of the script. |
| 2601 EXPECT_TRUE(fetcher->has_pending_request()); | 2618 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2602 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2619 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2603 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); | 2620 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); |
| 2604 | 2621 |
| 2605 base::MessageLoop::current()->RunUntilIdle(); | 2622 base::MessageLoop::current()->RunUntilIdle(); |
| 2606 | 2623 |
| 2607 // Now that the PAC script is downloaded, it should be used to initialize the | 2624 // Now that the PAC script is downloaded, it should be used to initialize the |
| 2608 // ProxyResolver. Simulate a successful parse. | 2625 // ProxyResolver. Simulate a successful parse. |
| 2609 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), | 2626 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), |
| 2610 resolver.pending_set_pac_script_request()->script_data()->utf16()); | 2627 factory.pending_requests()[0]->script_data()->utf16()); |
| 2611 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 2628 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 2612 | 2629 |
| 2613 // At this point the ProxyService should have re-configured itself to use the | 2630 // At this point the ProxyService should have re-configured itself to use the |
| 2614 // PAC script (thereby recovering from the initial fetch failure). We will | 2631 // PAC script (thereby recovering from the initial fetch failure). We will |
| 2615 // verify that the next Resolve request uses the resolver rather than | 2632 // verify that the next Resolve request uses the resolver rather than |
| 2616 // DIRECT. | 2633 // DIRECT. |
| 2617 | 2634 |
| 2618 // Start a second request. | 2635 // Start a second request. |
| 2619 ProxyInfo info2; | 2636 ProxyInfo info2; |
| 2620 TestCompletionCallback callback2; | 2637 TestCompletionCallback callback2; |
| 2621 rv = service.ResolveProxy( | 2638 rv = service.ResolveProxy( |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 2643 TEST_F(ProxyServiceTest, PACScriptRefetchAfterContentChange) { | 2660 TEST_F(ProxyServiceTest, PACScriptRefetchAfterContentChange) { |
| 2644 // Change the retry policy to wait a mere 1 ms before retrying, so the test | 2661 // Change the retry policy to wait a mere 1 ms before retrying, so the test |
| 2645 // runs quickly. | 2662 // runs quickly. |
| 2646 ImmediatePollPolicy poll_policy; | 2663 ImmediatePollPolicy poll_policy; |
| 2647 ProxyService::set_pac_script_poll_policy(&poll_policy); | 2664 ProxyService::set_pac_script_poll_policy(&poll_policy); |
| 2648 | 2665 |
| 2649 MockProxyConfigService* config_service = | 2666 MockProxyConfigService* config_service = |
| 2650 new MockProxyConfigService("http://foopy/proxy.pac"); | 2667 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 2651 | 2668 |
| 2652 MockAsyncProxyResolverExpectsBytes resolver; | 2669 MockAsyncProxyResolverExpectsBytes resolver; |
| 2670 MockAsyncProxyResolverFactory factory(true); | |
| 2653 | 2671 |
| 2654 ProxyService service( | 2672 ProxyService service( |
| 2655 config_service, | 2673 config_service, |
| 2656 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 2674 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 2657 | 2675 |
| 2658 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2676 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2659 service.SetProxyScriptFetchers(fetcher, | 2677 service.SetProxyScriptFetchers(fetcher, |
| 2660 new DoNothingDhcpProxyScriptFetcher()); | 2678 new DoNothingDhcpProxyScriptFetcher()); |
| 2661 | 2679 |
| 2662 // Start 1 request. | 2680 // Start 1 request. |
| 2663 | 2681 |
| 2664 ProxyInfo info1; | 2682 ProxyInfo info1; |
| 2665 TestCompletionCallback callback1; | 2683 TestCompletionCallback callback1; |
| 2666 int rv = service.ResolveProxy( | 2684 int rv = service.ResolveProxy( |
| 2667 GURL("http://request1"), net::LOAD_NORMAL, &info1, callback1.callback(), | 2685 GURL("http://request1"), net::LOAD_NORMAL, &info1, callback1.callback(), |
| 2668 NULL, NULL, BoundNetLog()); | 2686 NULL, NULL, BoundNetLog()); |
| 2669 EXPECT_EQ(ERR_IO_PENDING, rv); | 2687 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2670 | 2688 |
| 2671 // The first request should have triggered initial download of PAC script. | 2689 // The first request should have triggered initial download of PAC script. |
| 2672 EXPECT_TRUE(fetcher->has_pending_request()); | 2690 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2673 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2691 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2674 | 2692 |
| 2675 // Nothing has been sent to the resolver yet. | 2693 // Nothing has been sent to the factory yet. |
| 2676 EXPECT_TRUE(resolver.pending_requests().empty()); | 2694 EXPECT_TRUE(factory.pending_requests().empty()); |
| 2677 | 2695 |
| 2678 // At this point the ProxyService should be waiting for the | 2696 // At this point the ProxyService should be waiting for the |
| 2679 // ProxyScriptFetcher to invoke its completion callback, notifying it of | 2697 // ProxyScriptFetcher to invoke its completion callback, notifying it of |
| 2680 // PAC script download completion. | 2698 // PAC script download completion. |
| 2681 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); | 2699 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); |
| 2682 | 2700 |
| 2683 // Now that the PAC script is downloaded, the request will have been sent to | 2701 // Now that the PAC script is downloaded, the request will have been sent to |
| 2684 // the proxy resolver. | 2702 // the proxy resolver. |
| 2685 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), | 2703 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), |
| 2686 resolver.pending_set_pac_script_request()->script_data()->utf16()); | 2704 factory.pending_requests()[0]->script_data()->utf16()); |
| 2687 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 2705 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 2688 | 2706 |
| 2689 ASSERT_EQ(1u, resolver.pending_requests().size()); | 2707 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 2690 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); | 2708 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); |
| 2691 | 2709 |
| 2692 // Complete the pending request. | 2710 // Complete the pending request. |
| 2693 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); | 2711 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); |
| 2694 resolver.pending_requests()[0]->CompleteNow(OK); | 2712 resolver.pending_requests()[0]->CompleteNow(OK); |
| 2695 | 2713 |
| 2696 // Wait for completion callback, and verify that the request ran as expected. | 2714 // Wait for completion callback, and verify that the request ran as expected. |
| 2697 EXPECT_EQ(OK, callback1.WaitForResult()); | 2715 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 2698 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); | 2716 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); |
| 2699 | 2717 |
| 2700 // At this point we have initialized the proxy service using a PAC script. | 2718 // At this point we have initialized the proxy service using a PAC script. |
| 2701 // | 2719 // |
| 2702 // A background task to periodically re-check the PAC script for validity will | 2720 // A background task to periodically re-check the PAC script for validity will |
| 2703 // have been started. We will now wait for the next download attempt to start. | 2721 // have been started. We will now wait for the next download attempt to start. |
| 2704 // | 2722 // |
| 2705 // Note that we shouldn't have to wait long here, since our test enables a | 2723 // Note that we shouldn't have to wait long here, since our test enables a |
| 2706 // special unit-test mode. | 2724 // special unit-test mode. |
| 2707 fetcher->WaitUntilFetch(); | 2725 fetcher->WaitUntilFetch(); |
| 2708 | 2726 |
| 2727 ASSERT_TRUE(factory.pending_requests().empty()); | |
| 2709 ASSERT_TRUE(resolver.pending_requests().empty()); | 2728 ASSERT_TRUE(resolver.pending_requests().empty()); |
| 2710 | 2729 |
| 2711 // Make sure that our background checker is trying to download the expected | 2730 // Make sure that our background checker is trying to download the expected |
| 2712 // PAC script (same one as before). This time we will simulate a successful | 2731 // PAC script (same one as before). This time we will simulate a successful |
| 2713 // download of a DIFFERENT script. | 2732 // download of a DIFFERENT script. |
| 2714 EXPECT_TRUE(fetcher->has_pending_request()); | 2733 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2715 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2734 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2716 fetcher->NotifyFetchCompletion(OK, kValidPacScript2); | 2735 fetcher->NotifyFetchCompletion(OK, kValidPacScript2); |
| 2717 | 2736 |
| 2718 base::MessageLoop::current()->RunUntilIdle(); | 2737 base::MessageLoop::current()->RunUntilIdle(); |
| 2719 | 2738 |
| 2720 // Now that the PAC script is downloaded, it should be used to initialize the | 2739 // Now that the PAC script is downloaded, it should be used to initialize the |
| 2721 // ProxyResolver. Simulate a successful parse. | 2740 // ProxyResolver. Simulate a successful parse. |
| 2722 EXPECT_EQ(ASCIIToUTF16(kValidPacScript2), | 2741 EXPECT_EQ(ASCIIToUTF16(kValidPacScript2), |
| 2723 resolver.pending_set_pac_script_request()->script_data()->utf16()); | 2742 factory.pending_requests()[0]->script_data()->utf16()); |
| 2724 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 2743 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 2725 | 2744 |
| 2726 // At this point the ProxyService should have re-configured itself to use the | 2745 // At this point the ProxyService should have re-configured itself to use the |
| 2727 // new PAC script. | 2746 // new PAC script. |
| 2728 | 2747 |
| 2729 // Start a second request. | 2748 // Start a second request. |
| 2730 ProxyInfo info2; | 2749 ProxyInfo info2; |
| 2731 TestCompletionCallback callback2; | 2750 TestCompletionCallback callback2; |
| 2732 rv = service.ResolveProxy( | 2751 rv = service.ResolveProxy( |
| 2733 GURL("http://request2"), net::LOAD_NORMAL, &info2, callback2.callback(), | 2752 GURL("http://request2"), net::LOAD_NORMAL, &info2, callback2.callback(), |
| 2734 NULL, NULL, BoundNetLog()); | 2753 NULL, NULL, BoundNetLog()); |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 2754 TEST_F(ProxyServiceTest, PACScriptRefetchAfterContentUnchanged) { | 2773 TEST_F(ProxyServiceTest, PACScriptRefetchAfterContentUnchanged) { |
| 2755 // Change the retry policy to wait a mere 1 ms before retrying, so the test | 2774 // Change the retry policy to wait a mere 1 ms before retrying, so the test |
| 2756 // runs quickly. | 2775 // runs quickly. |
| 2757 ImmediatePollPolicy poll_policy; | 2776 ImmediatePollPolicy poll_policy; |
| 2758 ProxyService::set_pac_script_poll_policy(&poll_policy); | 2777 ProxyService::set_pac_script_poll_policy(&poll_policy); |
| 2759 | 2778 |
| 2760 MockProxyConfigService* config_service = | 2779 MockProxyConfigService* config_service = |
| 2761 new MockProxyConfigService("http://foopy/proxy.pac"); | 2780 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 2762 | 2781 |
| 2763 MockAsyncProxyResolverExpectsBytes resolver; | 2782 MockAsyncProxyResolverExpectsBytes resolver; |
| 2783 MockAsyncProxyResolverFactory factory(true); | |
| 2764 | 2784 |
| 2765 ProxyService service( | 2785 ProxyService service( |
| 2766 config_service, | 2786 config_service, |
| 2767 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 2787 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 2768 | 2788 |
| 2769 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2789 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2770 service.SetProxyScriptFetchers(fetcher, | 2790 service.SetProxyScriptFetchers(fetcher, |
| 2771 new DoNothingDhcpProxyScriptFetcher()); | 2791 new DoNothingDhcpProxyScriptFetcher()); |
| 2772 | 2792 |
| 2773 // Start 1 request. | 2793 // Start 1 request. |
| 2774 | 2794 |
| 2775 ProxyInfo info1; | 2795 ProxyInfo info1; |
| 2776 TestCompletionCallback callback1; | 2796 TestCompletionCallback callback1; |
| 2777 int rv = service.ResolveProxy( | 2797 int rv = service.ResolveProxy( |
| 2778 GURL("http://request1"), net::LOAD_NORMAL, &info1, callback1.callback(), | 2798 GURL("http://request1"), net::LOAD_NORMAL, &info1, callback1.callback(), |
| 2779 NULL, NULL, BoundNetLog()); | 2799 NULL, NULL, BoundNetLog()); |
| 2780 EXPECT_EQ(ERR_IO_PENDING, rv); | 2800 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2781 | 2801 |
| 2782 // The first request should have triggered initial download of PAC script. | 2802 // The first request should have triggered initial download of PAC script. |
| 2783 EXPECT_TRUE(fetcher->has_pending_request()); | 2803 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2784 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2804 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2785 | 2805 |
| 2786 // Nothing has been sent to the resolver yet. | 2806 // Nothing has been sent to the factory yet. |
| 2787 EXPECT_TRUE(resolver.pending_requests().empty()); | 2807 EXPECT_TRUE(factory.pending_requests().empty()); |
| 2788 | 2808 |
| 2789 // At this point the ProxyService should be waiting for the | 2809 // At this point the ProxyService should be waiting for the |
| 2790 // ProxyScriptFetcher to invoke its completion callback, notifying it of | 2810 // ProxyScriptFetcher to invoke its completion callback, notifying it of |
| 2791 // PAC script download completion. | 2811 // PAC script download completion. |
| 2792 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); | 2812 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); |
| 2793 | 2813 |
| 2794 // Now that the PAC script is downloaded, the request will have been sent to | 2814 // Now that the PAC script is downloaded, the request will have been sent to |
| 2795 // the proxy resolver. | 2815 // the proxy resolver. |
| 2796 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), | 2816 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), |
| 2797 resolver.pending_set_pac_script_request()->script_data()->utf16()); | 2817 factory.pending_requests()[0]->script_data()->utf16()); |
| 2798 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 2818 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 2799 | 2819 |
| 2800 ASSERT_EQ(1u, resolver.pending_requests().size()); | 2820 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 2801 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); | 2821 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); |
| 2802 | 2822 |
| 2803 // Complete the pending request. | 2823 // Complete the pending request. |
| 2804 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); | 2824 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); |
| 2805 resolver.pending_requests()[0]->CompleteNow(OK); | 2825 resolver.pending_requests()[0]->CompleteNow(OK); |
| 2806 | 2826 |
| 2807 // Wait for completion callback, and verify that the request ran as expected. | 2827 // Wait for completion callback, and verify that the request ran as expected. |
| 2808 EXPECT_EQ(OK, callback1.WaitForResult()); | 2828 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 2809 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); | 2829 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); |
| 2810 | 2830 |
| 2811 // At this point we have initialized the proxy service using a PAC script. | 2831 // At this point we have initialized the proxy service using a PAC script. |
| 2812 // | 2832 // |
| 2813 // A background task to periodically re-check the PAC script for validity will | 2833 // A background task to periodically re-check the PAC script for validity will |
| 2814 // have been started. We will now wait for the next download attempt to start. | 2834 // have been started. We will now wait for the next download attempt to start. |
| 2815 // | 2835 // |
| 2816 // Note that we shouldn't have to wait long here, since our test enables a | 2836 // Note that we shouldn't have to wait long here, since our test enables a |
| 2817 // special unit-test mode. | 2837 // special unit-test mode. |
| 2818 fetcher->WaitUntilFetch(); | 2838 fetcher->WaitUntilFetch(); |
| 2819 | 2839 |
| 2840 ASSERT_TRUE(factory.pending_requests().empty()); | |
| 2820 ASSERT_TRUE(resolver.pending_requests().empty()); | 2841 ASSERT_TRUE(resolver.pending_requests().empty()); |
| 2821 | 2842 |
| 2822 // Make sure that our background checker is trying to download the expected | 2843 // Make sure that our background checker is trying to download the expected |
| 2823 // PAC script (same one as before). We will simulate the same response as | 2844 // PAC script (same one as before). We will simulate the same response as |
| 2824 // last time (i.e. the script is unchanged). | 2845 // last time (i.e. the script is unchanged). |
| 2825 EXPECT_TRUE(fetcher->has_pending_request()); | 2846 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2826 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2847 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2827 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); | 2848 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); |
| 2828 | 2849 |
| 2829 base::MessageLoop::current()->RunUntilIdle(); | 2850 base::MessageLoop::current()->RunUntilIdle(); |
| 2830 | 2851 |
| 2831 ASSERT_FALSE(resolver.has_pending_set_pac_script_request()); | 2852 ASSERT_TRUE(factory.pending_requests().empty()); |
| 2853 ASSERT_TRUE(resolver.pending_requests().empty()); | |
| 2832 | 2854 |
| 2833 // At this point the ProxyService is still running the same PAC script as | 2855 // At this point the ProxyService is still running the same PAC script as |
| 2834 // before. | 2856 // before. |
| 2835 | 2857 |
| 2836 // Start a second request. | 2858 // Start a second request. |
| 2837 ProxyInfo info2; | 2859 ProxyInfo info2; |
| 2838 TestCompletionCallback callback2; | 2860 TestCompletionCallback callback2; |
| 2839 rv = service.ResolveProxy( | 2861 rv = service.ResolveProxy( |
| 2840 GURL("http://request2"), net::LOAD_NORMAL, &info2, callback2.callback(), | 2862 GURL("http://request2"), net::LOAD_NORMAL, &info2, callback2.callback(), |
| 2841 NULL, NULL, BoundNetLog()); | 2863 NULL, NULL, BoundNetLog()); |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 2861 TEST_F(ProxyServiceTest, PACScriptRefetchAfterSuccess) { | 2883 TEST_F(ProxyServiceTest, PACScriptRefetchAfterSuccess) { |
| 2862 // Change the retry policy to wait a mere 1 ms before retrying, so the test | 2884 // Change the retry policy to wait a mere 1 ms before retrying, so the test |
| 2863 // runs quickly. | 2885 // runs quickly. |
| 2864 ImmediatePollPolicy poll_policy; | 2886 ImmediatePollPolicy poll_policy; |
| 2865 ProxyService::set_pac_script_poll_policy(&poll_policy); | 2887 ProxyService::set_pac_script_poll_policy(&poll_policy); |
| 2866 | 2888 |
| 2867 MockProxyConfigService* config_service = | 2889 MockProxyConfigService* config_service = |
| 2868 new MockProxyConfigService("http://foopy/proxy.pac"); | 2890 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 2869 | 2891 |
| 2870 MockAsyncProxyResolverExpectsBytes resolver; | 2892 MockAsyncProxyResolverExpectsBytes resolver; |
| 2893 MockAsyncProxyResolverFactory factory(true); | |
| 2871 | 2894 |
| 2872 ProxyService service( | 2895 ProxyService service( |
| 2873 config_service, | 2896 config_service, |
| 2874 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 2897 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 2875 | 2898 |
| 2876 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2899 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2877 service.SetProxyScriptFetchers(fetcher, | 2900 service.SetProxyScriptFetchers(fetcher, |
| 2878 new DoNothingDhcpProxyScriptFetcher()); | 2901 new DoNothingDhcpProxyScriptFetcher()); |
| 2879 | 2902 |
| 2880 // Start 1 request. | 2903 // Start 1 request. |
| 2881 | 2904 |
| 2882 ProxyInfo info1; | 2905 ProxyInfo info1; |
| 2883 TestCompletionCallback callback1; | 2906 TestCompletionCallback callback1; |
| 2884 int rv = service.ResolveProxy( | 2907 int rv = service.ResolveProxy( |
| 2885 GURL("http://request1"), net::LOAD_NORMAL, &info1, callback1.callback(), | 2908 GURL("http://request1"), net::LOAD_NORMAL, &info1, callback1.callback(), |
| 2886 NULL, NULL, BoundNetLog()); | 2909 NULL, NULL, BoundNetLog()); |
| 2887 EXPECT_EQ(ERR_IO_PENDING, rv); | 2910 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2888 | 2911 |
| 2889 // The first request should have triggered initial download of PAC script. | 2912 // The first request should have triggered initial download of PAC script. |
| 2890 EXPECT_TRUE(fetcher->has_pending_request()); | 2913 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2891 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2914 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2892 | 2915 |
| 2893 // Nothing has been sent to the resolver yet. | 2916 // Nothing has been sent to the factory yet. |
| 2894 EXPECT_TRUE(resolver.pending_requests().empty()); | 2917 EXPECT_TRUE(factory.pending_requests().empty()); |
| 2895 | 2918 |
| 2896 // At this point the ProxyService should be waiting for the | 2919 // At this point the ProxyService should be waiting for the |
| 2897 // ProxyScriptFetcher to invoke its completion callback, notifying it of | 2920 // ProxyScriptFetcher to invoke its completion callback, notifying it of |
| 2898 // PAC script download completion. | 2921 // PAC script download completion. |
| 2899 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); | 2922 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); |
| 2900 | 2923 |
| 2901 // Now that the PAC script is downloaded, the request will have been sent to | 2924 // Now that the PAC script is downloaded, the request will have been sent to |
| 2902 // the proxy resolver. | 2925 // the proxy resolver. |
| 2903 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), | 2926 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), |
| 2904 resolver.pending_set_pac_script_request()->script_data()->utf16()); | 2927 factory.pending_requests()[0]->script_data()->utf16()); |
| 2905 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 2928 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 2906 | 2929 |
| 2907 ASSERT_EQ(1u, resolver.pending_requests().size()); | 2930 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 2908 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); | 2931 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); |
| 2909 | 2932 |
| 2910 // Complete the pending request. | 2933 // Complete the pending request. |
| 2911 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); | 2934 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); |
| 2912 resolver.pending_requests()[0]->CompleteNow(OK); | 2935 resolver.pending_requests()[0]->CompleteNow(OK); |
| 2913 | 2936 |
| 2914 // Wait for completion callback, and verify that the request ran as expected. | 2937 // Wait for completion callback, and verify that the request ran as expected. |
| 2915 EXPECT_EQ(OK, callback1.WaitForResult()); | 2938 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 2916 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); | 2939 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); |
| 2917 | 2940 |
| 2918 // At this point we have initialized the proxy service using a PAC script. | 2941 // At this point we have initialized the proxy service using a PAC script. |
| 2919 // | 2942 // |
| 2920 // A background task to periodically re-check the PAC script for validity will | 2943 // A background task to periodically re-check the PAC script for validity will |
| 2921 // have been started. We will now wait for the next download attempt to start. | 2944 // have been started. We will now wait for the next download attempt to start. |
| 2922 // | 2945 // |
| 2923 // Note that we shouldn't have to wait long here, since our test enables a | 2946 // Note that we shouldn't have to wait long here, since our test enables a |
| 2924 // special unit-test mode. | 2947 // special unit-test mode. |
| 2925 fetcher->WaitUntilFetch(); | 2948 fetcher->WaitUntilFetch(); |
| 2926 | 2949 |
| 2950 ASSERT_TRUE(factory.pending_requests().empty()); | |
| 2927 ASSERT_TRUE(resolver.pending_requests().empty()); | 2951 ASSERT_TRUE(resolver.pending_requests().empty()); |
| 2928 | 2952 |
| 2929 // Make sure that our background checker is trying to download the expected | 2953 // Make sure that our background checker is trying to download the expected |
| 2930 // PAC script (same one as before). This time we will simulate a failure | 2954 // PAC script (same one as before). This time we will simulate a failure |
| 2931 // to download the script. | 2955 // to download the script. |
| 2932 EXPECT_TRUE(fetcher->has_pending_request()); | 2956 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2933 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2957 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2934 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); | 2958 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); |
| 2935 | 2959 |
| 2936 base::MessageLoop::current()->RunUntilIdle(); | 2960 base::MessageLoop::current()->RunUntilIdle(); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3014 // This tests the polling of the PAC script. Specifically, it tests that | 3038 // This tests the polling of the PAC script. Specifically, it tests that |
| 3015 // polling occurs in response to user activity. | 3039 // polling occurs in response to user activity. |
| 3016 TEST_F(ProxyServiceTest, PACScriptRefetchAfterActivity) { | 3040 TEST_F(ProxyServiceTest, PACScriptRefetchAfterActivity) { |
| 3017 ImmediateAfterActivityPollPolicy poll_policy; | 3041 ImmediateAfterActivityPollPolicy poll_policy; |
| 3018 ProxyService::set_pac_script_poll_policy(&poll_policy); | 3042 ProxyService::set_pac_script_poll_policy(&poll_policy); |
| 3019 | 3043 |
| 3020 MockProxyConfigService* config_service = | 3044 MockProxyConfigService* config_service = |
| 3021 new MockProxyConfigService("http://foopy/proxy.pac"); | 3045 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 3022 | 3046 |
| 3023 MockAsyncProxyResolverExpectsBytes resolver; | 3047 MockAsyncProxyResolverExpectsBytes resolver; |
| 3048 MockAsyncProxyResolverFactory factory(true); | |
| 3024 | 3049 |
| 3025 ProxyService service( | 3050 ProxyService service( |
| 3026 config_service, | 3051 config_service, |
| 3027 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 3052 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 3028 | 3053 |
| 3029 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 3054 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 3030 service.SetProxyScriptFetchers(fetcher, | 3055 service.SetProxyScriptFetchers(fetcher, |
| 3031 new DoNothingDhcpProxyScriptFetcher()); | 3056 new DoNothingDhcpProxyScriptFetcher()); |
| 3032 | 3057 |
| 3033 // Start 1 request. | 3058 // Start 1 request. |
| 3034 | 3059 |
| 3035 ProxyInfo info1; | 3060 ProxyInfo info1; |
| 3036 TestCompletionCallback callback1; | 3061 TestCompletionCallback callback1; |
| 3037 int rv = service.ResolveProxy( | 3062 int rv = service.ResolveProxy( |
| 3038 GURL("http://request1"), net::LOAD_NORMAL, &info1, callback1.callback(), | 3063 GURL("http://request1"), net::LOAD_NORMAL, &info1, callback1.callback(), |
| 3039 NULL, NULL, BoundNetLog()); | 3064 NULL, NULL, BoundNetLog()); |
| 3040 EXPECT_EQ(ERR_IO_PENDING, rv); | 3065 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 3041 | 3066 |
| 3042 // The first request should have triggered initial download of PAC script. | 3067 // The first request should have triggered initial download of PAC script. |
| 3043 EXPECT_TRUE(fetcher->has_pending_request()); | 3068 EXPECT_TRUE(fetcher->has_pending_request()); |
| 3044 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 3069 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 3045 | 3070 |
| 3046 // Nothing has been sent to the resolver yet. | 3071 // Nothing has been sent to the factory yet. |
| 3047 EXPECT_TRUE(resolver.pending_requests().empty()); | 3072 EXPECT_TRUE(factory.pending_requests().empty()); |
| 3048 | 3073 |
| 3049 // At this point the ProxyService should be waiting for the | 3074 // At this point the ProxyService should be waiting for the |
| 3050 // ProxyScriptFetcher to invoke its completion callback, notifying it of | 3075 // ProxyScriptFetcher to invoke its completion callback, notifying it of |
| 3051 // PAC script download completion. | 3076 // PAC script download completion. |
| 3052 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); | 3077 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); |
| 3053 | 3078 |
| 3054 // Now that the PAC script is downloaded, the request will have been sent to | 3079 // Now that the PAC script is downloaded, the request will have been sent to |
| 3055 // the proxy resolver. | 3080 // the proxy resolver. |
| 3056 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), | 3081 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), |
| 3057 resolver.pending_set_pac_script_request()->script_data()->utf16()); | 3082 factory.pending_requests()[0]->script_data()->utf16()); |
| 3058 resolver.pending_set_pac_script_request()->CompleteNow(OK); | 3083 factory.pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 3059 | 3084 |
| 3060 ASSERT_EQ(1u, resolver.pending_requests().size()); | 3085 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 3061 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); | 3086 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); |
| 3062 | 3087 |
| 3063 // Complete the pending request. | 3088 // Complete the pending request. |
| 3064 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); | 3089 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); |
| 3065 resolver.pending_requests()[0]->CompleteNow(OK); | 3090 resolver.pending_requests()[0]->CompleteNow(OK); |
| 3066 | 3091 |
| 3067 // Wait for completion callback, and verify that the request ran as expected. | 3092 // Wait for completion callback, and verify that the request ran as expected. |
| 3068 EXPECT_EQ(OK, callback1.WaitForResult()); | 3093 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 3069 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); | 3094 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); |
| 3070 | 3095 |
| 3071 // At this point we have initialized the proxy service using a PAC script. | 3096 // At this point we have initialized the proxy service using a PAC script. |
| 3072 // Our PAC poller is set to update ONLY in response to network activity, | 3097 // Our PAC poller is set to update ONLY in response to network activity, |
| 3073 // (i.e. another call to ResolveProxy()). | 3098 // (i.e. another call to ResolveProxy()). |
| 3074 | 3099 |
| 3075 ASSERT_FALSE(fetcher->has_pending_request()); | 3100 ASSERT_FALSE(fetcher->has_pending_request()); |
| 3101 ASSERT_TRUE(factory.pending_requests().empty()); | |
| 3076 ASSERT_TRUE(resolver.pending_requests().empty()); | 3102 ASSERT_TRUE(resolver.pending_requests().empty()); |
| 3077 | 3103 |
| 3078 // Start a second request. | 3104 // Start a second request. |
| 3079 ProxyInfo info2; | 3105 ProxyInfo info2; |
| 3080 TestCompletionCallback callback2; | 3106 TestCompletionCallback callback2; |
| 3081 rv = service.ResolveProxy( | 3107 rv = service.ResolveProxy( |
| 3082 GURL("http://request2"), net::LOAD_NORMAL, &info2, callback2.callback(), | 3108 GURL("http://request2"), net::LOAD_NORMAL, &info2, callback2.callback(), |
| 3083 NULL, NULL, BoundNetLog()); | 3109 NULL, NULL, BoundNetLog()); |
| 3084 EXPECT_EQ(ERR_IO_PENDING, rv); | 3110 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 3085 | 3111 |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 3114 NULL, NULL, BoundNetLog()); | 3140 NULL, NULL, BoundNetLog()); |
| 3115 EXPECT_EQ(OK, rv); | 3141 EXPECT_EQ(OK, rv); |
| 3116 EXPECT_TRUE(info3.is_direct()); | 3142 EXPECT_TRUE(info3.is_direct()); |
| 3117 } | 3143 } |
| 3118 | 3144 |
| 3119 // Test that the synchronous resolution fails when a PAC script is active. | 3145 // Test that the synchronous resolution fails when a PAC script is active. |
| 3120 TEST_F(ProxyServiceTest, SynchronousWithPAC) { | 3146 TEST_F(ProxyServiceTest, SynchronousWithPAC) { |
| 3121 MockProxyConfigService* config_service = | 3147 MockProxyConfigService* config_service = |
| 3122 new MockProxyConfigService("http://foopy/proxy.pac"); | 3148 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 3123 | 3149 |
| 3124 MockAsyncProxyResolver resolver; | 3150 MockAsyncProxyResolverFactory factory(false); |
| 3125 | 3151 |
| 3126 ProxyService service( | 3152 ProxyService service( |
| 3127 config_service, | 3153 config_service, |
| 3128 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 3154 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 3129 | 3155 |
| 3130 GURL url("http://www.google.com/"); | 3156 GURL url("http://www.google.com/"); |
| 3131 | 3157 |
| 3132 ProxyInfo info; | 3158 ProxyInfo info; |
| 3133 info.UseDirect(); | 3159 info.UseDirect(); |
| 3134 BoundTestNetLog log; | 3160 BoundTestNetLog log; |
| 3135 | 3161 |
| 3136 bool synchronous_success = service.TryResolveProxySynchronously( | 3162 bool synchronous_success = service.TryResolveProxySynchronously( |
| 3137 url, net::LOAD_NORMAL, &info, NULL, log.bound()); | 3163 url, net::LOAD_NORMAL, &info, NULL, log.bound()); |
| 3138 EXPECT_FALSE(synchronous_success); | 3164 EXPECT_FALSE(synchronous_success); |
| 3139 | 3165 |
| 3140 // No request should have been queued. | |
| 3141 EXPECT_EQ(0u, resolver.pending_requests().size()); | |
| 3142 | |
| 3143 // |info| should not have been modified. | 3166 // |info| should not have been modified. |
| 3144 EXPECT_TRUE(info.is_direct()); | 3167 EXPECT_TRUE(info.is_direct()); |
| 3145 } | 3168 } |
| 3146 | 3169 |
| 3147 // Test that synchronous results are returned correctly if a fixed proxy | 3170 // Test that synchronous results are returned correctly if a fixed proxy |
| 3148 // configuration is active. | 3171 // configuration is active. |
| 3149 TEST_F(ProxyServiceTest, SynchronousWithFixedConfiguration) { | 3172 TEST_F(ProxyServiceTest, SynchronousWithFixedConfiguration) { |
| 3150 ProxyConfig config; | 3173 ProxyConfig config; |
| 3151 config.proxy_rules().ParseFromString("foopy1:8080"); | 3174 config.proxy_rules().ParseFromString("foopy1:8080"); |
| 3152 config.set_auto_detect(false); | 3175 config.set_auto_detect(false); |
| 3153 | 3176 |
| 3154 MockAsyncProxyResolver resolver; | 3177 MockAsyncProxyResolverFactory factory(false); |
| 3155 | 3178 |
| 3156 ProxyService service( | 3179 ProxyService service( |
| 3157 new MockProxyConfigService(config), | 3180 new MockProxyConfigService(config), |
| 3158 make_scoped_ptr(new ForwardingProxyResolverFactory(&resolver)), NULL); | 3181 make_scoped_ptr(new ForwardingProxyResolverFactory(&factory)), NULL); |
| 3159 | 3182 |
| 3160 GURL url("http://www.google.com/"); | 3183 GURL url("http://www.google.com/"); |
| 3161 | 3184 |
| 3162 ProxyInfo info; | 3185 ProxyInfo info; |
| 3163 BoundTestNetLog log; | 3186 BoundTestNetLog log; |
| 3164 | 3187 |
| 3165 bool synchronous_success = service.TryResolveProxySynchronously( | 3188 bool synchronous_success = service.TryResolveProxySynchronously( |
| 3166 url, net::LOAD_NORMAL, &info, NULL, log.bound()); | 3189 url, net::LOAD_NORMAL, &info, NULL, log.bound()); |
| 3167 EXPECT_TRUE(synchronous_success); | 3190 EXPECT_TRUE(synchronous_success); |
| 3168 EXPECT_FALSE(info.is_direct()); | 3191 EXPECT_FALSE(info.is_direct()); |
| 3169 EXPECT_EQ("foopy1", info.proxy_server().host_port_pair().host()); | 3192 EXPECT_EQ("foopy1", info.proxy_server().host_port_pair().host()); |
| 3170 | 3193 |
| 3171 // No request should have been queued. | 3194 // No request should have been queued. |
| 3172 EXPECT_EQ(0u, resolver.pending_requests().size()); | 3195 EXPECT_EQ(0u, factory.pending_requests().size()); |
| 3173 } | 3196 } |
| 3174 | 3197 |
| 3175 } // namespace net | 3198 } // namespace net |
| OLD | NEW |