Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: net/proxy/proxy_service_unittest.cc

Issue 2109503009: Refactor net tests to use GMock matchers for checking net::Error results (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Revert changes to contents.txt files Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <cstdarg> 7 #include <cstdarg>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 11 matching lines...) Expand all
22 #include "net/log/net_log.h" 22 #include "net/log/net_log.h"
23 #include "net/log/test_net_log.h" 23 #include "net/log/test_net_log.h"
24 #include "net/log/test_net_log_entry.h" 24 #include "net/log/test_net_log_entry.h"
25 #include "net/log/test_net_log_util.h" 25 #include "net/log/test_net_log_util.h"
26 #include "net/proxy/dhcp_proxy_script_fetcher.h" 26 #include "net/proxy/dhcp_proxy_script_fetcher.h"
27 #include "net/proxy/mock_proxy_resolver.h" 27 #include "net/proxy/mock_proxy_resolver.h"
28 #include "net/proxy/mock_proxy_script_fetcher.h" 28 #include "net/proxy/mock_proxy_script_fetcher.h"
29 #include "net/proxy/proxy_config_service.h" 29 #include "net/proxy/proxy_config_service.h"
30 #include "net/proxy/proxy_resolver.h" 30 #include "net/proxy/proxy_resolver.h"
31 #include "net/proxy/proxy_script_fetcher.h" 31 #include "net/proxy/proxy_script_fetcher.h"
32 #include "net/test/gtest_util.h"
33 #include "testing/gmock/include/gmock/gmock.h"
32 #include "testing/gtest/include/gtest/gtest.h" 34 #include "testing/gtest/include/gtest/gtest.h"
33 #include "url/gurl.h" 35 #include "url/gurl.h"
34 36
37 using net::test::IsError;
38 using net::test::IsOk;
39
35 using base::ASCIIToUTF16; 40 using base::ASCIIToUTF16;
36 41
37 // TODO(eroman): Write a test which exercises 42 // TODO(eroman): Write a test which exercises
38 // ProxyService::SuspendAllPendingRequests(). 43 // ProxyService::SuspendAllPendingRequests().
39 namespace net { 44 namespace net {
40 namespace { 45 namespace {
41 46
42 // This polling policy will decide to poll every 1 ms. 47 // This polling policy will decide to poll every 1 ms.
43 class ImmediatePollPolicy : public ProxyService::PacPollPolicy { 48 class ImmediatePollPolicy : public ProxyService::PacPollPolicy {
44 public: 49 public:
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 base::WrapUnique(factory), nullptr); 358 base::WrapUnique(factory), nullptr);
354 359
355 GURL url("http://www.google.com/"); 360 GURL url("http://www.google.com/");
356 361
357 ProxyInfo info; 362 ProxyInfo info;
358 TestCompletionCallback callback; 363 TestCompletionCallback callback;
359 BoundTestNetLog log; 364 BoundTestNetLog log;
360 int rv = 365 int rv =
361 service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 366 service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
362 callback.callback(), nullptr, nullptr, log.bound()); 367 callback.callback(), nullptr, nullptr, log.bound());
363 EXPECT_EQ(OK, rv); 368 EXPECT_THAT(rv, IsOk());
364 EXPECT_TRUE(factory->pending_requests().empty()); 369 EXPECT_TRUE(factory->pending_requests().empty());
365 370
366 EXPECT_TRUE(info.is_direct()); 371 EXPECT_TRUE(info.is_direct());
367 EXPECT_TRUE(info.proxy_resolve_start_time().is_null()); 372 EXPECT_TRUE(info.proxy_resolve_start_time().is_null());
368 EXPECT_TRUE(info.proxy_resolve_end_time().is_null()); 373 EXPECT_TRUE(info.proxy_resolve_end_time().is_null());
369 374
370 // Check the NetLog was filled correctly. 375 // Check the NetLog was filled correctly.
371 TestNetLogEntry::List entries; 376 TestNetLogEntry::List entries;
372 log.GetEntries(&entries); 377 log.GetEntries(&entries);
373 378
(...skipping 20 matching lines...) Expand all
394 GURL bypass_url("http://internet.org"); 399 GURL bypass_url("http://internet.org");
395 400
396 ProxyInfo info; 401 ProxyInfo info;
397 TestCompletionCallback callback; 402 TestCompletionCallback callback;
398 BoundTestNetLog log; 403 BoundTestNetLog log;
399 404
400 // First, warm up the ProxyService. 405 // First, warm up the ProxyService.
401 int rv = 406 int rv =
402 service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 407 service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
403 callback.callback(), nullptr, nullptr, log.bound()); 408 callback.callback(), nullptr, nullptr, log.bound());
404 EXPECT_EQ(OK, rv); 409 EXPECT_THAT(rv, IsOk());
405 410
406 // Verify that network delegate is invoked. 411 // Verify that network delegate is invoked.
407 TestResolveProxyDelegate delegate; 412 TestResolveProxyDelegate delegate;
408 rv = service.ResolveProxy(url, "GET", LOAD_NORMAL, &info, callback.callback(), 413 rv = service.ResolveProxy(url, "GET", LOAD_NORMAL, &info, callback.callback(),
409 nullptr, &delegate, log.bound()); 414 nullptr, &delegate, log.bound());
410 EXPECT_TRUE(delegate.on_resolve_proxy_called()); 415 EXPECT_TRUE(delegate.on_resolve_proxy_called());
411 EXPECT_EQ(&service, delegate.proxy_service()); 416 EXPECT_EQ(&service, delegate.proxy_service());
412 EXPECT_EQ(delegate.method(), "GET"); 417 EXPECT_EQ(delegate.method(), "GET");
413 418
414 // Verify that the ProxyDelegate's behavior is stateless across 419 // Verify that the ProxyDelegate's behavior is stateless across
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 GURL bypass_url("http://internet.org"); 457 GURL bypass_url("http://internet.org");
453 458
454 ProxyInfo info; 459 ProxyInfo info;
455 TestCompletionCallback callback; 460 TestCompletionCallback callback;
456 BoundTestNetLog log; 461 BoundTestNetLog log;
457 462
458 // First, warm up the ProxyService. 463 // First, warm up the ProxyService.
459 int rv = 464 int rv =
460 service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 465 service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
461 callback.callback(), nullptr, nullptr, log.bound()); 466 callback.callback(), nullptr, nullptr, log.bound());
462 EXPECT_EQ(OK, rv); 467 EXPECT_THAT(rv, IsOk());
463 468
464 TestResolveProxyDelegate delegate; 469 TestResolveProxyDelegate delegate;
465 delegate.set_remove_proxy(true); 470 delegate.set_remove_proxy(true);
466 471
467 // Callback should interpose: 472 // Callback should interpose:
468 rv = service.ResolveProxy(url, "GET", LOAD_NORMAL, &info, callback.callback(), 473 rv = service.ResolveProxy(url, "GET", LOAD_NORMAL, &info, callback.callback(),
469 nullptr, &delegate, log.bound()); 474 nullptr, &delegate, log.bound());
470 EXPECT_TRUE(info.is_direct()); 475 EXPECT_TRUE(info.is_direct());
471 delegate.set_remove_proxy(false); 476 delegate.set_remove_proxy(false);
472 477
(...skipping 24 matching lines...) Expand all
497 GURL url("http://www.google.com/"); 502 GURL url("http://www.google.com/");
498 503
499 ProxyInfo info; 504 ProxyInfo info;
500 TestCompletionCallback callback; 505 TestCompletionCallback callback;
501 ProxyService::PacRequest* request; 506 ProxyService::PacRequest* request;
502 BoundTestNetLog log; 507 BoundTestNetLog log;
503 508
504 int rv = 509 int rv =
505 service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 510 service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
506 callback.callback(), &request, nullptr, log.bound()); 511 callback.callback(), &request, nullptr, log.bound());
507 EXPECT_EQ(ERR_IO_PENDING, rv); 512 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
508 513
509 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request)); 514 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request));
510 515
511 ASSERT_EQ(1u, factory->pending_requests().size()); 516 ASSERT_EQ(1u, factory->pending_requests().size());
512 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 517 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
513 factory->pending_requests()[0]->script_data()->url()); 518 factory->pending_requests()[0]->script_data()->url());
514 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 519 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
515 520
516 ASSERT_EQ(1u, resolver.pending_requests().size()); 521 ASSERT_EQ(1u, resolver.pending_requests().size());
517 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 522 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
518 523
519 // Set the result in proxy resolver. 524 // Set the result in proxy resolver.
520 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy"); 525 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy");
521 resolver.pending_requests()[0]->CompleteNow(OK); 526 resolver.pending_requests()[0]->CompleteNow(OK);
522 527
523 EXPECT_EQ(OK, callback.WaitForResult()); 528 EXPECT_THAT(callback.WaitForResult(), IsOk());
524 EXPECT_FALSE(info.is_direct()); 529 EXPECT_FALSE(info.is_direct());
525 EXPECT_EQ("foopy:80", info.proxy_server().ToURI()); 530 EXPECT_EQ("foopy:80", info.proxy_server().ToURI());
526 EXPECT_TRUE(info.did_use_pac_script()); 531 EXPECT_TRUE(info.did_use_pac_script());
527 532
528 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 533 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
529 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 534 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
530 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 535 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
531 536
532 // Check the NetLog was filled correctly. 537 // Check the NetLog was filled correctly.
533 TestNetLogEntry::List entries; 538 TestNetLogEntry::List entries;
(...skipping 23 matching lines...) Expand all
557 ProxyService service(base::WrapUnique(config_service), 562 ProxyService service(base::WrapUnique(config_service),
558 base::WrapUnique(factory), nullptr); 563 base::WrapUnique(factory), nullptr);
559 564
560 GURL url("http://username:password@www.google.com/?ref#hash#hash"); 565 GURL url("http://username:password@www.google.com/?ref#hash#hash");
561 566
562 ProxyInfo info; 567 ProxyInfo info;
563 TestCompletionCallback callback; 568 TestCompletionCallback callback;
564 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 569 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
565 callback.callback(), nullptr, nullptr, 570 callback.callback(), nullptr, nullptr,
566 BoundNetLog()); 571 BoundNetLog());
567 EXPECT_EQ(ERR_IO_PENDING, rv); 572 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
568 573
569 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 574 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
570 factory->pending_requests()[0]->script_data()->url()); 575 factory->pending_requests()[0]->script_data()->url());
571 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 576 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
572 577
573 ASSERT_EQ(1u, resolver.pending_requests().size()); 578 ASSERT_EQ(1u, resolver.pending_requests().size());
574 // The URL should have been simplified, stripping the username/password/hash. 579 // The URL should have been simplified, stripping the username/password/hash.
575 EXPECT_EQ(GURL("http://www.google.com/?ref"), 580 EXPECT_EQ(GURL("http://www.google.com/?ref"),
576 resolver.pending_requests()[0]->url()); 581 resolver.pending_requests()[0]->url());
577 582
(...skipping 11 matching lines...) Expand all
589 ProxyService service(base::WrapUnique(config_service), 594 ProxyService service(base::WrapUnique(config_service),
590 base::WrapUnique(factory), nullptr); 595 base::WrapUnique(factory), nullptr);
591 596
592 GURL url("http://www.google.com/"); 597 GURL url("http://www.google.com/");
593 598
594 ProxyInfo info; 599 ProxyInfo info;
595 TestCompletionCallback callback1; 600 TestCompletionCallback callback1;
596 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 601 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
597 callback1.callback(), nullptr, nullptr, 602 callback1.callback(), nullptr, nullptr,
598 BoundNetLog()); 603 BoundNetLog());
599 EXPECT_EQ(ERR_IO_PENDING, rv); 604 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
600 605
601 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 606 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
602 factory->pending_requests()[0]->script_data()->url()); 607 factory->pending_requests()[0]->script_data()->url());
603 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 608 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
604 609
605 ASSERT_EQ(1u, resolver.pending_requests().size()); 610 ASSERT_EQ(1u, resolver.pending_requests().size());
606 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 611 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
607 612
608 // Set the result in proxy resolver. 613 // Set the result in proxy resolver.
609 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy:8080"); 614 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy:8080");
610 resolver.pending_requests()[0]->CompleteNow(OK); 615 resolver.pending_requests()[0]->CompleteNow(OK);
611 616
612 EXPECT_EQ(OK, callback1.WaitForResult()); 617 EXPECT_THAT(callback1.WaitForResult(), IsOk());
613 EXPECT_FALSE(info.is_direct()); 618 EXPECT_FALSE(info.is_direct());
614 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI()); 619 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI());
615 EXPECT_TRUE(info.did_use_pac_script()); 620 EXPECT_TRUE(info.did_use_pac_script());
616 621
617 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 622 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
618 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 623 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
619 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 624 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
620 625
621 // Now, imagine that connecting to foopy:8080 fails: there is nothing 626 // Now, imagine that connecting to foopy:8080 fails: there is nothing
622 // left to fallback to, since our proxy list was NOT terminated by 627 // left to fallback to, since our proxy list was NOT terminated by
623 // DIRECT. 628 // DIRECT.
624 TestResolveProxyDelegate proxy_delegate; 629 TestResolveProxyDelegate proxy_delegate;
625 TestCompletionCallback callback2; 630 TestCompletionCallback callback2;
626 ProxyServer expected_proxy_server = info.proxy_server(); 631 ProxyServer expected_proxy_server = info.proxy_server();
627 rv = service.ReconsiderProxyAfterError( 632 rv = service.ReconsiderProxyAfterError(
628 url, "GET", LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 633 url, "GET", LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
629 callback2.callback(), nullptr, &proxy_delegate, BoundNetLog()); 634 callback2.callback(), nullptr, &proxy_delegate, BoundNetLog());
630 // ReconsiderProxyAfterError returns error indicating nothing left. 635 // ReconsiderProxyAfterError returns error indicating nothing left.
631 EXPECT_EQ(ERR_FAILED, rv); 636 EXPECT_THAT(rv, IsError(ERR_FAILED));
632 EXPECT_TRUE(info.is_empty()); 637 EXPECT_TRUE(info.is_empty());
633 } 638 }
634 639
635 // Test that if the execution of the PAC script fails (i.e. javascript runtime 640 // Test that if the execution of the PAC script fails (i.e. javascript runtime
636 // error), and the PAC settings are non-mandatory, that we fall-back to direct. 641 // error), and the PAC settings are non-mandatory, that we fall-back to direct.
637 TEST_F(ProxyServiceTest, PAC_RuntimeError) { 642 TEST_F(ProxyServiceTest, PAC_RuntimeError) {
638 MockProxyConfigService* config_service = 643 MockProxyConfigService* config_service =
639 new MockProxyConfigService("http://foopy/proxy.pac"); 644 new MockProxyConfigService("http://foopy/proxy.pac");
640 MockAsyncProxyResolver resolver; 645 MockAsyncProxyResolver resolver;
641 MockAsyncProxyResolverFactory* factory = 646 MockAsyncProxyResolverFactory* factory =
642 new MockAsyncProxyResolverFactory(false); 647 new MockAsyncProxyResolverFactory(false);
643 648
644 ProxyService service(base::WrapUnique(config_service), 649 ProxyService service(base::WrapUnique(config_service),
645 base::WrapUnique(factory), nullptr); 650 base::WrapUnique(factory), nullptr);
646 651
647 GURL url("http://this-causes-js-error/"); 652 GURL url("http://this-causes-js-error/");
648 653
649 ProxyInfo info; 654 ProxyInfo info;
650 TestCompletionCallback callback1; 655 TestCompletionCallback callback1;
651 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 656 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
652 callback1.callback(), nullptr, nullptr, 657 callback1.callback(), nullptr, nullptr,
653 BoundNetLog()); 658 BoundNetLog());
654 EXPECT_EQ(ERR_IO_PENDING, rv); 659 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
655 660
656 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 661 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
657 factory->pending_requests()[0]->script_data()->url()); 662 factory->pending_requests()[0]->script_data()->url());
658 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 663 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
659 664
660 ASSERT_EQ(1u, resolver.pending_requests().size()); 665 ASSERT_EQ(1u, resolver.pending_requests().size());
661 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 666 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
662 667
663 // Simulate a failure in the PAC executor. 668 // Simulate a failure in the PAC executor.
664 resolver.pending_requests()[0]->CompleteNow(ERR_PAC_SCRIPT_FAILED); 669 resolver.pending_requests()[0]->CompleteNow(ERR_PAC_SCRIPT_FAILED);
665 670
666 EXPECT_EQ(OK, callback1.WaitForResult()); 671 EXPECT_THAT(callback1.WaitForResult(), IsOk());
667 672
668 // Since the PAC script was non-mandatory, we should have fallen-back to 673 // Since the PAC script was non-mandatory, we should have fallen-back to
669 // DIRECT. 674 // DIRECT.
670 EXPECT_TRUE(info.is_direct()); 675 EXPECT_TRUE(info.is_direct());
671 EXPECT_TRUE(info.did_use_pac_script()); 676 EXPECT_TRUE(info.did_use_pac_script());
672 EXPECT_EQ(1, info.config_id()); 677 EXPECT_EQ(1, info.config_id());
673 678
674 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 679 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
675 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 680 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
676 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 681 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
(...skipping 26 matching lines...) Expand all
703 ProxyService service(base::WrapUnique(config_service), 708 ProxyService service(base::WrapUnique(config_service),
704 base::WrapUnique(factory), nullptr); 709 base::WrapUnique(factory), nullptr);
705 710
706 GURL url("http://www.google.com/"); 711 GURL url("http://www.google.com/");
707 712
708 ProxyInfo info; 713 ProxyInfo info;
709 TestCompletionCallback callback1; 714 TestCompletionCallback callback1;
710 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 715 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
711 callback1.callback(), nullptr, nullptr, 716 callback1.callback(), nullptr, nullptr,
712 BoundNetLog()); 717 BoundNetLog());
713 EXPECT_EQ(ERR_IO_PENDING, rv); 718 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
714 719
715 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 720 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
716 factory->pending_requests()[0]->script_data()->url()); 721 factory->pending_requests()[0]->script_data()->url());
717 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 722 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
718 723
719 ASSERT_EQ(1u, resolver.pending_requests().size()); 724 ASSERT_EQ(1u, resolver.pending_requests().size());
720 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 725 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
721 726
722 // Set the result in proxy resolver. 727 // Set the result in proxy resolver.
723 resolver.pending_requests()[0]->results()->UsePacString( 728 resolver.pending_requests()[0]->results()->UsePacString(
724 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); 729 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20");
725 resolver.pending_requests()[0]->CompleteNow(OK); 730 resolver.pending_requests()[0]->CompleteNow(OK);
726 731
727 EXPECT_EQ(OK, callback1.WaitForResult()); 732 EXPECT_THAT(callback1.WaitForResult(), IsOk());
728 EXPECT_TRUE(info.is_direct()); 733 EXPECT_TRUE(info.is_direct());
729 734
730 // Fallback 1. 735 // Fallback 1.
731 TestCompletionCallback callback2; 736 TestCompletionCallback callback2;
732 rv = service.ReconsiderProxyAfterError( 737 rv = service.ReconsiderProxyAfterError(
733 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 738 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
734 callback2.callback(), nullptr, nullptr, BoundNetLog()); 739 callback2.callback(), nullptr, nullptr, BoundNetLog());
735 EXPECT_EQ(OK, rv); 740 EXPECT_THAT(rv, IsOk());
736 EXPECT_FALSE(info.is_direct()); 741 EXPECT_FALSE(info.is_direct());
737 EXPECT_EQ("foobar:10", info.proxy_server().ToURI()); 742 EXPECT_EQ("foobar:10", info.proxy_server().ToURI());
738 743
739 // Fallback 2. 744 // Fallback 2.
740 TestResolveProxyDelegate proxy_delegate; 745 TestResolveProxyDelegate proxy_delegate;
741 ProxyServer expected_proxy_server3 = info.proxy_server(); 746 ProxyServer expected_proxy_server3 = info.proxy_server();
742 TestCompletionCallback callback3; 747 TestCompletionCallback callback3;
743 rv = service.ReconsiderProxyAfterError( 748 rv = service.ReconsiderProxyAfterError(
744 url, "GET", LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 749 url, "GET", LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
745 callback3.callback(), nullptr, &proxy_delegate, BoundNetLog()); 750 callback3.callback(), nullptr, &proxy_delegate, BoundNetLog());
746 EXPECT_EQ(OK, rv); 751 EXPECT_THAT(rv, IsOk());
747 EXPECT_TRUE(info.is_direct()); 752 EXPECT_TRUE(info.is_direct());
748 753
749 // Fallback 3. 754 // Fallback 3.
750 ProxyServer expected_proxy_server4 = info.proxy_server(); 755 ProxyServer expected_proxy_server4 = info.proxy_server();
751 TestCompletionCallback callback4; 756 TestCompletionCallback callback4;
752 rv = service.ReconsiderProxyAfterError( 757 rv = service.ReconsiderProxyAfterError(
753 url, "GET", LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 758 url, "GET", LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
754 callback4.callback(), nullptr, &proxy_delegate, BoundNetLog()); 759 callback4.callback(), nullptr, &proxy_delegate, BoundNetLog());
755 EXPECT_EQ(OK, rv); 760 EXPECT_THAT(rv, IsOk());
756 EXPECT_FALSE(info.is_direct()); 761 EXPECT_FALSE(info.is_direct());
757 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); 762 EXPECT_EQ("foobar:20", info.proxy_server().ToURI());
758 763
759 // Fallback 4 -- Nothing to fall back to! 764 // Fallback 4 -- Nothing to fall back to!
760 ProxyServer expected_proxy_server5 = info.proxy_server(); 765 ProxyServer expected_proxy_server5 = info.proxy_server();
761 TestCompletionCallback callback5; 766 TestCompletionCallback callback5;
762 rv = service.ReconsiderProxyAfterError( 767 rv = service.ReconsiderProxyAfterError(
763 url, "GET", LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 768 url, "GET", LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
764 callback5.callback(), nullptr, &proxy_delegate, BoundNetLog()); 769 callback5.callback(), nullptr, &proxy_delegate, BoundNetLog());
765 EXPECT_EQ(ERR_FAILED, rv); 770 EXPECT_THAT(rv, IsError(ERR_FAILED));
766 EXPECT_TRUE(info.is_empty()); 771 EXPECT_TRUE(info.is_empty());
767 } 772 }
768 773
769 TEST_F(ProxyServiceTest, PAC_ConfigSourcePropagates) { 774 TEST_F(ProxyServiceTest, PAC_ConfigSourcePropagates) {
770 // Test whether the ProxyConfigSource set by the ProxyConfigService is applied 775 // Test whether the ProxyConfigSource set by the ProxyConfigService is applied
771 // to ProxyInfo after the proxy is resolved via a PAC script. 776 // to ProxyInfo after the proxy is resolved via a PAC script.
772 ProxyConfig config = 777 ProxyConfig config =
773 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); 778 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"));
774 config.set_source(PROXY_CONFIG_SOURCE_TEST); 779 config.set_source(PROXY_CONFIG_SOURCE_TEST);
775 780
776 MockProxyConfigService* config_service = new MockProxyConfigService(config); 781 MockProxyConfigService* config_service = new MockProxyConfigService(config);
777 MockAsyncProxyResolver resolver; 782 MockAsyncProxyResolver resolver;
778 MockAsyncProxyResolverFactory* factory = 783 MockAsyncProxyResolverFactory* factory =
779 new MockAsyncProxyResolverFactory(false); 784 new MockAsyncProxyResolverFactory(false);
780 ProxyService service(base::WrapUnique(config_service), 785 ProxyService service(base::WrapUnique(config_service),
781 base::WrapUnique(factory), nullptr); 786 base::WrapUnique(factory), nullptr);
782 787
783 // Resolve something. 788 // Resolve something.
784 GURL url("http://www.google.com/"); 789 GURL url("http://www.google.com/");
785 ProxyInfo info; 790 ProxyInfo info;
786 TestCompletionCallback callback; 791 TestCompletionCallback callback;
787 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 792 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
788 callback.callback(), nullptr, nullptr, 793 callback.callback(), nullptr, nullptr,
789 BoundNetLog()); 794 BoundNetLog());
790 ASSERT_EQ(ERR_IO_PENDING, rv); 795 ASSERT_THAT(rv, IsError(ERR_IO_PENDING));
791 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 796 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
792 ASSERT_EQ(1u, resolver.pending_requests().size()); 797 ASSERT_EQ(1u, resolver.pending_requests().size());
793 798
794 // Set the result in proxy resolver. 799 // Set the result in proxy resolver.
795 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy"); 800 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy");
796 resolver.pending_requests()[0]->CompleteNow(OK); 801 resolver.pending_requests()[0]->CompleteNow(OK);
797 802
798 EXPECT_EQ(OK, callback.WaitForResult()); 803 EXPECT_THAT(callback.WaitForResult(), IsOk());
799 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); 804 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source());
800 EXPECT_TRUE(info.did_use_pac_script()); 805 EXPECT_TRUE(info.did_use_pac_script());
801 806
802 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 807 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
803 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 808 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
804 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 809 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
805 } 810 }
806 811
807 TEST_F(ProxyServiceTest, ProxyResolverFails) { 812 TEST_F(ProxyServiceTest, ProxyResolverFails) {
808 // Test what happens when the ProxyResolver fails. The download and setting 813 // Test what happens when the ProxyResolver fails. The download and setting
(...skipping 10 matching lines...) Expand all
819 ProxyService service(base::WrapUnique(config_service), 824 ProxyService service(base::WrapUnique(config_service),
820 base::WrapUnique(factory), nullptr); 825 base::WrapUnique(factory), nullptr);
821 826
822 // Start first resolve request. 827 // Start first resolve request.
823 GURL url("http://www.google.com/"); 828 GURL url("http://www.google.com/");
824 ProxyInfo info; 829 ProxyInfo info;
825 TestCompletionCallback callback1; 830 TestCompletionCallback callback1;
826 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 831 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
827 callback1.callback(), nullptr, nullptr, 832 callback1.callback(), nullptr, nullptr,
828 BoundNetLog()); 833 BoundNetLog());
829 EXPECT_EQ(ERR_IO_PENDING, rv); 834 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
830 835
831 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 836 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
832 factory->pending_requests()[0]->script_data()->url()); 837 factory->pending_requests()[0]->script_data()->url());
833 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 838 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
834 839
835 ASSERT_EQ(1u, resolver.pending_requests().size()); 840 ASSERT_EQ(1u, resolver.pending_requests().size());
836 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 841 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
837 842
838 // Fail the first resolve request in MockAsyncProxyResolver. 843 // Fail the first resolve request in MockAsyncProxyResolver.
839 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); 844 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED);
840 845
841 // Although the proxy resolver failed the request, ProxyService implicitly 846 // Although the proxy resolver failed the request, ProxyService implicitly
842 // falls-back to DIRECT. 847 // falls-back to DIRECT.
843 EXPECT_EQ(OK, callback1.WaitForResult()); 848 EXPECT_THAT(callback1.WaitForResult(), IsOk());
844 EXPECT_TRUE(info.is_direct()); 849 EXPECT_TRUE(info.is_direct());
845 850
846 // Failed PAC executions still have proxy resolution times. 851 // Failed PAC executions still have proxy resolution times.
847 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 852 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
848 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 853 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
849 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 854 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
850 855
851 // The second resolve request will try to run through the proxy resolver, 856 // The second resolve request will try to run through the proxy resolver,
852 // regardless of whether the first request failed in it. 857 // regardless of whether the first request failed in it.
853 TestCompletionCallback callback2; 858 TestCompletionCallback callback2;
854 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 859 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
855 callback2.callback(), nullptr, nullptr, 860 callback2.callback(), nullptr, nullptr,
856 BoundNetLog()); 861 BoundNetLog());
857 EXPECT_EQ(ERR_IO_PENDING, rv); 862 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
858 863
859 ASSERT_EQ(1u, resolver.pending_requests().size()); 864 ASSERT_EQ(1u, resolver.pending_requests().size());
860 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 865 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
861 866
862 // This time we will have the resolver succeed (perhaps the PAC script has 867 // This time we will have the resolver succeed (perhaps the PAC script has
863 // a dependency on the current time). 868 // a dependency on the current time).
864 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); 869 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080");
865 resolver.pending_requests()[0]->CompleteNow(OK); 870 resolver.pending_requests()[0]->CompleteNow(OK);
866 871
867 EXPECT_EQ(OK, callback2.WaitForResult()); 872 EXPECT_THAT(callback2.WaitForResult(), IsOk());
868 EXPECT_FALSE(info.is_direct()); 873 EXPECT_FALSE(info.is_direct());
869 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI()); 874 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI());
870 } 875 }
871 876
872 TEST_F(ProxyServiceTest, ProxyResolverTerminatedDuringRequest) { 877 TEST_F(ProxyServiceTest, ProxyResolverTerminatedDuringRequest) {
873 // Test what happens when the ProxyResolver fails with a fatal error while 878 // Test what happens when the ProxyResolver fails with a fatal error while
874 // a GetProxyForURL() call is in progress. 879 // a GetProxyForURL() call is in progress.
875 880
876 MockProxyConfigService* config_service = 881 MockProxyConfigService* config_service =
877 new MockProxyConfigService("http://foopy/proxy.pac"); 882 new MockProxyConfigService("http://foopy/proxy.pac");
878 883
879 MockAsyncProxyResolver resolver; 884 MockAsyncProxyResolver resolver;
880 MockAsyncProxyResolverFactory* factory = 885 MockAsyncProxyResolverFactory* factory =
881 new MockAsyncProxyResolverFactory(false); 886 new MockAsyncProxyResolverFactory(false);
882 887
883 ProxyService service(base::WrapUnique(config_service), 888 ProxyService service(base::WrapUnique(config_service),
884 base::WrapUnique(factory), nullptr); 889 base::WrapUnique(factory), nullptr);
885 890
886 // Start first resolve request. 891 // Start first resolve request.
887 GURL url("http://www.google.com/"); 892 GURL url("http://www.google.com/");
888 ProxyInfo info; 893 ProxyInfo info;
889 TestCompletionCallback callback1; 894 TestCompletionCallback callback1;
890 int rv = service.ResolveProxy(url, std::string(), net::LOAD_NORMAL, &info, 895 int rv = service.ResolveProxy(url, std::string(), net::LOAD_NORMAL, &info,
891 callback1.callback(), nullptr, nullptr, 896 callback1.callback(), nullptr, nullptr,
892 BoundNetLog()); 897 BoundNetLog());
893 EXPECT_EQ(ERR_IO_PENDING, rv); 898 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
894 899
895 ASSERT_EQ(1u, factory->pending_requests().size()); 900 ASSERT_EQ(1u, factory->pending_requests().size());
896 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 901 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
897 factory->pending_requests()[0]->script_data()->url()); 902 factory->pending_requests()[0]->script_data()->url());
898 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 903 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
899 904
900 ASSERT_EQ(1u, resolver.pending_requests().size()); 905 ASSERT_EQ(1u, resolver.pending_requests().size());
901 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 906 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
902 907
903 // Fail the first resolve request in MockAsyncProxyResolver. 908 // Fail the first resolve request in MockAsyncProxyResolver.
904 resolver.pending_requests()[0]->CompleteNow(ERR_PAC_SCRIPT_TERMINATED); 909 resolver.pending_requests()[0]->CompleteNow(ERR_PAC_SCRIPT_TERMINATED);
905 910
906 // Although the proxy resolver failed the request, ProxyService implicitly 911 // Although the proxy resolver failed the request, ProxyService implicitly
907 // falls-back to DIRECT. 912 // falls-back to DIRECT.
908 EXPECT_EQ(OK, callback1.WaitForResult()); 913 EXPECT_THAT(callback1.WaitForResult(), IsOk());
909 EXPECT_TRUE(info.is_direct()); 914 EXPECT_TRUE(info.is_direct());
910 915
911 // Failed PAC executions still have proxy resolution times. 916 // Failed PAC executions still have proxy resolution times.
912 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 917 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
913 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 918 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
914 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 919 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
915 920
916 // With no other requests, the ProxyService waits for a new request before 921 // With no other requests, the ProxyService waits for a new request before
917 // initializing a new ProxyResolver. 922 // initializing a new ProxyResolver.
918 EXPECT_TRUE(factory->pending_requests().empty()); 923 EXPECT_TRUE(factory->pending_requests().empty());
919 924
920 TestCompletionCallback callback2; 925 TestCompletionCallback callback2;
921 rv = service.ResolveProxy(url, std::string(), net::LOAD_NORMAL, &info, 926 rv = service.ResolveProxy(url, std::string(), net::LOAD_NORMAL, &info,
922 callback2.callback(), nullptr, nullptr, 927 callback2.callback(), nullptr, nullptr,
923 BoundNetLog()); 928 BoundNetLog());
924 EXPECT_EQ(ERR_IO_PENDING, rv); 929 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
925 930
926 ASSERT_EQ(1u, factory->pending_requests().size()); 931 ASSERT_EQ(1u, factory->pending_requests().size());
927 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 932 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
928 factory->pending_requests()[0]->script_data()->url()); 933 factory->pending_requests()[0]->script_data()->url());
929 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 934 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
930 935
931 ASSERT_EQ(1u, resolver.pending_requests().size()); 936 ASSERT_EQ(1u, resolver.pending_requests().size());
932 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 937 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
933 938
934 // This time we will have the resolver succeed. 939 // This time we will have the resolver succeed.
935 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); 940 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080");
936 resolver.pending_requests()[0]->CompleteNow(OK); 941 resolver.pending_requests()[0]->CompleteNow(OK);
937 942
938 EXPECT_EQ(OK, callback2.WaitForResult()); 943 EXPECT_THAT(callback2.WaitForResult(), IsOk());
939 EXPECT_FALSE(info.is_direct()); 944 EXPECT_FALSE(info.is_direct());
940 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI()); 945 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI());
941 } 946 }
942 947
943 TEST_F(ProxyServiceTest, 948 TEST_F(ProxyServiceTest,
944 ProxyResolverTerminatedDuringRequestWithConcurrentRequest) { 949 ProxyResolverTerminatedDuringRequestWithConcurrentRequest) {
945 // Test what happens when the ProxyResolver fails with a fatal error while 950 // Test what happens when the ProxyResolver fails with a fatal error while
946 // a GetProxyForURL() call is in progress. 951 // a GetProxyForURL() call is in progress.
947 952
948 MockProxyConfigService* config_service = 953 MockProxyConfigService* config_service =
949 new MockProxyConfigService("http://foopy/proxy.pac"); 954 new MockProxyConfigService("http://foopy/proxy.pac");
950 955
951 MockAsyncProxyResolver resolver; 956 MockAsyncProxyResolver resolver;
952 MockAsyncProxyResolverFactory* factory = 957 MockAsyncProxyResolverFactory* factory =
953 new MockAsyncProxyResolverFactory(false); 958 new MockAsyncProxyResolverFactory(false);
954 959
955 ProxyService service(base::WrapUnique(config_service), 960 ProxyService service(base::WrapUnique(config_service),
956 base::WrapUnique(factory), nullptr); 961 base::WrapUnique(factory), nullptr);
957 962
958 // Start two resolve requests. 963 // Start two resolve requests.
959 GURL url1("http://www.google.com/"); 964 GURL url1("http://www.google.com/");
960 GURL url2("https://www.google.com/"); 965 GURL url2("https://www.google.com/");
961 ProxyInfo info; 966 ProxyInfo info;
962 TestCompletionCallback callback1; 967 TestCompletionCallback callback1;
963 int rv = service.ResolveProxy(url1, std::string(), net::LOAD_NORMAL, &info, 968 int rv = service.ResolveProxy(url1, std::string(), net::LOAD_NORMAL, &info,
964 callback1.callback(), nullptr, nullptr, 969 callback1.callback(), nullptr, nullptr,
965 BoundNetLog()); 970 BoundNetLog());
966 EXPECT_EQ(ERR_IO_PENDING, rv); 971 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
967 TestCompletionCallback callback2; 972 TestCompletionCallback callback2;
968 rv = service.ResolveProxy(url2, std::string(), net::LOAD_NORMAL, &info, 973 rv = service.ResolveProxy(url2, std::string(), net::LOAD_NORMAL, &info,
969 callback2.callback(), nullptr, nullptr, 974 callback2.callback(), nullptr, nullptr,
970 BoundNetLog()); 975 BoundNetLog());
971 EXPECT_EQ(ERR_IO_PENDING, rv); 976 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
972 977
973 ASSERT_EQ(1u, factory->pending_requests().size()); 978 ASSERT_EQ(1u, factory->pending_requests().size());
974 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 979 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
975 factory->pending_requests()[0]->script_data()->url()); 980 factory->pending_requests()[0]->script_data()->url());
976 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 981 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
977 982
978 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url2); 983 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url2);
979 984
980 // Fail the first resolve request in MockAsyncProxyResolver. 985 // Fail the first resolve request in MockAsyncProxyResolver.
981 requests[url1]->CompleteNow(ERR_PAC_SCRIPT_TERMINATED); 986 requests[url1]->CompleteNow(ERR_PAC_SCRIPT_TERMINATED);
982 987
983 // Although the proxy resolver failed the request, ProxyService implicitly 988 // Although the proxy resolver failed the request, ProxyService implicitly
984 // falls-back to DIRECT. 989 // falls-back to DIRECT.
985 EXPECT_EQ(OK, callback1.WaitForResult()); 990 EXPECT_THAT(callback1.WaitForResult(), IsOk());
986 EXPECT_TRUE(info.is_direct()); 991 EXPECT_TRUE(info.is_direct());
987 992
988 // Failed PAC executions still have proxy resolution times. 993 // Failed PAC executions still have proxy resolution times.
989 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 994 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
990 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 995 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
991 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 996 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
992 997
993 // The second request is cancelled when the proxy resolver terminates. 998 // The second request is cancelled when the proxy resolver terminates.
994 requests = GetCancelledRequestsForURLs(resolver, url2); 999 requests = GetCancelledRequestsForURLs(resolver, url2);
995 1000
996 // Since a second request was in progress, the ProxyService starts 1001 // Since a second request was in progress, the ProxyService starts
997 // initializating a new ProxyResolver. 1002 // initializating a new ProxyResolver.
998 ASSERT_EQ(1u, factory->pending_requests().size()); 1003 ASSERT_EQ(1u, factory->pending_requests().size());
999 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1004 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1000 factory->pending_requests()[0]->script_data()->url()); 1005 factory->pending_requests()[0]->script_data()->url());
1001 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1006 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1002 1007
1003 requests = GetPendingRequestsForURLs(resolver, url2); 1008 requests = GetPendingRequestsForURLs(resolver, url2);
1004 1009
1005 // This request succeeds. 1010 // This request succeeds.
1006 requests[url2]->results()->UseNamedProxy("foopy_valid:8080"); 1011 requests[url2]->results()->UseNamedProxy("foopy_valid:8080");
1007 requests[url2]->CompleteNow(OK); 1012 requests[url2]->CompleteNow(OK);
1008 1013
1009 EXPECT_EQ(OK, callback2.WaitForResult()); 1014 EXPECT_THAT(callback2.WaitForResult(), IsOk());
1010 EXPECT_FALSE(info.is_direct()); 1015 EXPECT_FALSE(info.is_direct());
1011 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI()); 1016 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI());
1012 } 1017 }
1013 1018
1014 TEST_F(ProxyServiceTest, ProxyScriptFetcherFailsDownloadingMandatoryPac) { 1019 TEST_F(ProxyServiceTest, ProxyScriptFetcherFailsDownloadingMandatoryPac) {
1015 // Test what happens when the ProxyScriptResolver fails to download a 1020 // Test what happens when the ProxyScriptResolver fails to download a
1016 // mandatory PAC script. 1021 // mandatory PAC script.
1017 1022
1018 ProxyConfig config( 1023 ProxyConfig config(
1019 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); 1024 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")));
1020 config.set_pac_mandatory(true); 1025 config.set_pac_mandatory(true);
1021 1026
1022 MockProxyConfigService* config_service = new MockProxyConfigService(config); 1027 MockProxyConfigService* config_service = new MockProxyConfigService(config);
1023 1028
1024 MockAsyncProxyResolverFactory* factory = 1029 MockAsyncProxyResolverFactory* factory =
1025 new MockAsyncProxyResolverFactory(false); 1030 new MockAsyncProxyResolverFactory(false);
1026 1031
1027 ProxyService service(base::WrapUnique(config_service), 1032 ProxyService service(base::WrapUnique(config_service),
1028 base::WrapUnique(factory), nullptr); 1033 base::WrapUnique(factory), nullptr);
1029 1034
1030 // Start first resolve request. 1035 // Start first resolve request.
1031 GURL url("http://www.google.com/"); 1036 GURL url("http://www.google.com/");
1032 ProxyInfo info; 1037 ProxyInfo info;
1033 TestCompletionCallback callback1; 1038 TestCompletionCallback callback1;
1034 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1039 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
1035 callback1.callback(), nullptr, nullptr, 1040 callback1.callback(), nullptr, nullptr,
1036 BoundNetLog()); 1041 BoundNetLog());
1037 EXPECT_EQ(ERR_IO_PENDING, rv); 1042 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1038 1043
1039 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1044 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1040 factory->pending_requests()[0]->script_data()->url()); 1045 factory->pending_requests()[0]->script_data()->url());
1041 factory->pending_requests()[0]->CompleteNow(ERR_FAILED, nullptr); 1046 factory->pending_requests()[0]->CompleteNow(ERR_FAILED, nullptr);
1042 1047
1043 ASSERT_EQ(0u, factory->pending_requests().size()); 1048 ASSERT_EQ(0u, factory->pending_requests().size());
1044 // As the proxy resolver factory failed the request and is configured for a 1049 // As the proxy resolver factory failed the request and is configured for a
1045 // mandatory PAC script, ProxyService must not implicitly fall-back to DIRECT. 1050 // mandatory PAC script, ProxyService must not implicitly fall-back to DIRECT.
1046 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, 1051 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED,
1047 callback1.WaitForResult()); 1052 callback1.WaitForResult());
1048 EXPECT_FALSE(info.is_direct()); 1053 EXPECT_FALSE(info.is_direct());
1049 1054
1050 // As the proxy resolver factory failed the request and is configured for a 1055 // As the proxy resolver factory failed the request and is configured for a
1051 // mandatory PAC script, ProxyService must not implicitly fall-back to DIRECT. 1056 // mandatory PAC script, ProxyService must not implicitly fall-back to DIRECT.
1052 TestCompletionCallback callback2; 1057 TestCompletionCallback callback2;
1053 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1058 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
1054 callback2.callback(), nullptr, nullptr, 1059 callback2.callback(), nullptr, nullptr,
1055 BoundNetLog()); 1060 BoundNetLog());
1056 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, rv); 1061 EXPECT_THAT(rv, IsError(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED));
1057 EXPECT_FALSE(info.is_direct()); 1062 EXPECT_FALSE(info.is_direct());
1058 } 1063 }
1059 1064
1060 TEST_F(ProxyServiceTest, ProxyResolverFailsParsingJavaScriptMandatoryPac) { 1065 TEST_F(ProxyServiceTest, ProxyResolverFailsParsingJavaScriptMandatoryPac) {
1061 // Test what happens when the ProxyResolver fails that is configured to use a 1066 // Test what happens when the ProxyResolver fails that is configured to use a
1062 // mandatory PAC script. The download of the PAC script has already 1067 // mandatory PAC script. The download of the PAC script has already
1063 // succeeded but the PAC script contains no valid javascript. 1068 // succeeded but the PAC script contains no valid javascript.
1064 1069
1065 ProxyConfig config( 1070 ProxyConfig config(
1066 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); 1071 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")));
(...skipping 11 matching lines...) Expand all
1078 service.SetProxyScriptFetchers( 1083 service.SetProxyScriptFetchers(
1079 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 1084 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
1080 1085
1081 // Start resolve request. 1086 // Start resolve request.
1082 GURL url("http://www.google.com/"); 1087 GURL url("http://www.google.com/");
1083 ProxyInfo info; 1088 ProxyInfo info;
1084 TestCompletionCallback callback; 1089 TestCompletionCallback callback;
1085 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1090 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
1086 callback.callback(), nullptr, nullptr, 1091 callback.callback(), nullptr, nullptr,
1087 BoundNetLog()); 1092 BoundNetLog());
1088 EXPECT_EQ(ERR_IO_PENDING, rv); 1093 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1089 1094
1090 // Check that nothing has been sent to the proxy resolver factory yet. 1095 // Check that nothing has been sent to the proxy resolver factory yet.
1091 ASSERT_EQ(0u, factory->pending_requests().size()); 1096 ASSERT_EQ(0u, factory->pending_requests().size());
1092 1097
1093 // Downloading the PAC script succeeds. 1098 // Downloading the PAC script succeeds.
1094 EXPECT_TRUE(fetcher->has_pending_request()); 1099 EXPECT_TRUE(fetcher->has_pending_request());
1095 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 1100 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
1096 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); 1101 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents");
1097 1102
1098 EXPECT_FALSE(fetcher->has_pending_request()); 1103 EXPECT_FALSE(fetcher->has_pending_request());
(...skipping 26 matching lines...) Expand all
1125 ProxyService service(base::WrapUnique(config_service), 1130 ProxyService service(base::WrapUnique(config_service),
1126 base::WrapUnique(factory), nullptr); 1131 base::WrapUnique(factory), nullptr);
1127 1132
1128 // Start first resolve request. 1133 // Start first resolve request.
1129 GURL url("http://www.google.com/"); 1134 GURL url("http://www.google.com/");
1130 ProxyInfo info; 1135 ProxyInfo info;
1131 TestCompletionCallback callback1; 1136 TestCompletionCallback callback1;
1132 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1137 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
1133 callback1.callback(), nullptr, nullptr, 1138 callback1.callback(), nullptr, nullptr,
1134 BoundNetLog()); 1139 BoundNetLog());
1135 EXPECT_EQ(ERR_IO_PENDING, rv); 1140 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1136 1141
1137 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1142 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1138 factory->pending_requests()[0]->script_data()->url()); 1143 factory->pending_requests()[0]->script_data()->url());
1139 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1144 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1140 1145
1141 ASSERT_EQ(1u, resolver.pending_requests().size()); 1146 ASSERT_EQ(1u, resolver.pending_requests().size());
1142 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1147 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1143 1148
1144 // Fail the first resolve request in MockAsyncProxyResolver. 1149 // Fail the first resolve request in MockAsyncProxyResolver.
1145 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); 1150 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED);
1146 1151
1147 // As the proxy resolver failed the request and is configured for a mandatory 1152 // As the proxy resolver failed the request and is configured for a mandatory
1148 // PAC script, ProxyService must not implicitly fall-back to DIRECT. 1153 // PAC script, ProxyService must not implicitly fall-back to DIRECT.
1149 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, 1154 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED,
1150 callback1.WaitForResult()); 1155 callback1.WaitForResult());
1151 EXPECT_FALSE(info.is_direct()); 1156 EXPECT_FALSE(info.is_direct());
1152 1157
1153 // The second resolve request will try to run through the proxy resolver, 1158 // The second resolve request will try to run through the proxy resolver,
1154 // regardless of whether the first request failed in it. 1159 // regardless of whether the first request failed in it.
1155 TestCompletionCallback callback2; 1160 TestCompletionCallback callback2;
1156 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1161 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
1157 callback2.callback(), nullptr, nullptr, 1162 callback2.callback(), nullptr, nullptr,
1158 BoundNetLog()); 1163 BoundNetLog());
1159 EXPECT_EQ(ERR_IO_PENDING, rv); 1164 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1160 1165
1161 ASSERT_EQ(1u, resolver.pending_requests().size()); 1166 ASSERT_EQ(1u, resolver.pending_requests().size());
1162 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1167 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1163 1168
1164 // This time we will have the resolver succeed (perhaps the PAC script has 1169 // This time we will have the resolver succeed (perhaps the PAC script has
1165 // a dependency on the current time). 1170 // a dependency on the current time).
1166 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); 1171 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080");
1167 resolver.pending_requests()[0]->CompleteNow(OK); 1172 resolver.pending_requests()[0]->CompleteNow(OK);
1168 1173
1169 EXPECT_EQ(OK, callback2.WaitForResult()); 1174 EXPECT_THAT(callback2.WaitForResult(), IsOk());
1170 EXPECT_FALSE(info.is_direct()); 1175 EXPECT_FALSE(info.is_direct());
1171 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI()); 1176 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI());
1172 } 1177 }
1173 1178
1174 TEST_F(ProxyServiceTest, ProxyFallback) { 1179 TEST_F(ProxyServiceTest, ProxyFallback) {
1175 // Test what happens when we specify multiple proxy servers and some of them 1180 // Test what happens when we specify multiple proxy servers and some of them
1176 // are bad. 1181 // are bad.
1177 1182
1178 MockProxyConfigService* config_service = 1183 MockProxyConfigService* config_service =
1179 new MockProxyConfigService("http://foopy/proxy.pac"); 1184 new MockProxyConfigService("http://foopy/proxy.pac");
1180 1185
1181 MockAsyncProxyResolver resolver; 1186 MockAsyncProxyResolver resolver;
1182 MockAsyncProxyResolverFactory* factory = 1187 MockAsyncProxyResolverFactory* factory =
1183 new MockAsyncProxyResolverFactory(false); 1188 new MockAsyncProxyResolverFactory(false);
1184 1189
1185 ProxyService service(base::WrapUnique(config_service), 1190 ProxyService service(base::WrapUnique(config_service),
1186 base::WrapUnique(factory), nullptr); 1191 base::WrapUnique(factory), nullptr);
1187 1192
1188 GURL url("http://www.google.com/"); 1193 GURL url("http://www.google.com/");
1189 1194
1190 // Get the proxy information. 1195 // Get the proxy information.
1191 ProxyInfo info; 1196 ProxyInfo info;
1192 TestCompletionCallback callback1; 1197 TestCompletionCallback callback1;
1193 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1198 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
1194 callback1.callback(), nullptr, nullptr, 1199 callback1.callback(), nullptr, nullptr,
1195 BoundNetLog()); 1200 BoundNetLog());
1196 EXPECT_EQ(ERR_IO_PENDING, rv); 1201 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1197 1202
1198 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1203 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1199 factory->pending_requests()[0]->script_data()->url()); 1204 factory->pending_requests()[0]->script_data()->url());
1200 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1205 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1201 1206
1202 ASSERT_EQ(1u, resolver.pending_requests().size()); 1207 ASSERT_EQ(1u, resolver.pending_requests().size());
1203 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1208 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1204 1209
1205 // Set the result in proxy resolver. 1210 // Set the result in proxy resolver.
1206 resolver.pending_requests()[0]->results()->UseNamedProxy( 1211 resolver.pending_requests()[0]->results()->UseNamedProxy(
1207 "foopy1:8080;foopy2:9090"); 1212 "foopy1:8080;foopy2:9090");
1208 resolver.pending_requests()[0]->CompleteNow(OK); 1213 resolver.pending_requests()[0]->CompleteNow(OK);
1209 1214
1210 // The first item is valid. 1215 // The first item is valid.
1211 EXPECT_EQ(OK, callback1.WaitForResult()); 1216 EXPECT_THAT(callback1.WaitForResult(), IsOk());
1212 EXPECT_FALSE(info.is_direct()); 1217 EXPECT_FALSE(info.is_direct());
1213 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1218 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1214 1219
1215 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 1220 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
1216 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 1221 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
1217 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 1222 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
1218 base::TimeTicks proxy_resolve_start_time = info.proxy_resolve_start_time(); 1223 base::TimeTicks proxy_resolve_start_time = info.proxy_resolve_start_time();
1219 base::TimeTicks proxy_resolve_end_time = info.proxy_resolve_end_time(); 1224 base::TimeTicks proxy_resolve_end_time = info.proxy_resolve_end_time();
1220 1225
1221 // Fake an error on the proxy. 1226 // Fake an error on the proxy.
1222 TestCompletionCallback callback2; 1227 TestCompletionCallback callback2;
1223 rv = service.ReconsiderProxyAfterError( 1228 rv = service.ReconsiderProxyAfterError(
1224 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1229 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
1225 callback2.callback(), nullptr, nullptr, BoundNetLog()); 1230 callback2.callback(), nullptr, nullptr, BoundNetLog());
1226 EXPECT_EQ(OK, rv); 1231 EXPECT_THAT(rv, IsOk());
1227 1232
1228 // Proxy times should not have been modified by fallback. 1233 // Proxy times should not have been modified by fallback.
1229 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time()); 1234 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time());
1230 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time()); 1235 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time());
1231 1236
1232 // The second proxy should be specified. 1237 // The second proxy should be specified.
1233 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 1238 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
1234 // Report back that the second proxy worked. This will globally mark the 1239 // Report back that the second proxy worked. This will globally mark the
1235 // first proxy as bad. 1240 // first proxy as bad.
1236 TestProxyFallbackProxyDelegate test_delegate; 1241 TestProxyFallbackProxyDelegate test_delegate;
1237 service.ReportSuccess(info, &test_delegate); 1242 service.ReportSuccess(info, &test_delegate);
1238 EXPECT_EQ("foopy1:8080", test_delegate.proxy_server().ToURI()); 1243 EXPECT_EQ("foopy1:8080", test_delegate.proxy_server().ToURI());
1239 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, 1244 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED,
1240 test_delegate.proxy_fallback_net_error()); 1245 test_delegate.proxy_fallback_net_error());
1241 1246
1242 TestCompletionCallback callback3; 1247 TestCompletionCallback callback3;
1243 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1248 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
1244 callback3.callback(), nullptr, nullptr, 1249 callback3.callback(), nullptr, nullptr,
1245 BoundNetLog()); 1250 BoundNetLog());
1246 EXPECT_EQ(ERR_IO_PENDING, rv); 1251 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1247 1252
1248 ASSERT_EQ(1u, resolver.pending_requests().size()); 1253 ASSERT_EQ(1u, resolver.pending_requests().size());
1249 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1254 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1250 1255
1251 // Set the result in proxy resolver -- the second result is already known 1256 // Set the result in proxy resolver -- the second result is already known
1252 // to be bad, so we will not try to use it initially. 1257 // to be bad, so we will not try to use it initially.
1253 resolver.pending_requests()[0]->results()->UseNamedProxy( 1258 resolver.pending_requests()[0]->results()->UseNamedProxy(
1254 "foopy3:7070;foopy1:8080;foopy2:9090"); 1259 "foopy3:7070;foopy1:8080;foopy2:9090");
1255 resolver.pending_requests()[0]->CompleteNow(OK); 1260 resolver.pending_requests()[0]->CompleteNow(OK);
1256 1261
1257 EXPECT_EQ(OK, callback3.WaitForResult()); 1262 EXPECT_THAT(callback3.WaitForResult(), IsOk());
1258 EXPECT_FALSE(info.is_direct()); 1263 EXPECT_FALSE(info.is_direct());
1259 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI()); 1264 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI());
1260 1265
1261 // Proxy times should have been updated, so get them again. 1266 // Proxy times should have been updated, so get them again.
1262 EXPECT_LE(proxy_resolve_end_time, info.proxy_resolve_start_time()); 1267 EXPECT_LE(proxy_resolve_end_time, info.proxy_resolve_start_time());
1263 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 1268 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
1264 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 1269 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
1265 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 1270 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
1266 proxy_resolve_start_time = info.proxy_resolve_start_time(); 1271 proxy_resolve_start_time = info.proxy_resolve_start_time();
1267 proxy_resolve_end_time = info.proxy_resolve_end_time(); 1272 proxy_resolve_end_time = info.proxy_resolve_end_time();
1268 1273
1269 // We fake another error. It should now try the third one. 1274 // We fake another error. It should now try the third one.
1270 TestCompletionCallback callback4; 1275 TestCompletionCallback callback4;
1271 rv = service.ReconsiderProxyAfterError( 1276 rv = service.ReconsiderProxyAfterError(
1272 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1277 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
1273 callback4.callback(), nullptr, nullptr, BoundNetLog()); 1278 callback4.callback(), nullptr, nullptr, BoundNetLog());
1274 EXPECT_EQ(OK, rv); 1279 EXPECT_THAT(rv, IsOk());
1275 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 1280 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
1276 1281
1277 // We fake another error. At this point we have tried all of the 1282 // We fake another error. At this point we have tried all of the
1278 // proxy servers we thought were valid; next we try the proxy server 1283 // proxy servers we thought were valid; next we try the proxy server
1279 // that was in our bad proxies map (foopy1:8080). 1284 // that was in our bad proxies map (foopy1:8080).
1280 TestCompletionCallback callback5; 1285 TestCompletionCallback callback5;
1281 rv = service.ReconsiderProxyAfterError( 1286 rv = service.ReconsiderProxyAfterError(
1282 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1287 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
1283 callback5.callback(), nullptr, nullptr, BoundNetLog()); 1288 callback5.callback(), nullptr, nullptr, BoundNetLog());
1284 EXPECT_EQ(OK, rv); 1289 EXPECT_THAT(rv, IsOk());
1285 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1290 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1286 1291
1287 // Fake another error, the last proxy is gone, the list should now be empty, 1292 // Fake another error, the last proxy is gone, the list should now be empty,
1288 // so there is nothing left to try. 1293 // so there is nothing left to try.
1289 TestCompletionCallback callback6; 1294 TestCompletionCallback callback6;
1290 rv = service.ReconsiderProxyAfterError( 1295 rv = service.ReconsiderProxyAfterError(
1291 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1296 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
1292 callback6.callback(), nullptr, nullptr, BoundNetLog()); 1297 callback6.callback(), nullptr, nullptr, BoundNetLog());
1293 EXPECT_EQ(ERR_FAILED, rv); 1298 EXPECT_THAT(rv, IsError(ERR_FAILED));
1294 EXPECT_FALSE(info.is_direct()); 1299 EXPECT_FALSE(info.is_direct());
1295 EXPECT_TRUE(info.is_empty()); 1300 EXPECT_TRUE(info.is_empty());
1296 1301
1297 // Proxy times should not have been modified by fallback. 1302 // Proxy times should not have been modified by fallback.
1298 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time()); 1303 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time());
1299 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time()); 1304 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time());
1300 1305
1301 // Look up proxies again 1306 // Look up proxies again
1302 TestCompletionCallback callback7; 1307 TestCompletionCallback callback7;
1303 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1308 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
1304 callback7.callback(), nullptr, nullptr, 1309 callback7.callback(), nullptr, nullptr,
1305 BoundNetLog()); 1310 BoundNetLog());
1306 EXPECT_EQ(ERR_IO_PENDING, rv); 1311 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1307 1312
1308 ASSERT_EQ(1u, resolver.pending_requests().size()); 1313 ASSERT_EQ(1u, resolver.pending_requests().size());
1309 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1314 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1310 1315
1311 // This time, the first 3 results have been found to be bad, but only the 1316 // This time, the first 3 results have been found to be bad, but only the
1312 // first proxy has been confirmed ... 1317 // first proxy has been confirmed ...
1313 resolver.pending_requests()[0]->results()->UseNamedProxy( 1318 resolver.pending_requests()[0]->results()->UseNamedProxy(
1314 "foopy1:8080;foopy3:7070;foopy2:9090;foopy4:9091"); 1319 "foopy1:8080;foopy3:7070;foopy2:9090;foopy4:9091");
1315 resolver.pending_requests()[0]->CompleteNow(OK); 1320 resolver.pending_requests()[0]->CompleteNow(OK);
1316 1321
1317 // ... therefore, we should see the second proxy first. 1322 // ... therefore, we should see the second proxy first.
1318 EXPECT_EQ(OK, callback7.WaitForResult()); 1323 EXPECT_THAT(callback7.WaitForResult(), IsOk());
1319 EXPECT_FALSE(info.is_direct()); 1324 EXPECT_FALSE(info.is_direct());
1320 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI()); 1325 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI());
1321 1326
1322 EXPECT_LE(proxy_resolve_end_time, info.proxy_resolve_start_time()); 1327 EXPECT_LE(proxy_resolve_end_time, info.proxy_resolve_start_time());
1323 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 1328 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
1324 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 1329 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
1325 // TODO(nsylvain): Test that the proxy can be retried after the delay. 1330 // TODO(nsylvain): Test that the proxy can be retried after the delay.
1326 } 1331 }
1327 1332
1328 // This test is similar to ProxyFallback, but this time we have an explicit 1333 // This test is similar to ProxyFallback, but this time we have an explicit
(...skipping 10 matching lines...) Expand all
1339 base::WrapUnique(factory), nullptr); 1344 base::WrapUnique(factory), nullptr);
1340 1345
1341 GURL url("http://www.google.com/"); 1346 GURL url("http://www.google.com/");
1342 1347
1343 // Get the proxy information. 1348 // Get the proxy information.
1344 ProxyInfo info; 1349 ProxyInfo info;
1345 TestCompletionCallback callback1; 1350 TestCompletionCallback callback1;
1346 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1351 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
1347 callback1.callback(), nullptr, nullptr, 1352 callback1.callback(), nullptr, nullptr,
1348 BoundNetLog()); 1353 BoundNetLog());
1349 EXPECT_EQ(ERR_IO_PENDING, rv); 1354 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1350 1355
1351 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1356 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1352 factory->pending_requests()[0]->script_data()->url()); 1357 factory->pending_requests()[0]->script_data()->url());
1353 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1358 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1354 1359
1355 ASSERT_EQ(1u, resolver.pending_requests().size()); 1360 ASSERT_EQ(1u, resolver.pending_requests().size());
1356 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1361 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1357 1362
1358 // Set the result in proxy resolver. 1363 // Set the result in proxy resolver.
1359 resolver.pending_requests()[0]->results()->UsePacString( 1364 resolver.pending_requests()[0]->results()->UsePacString(
1360 "PROXY foopy1:8080; PROXY foopy2:9090; DIRECT"); 1365 "PROXY foopy1:8080; PROXY foopy2:9090; DIRECT");
1361 resolver.pending_requests()[0]->CompleteNow(OK); 1366 resolver.pending_requests()[0]->CompleteNow(OK);
1362 1367
1363 // Get the first result. 1368 // Get the first result.
1364 EXPECT_EQ(OK, callback1.WaitForResult()); 1369 EXPECT_THAT(callback1.WaitForResult(), IsOk());
1365 EXPECT_FALSE(info.is_direct()); 1370 EXPECT_FALSE(info.is_direct());
1366 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1371 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1367 1372
1368 // Fake an error on the proxy. 1373 // Fake an error on the proxy.
1369 TestCompletionCallback callback2; 1374 TestCompletionCallback callback2;
1370 rv = service.ReconsiderProxyAfterError( 1375 rv = service.ReconsiderProxyAfterError(
1371 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1376 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
1372 callback2.callback(), nullptr, nullptr, BoundNetLog()); 1377 callback2.callback(), nullptr, nullptr, BoundNetLog());
1373 EXPECT_EQ(OK, rv); 1378 EXPECT_THAT(rv, IsOk());
1374 1379
1375 // Now we get back the second proxy. 1380 // Now we get back the second proxy.
1376 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 1381 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
1377 1382
1378 // Fake an error on this proxy as well. 1383 // Fake an error on this proxy as well.
1379 TestCompletionCallback callback3; 1384 TestCompletionCallback callback3;
1380 rv = service.ReconsiderProxyAfterError( 1385 rv = service.ReconsiderProxyAfterError(
1381 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1386 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
1382 callback3.callback(), nullptr, nullptr, BoundNetLog()); 1387 callback3.callback(), nullptr, nullptr, BoundNetLog());
1383 EXPECT_EQ(OK, rv); 1388 EXPECT_THAT(rv, IsOk());
1384 1389
1385 // Finally, we get back DIRECT. 1390 // Finally, we get back DIRECT.
1386 EXPECT_TRUE(info.is_direct()); 1391 EXPECT_TRUE(info.is_direct());
1387 1392
1388 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 1393 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
1389 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 1394 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
1390 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 1395 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
1391 1396
1392 // Now we tell the proxy service that even DIRECT failed. 1397 // Now we tell the proxy service that even DIRECT failed.
1393 TestCompletionCallback callback4; 1398 TestCompletionCallback callback4;
1394 rv = service.ReconsiderProxyAfterError( 1399 rv = service.ReconsiderProxyAfterError(
1395 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1400 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
1396 callback4.callback(), nullptr, nullptr, BoundNetLog()); 1401 callback4.callback(), nullptr, nullptr, BoundNetLog());
1397 // There was nothing left to try after DIRECT, so we are out of 1402 // There was nothing left to try after DIRECT, so we are out of
1398 // choices. 1403 // choices.
1399 EXPECT_EQ(ERR_FAILED, rv); 1404 EXPECT_THAT(rv, IsError(ERR_FAILED));
1400 } 1405 }
1401 1406
1402 TEST_F(ProxyServiceTest, ProxyFallback_NewSettings) { 1407 TEST_F(ProxyServiceTest, ProxyFallback_NewSettings) {
1403 // Test proxy failover when new settings are available. 1408 // Test proxy failover when new settings are available.
1404 1409
1405 MockProxyConfigService* config_service = 1410 MockProxyConfigService* config_service =
1406 new MockProxyConfigService("http://foopy/proxy.pac"); 1411 new MockProxyConfigService("http://foopy/proxy.pac");
1407 1412
1408 MockAsyncProxyResolver resolver; 1413 MockAsyncProxyResolver resolver;
1409 MockAsyncProxyResolverFactory* factory = 1414 MockAsyncProxyResolverFactory* factory =
1410 new MockAsyncProxyResolverFactory(false); 1415 new MockAsyncProxyResolverFactory(false);
1411 1416
1412 ProxyService service(base::WrapUnique(config_service), 1417 ProxyService service(base::WrapUnique(config_service),
1413 base::WrapUnique(factory), nullptr); 1418 base::WrapUnique(factory), nullptr);
1414 1419
1415 GURL url("http://www.google.com/"); 1420 GURL url("http://www.google.com/");
1416 1421
1417 // Get the proxy information. 1422 // Get the proxy information.
1418 ProxyInfo info; 1423 ProxyInfo info;
1419 TestCompletionCallback callback1; 1424 TestCompletionCallback callback1;
1420 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1425 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
1421 callback1.callback(), nullptr, nullptr, 1426 callback1.callback(), nullptr, nullptr,
1422 BoundNetLog()); 1427 BoundNetLog());
1423 EXPECT_EQ(ERR_IO_PENDING, rv); 1428 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1424 1429
1425 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1430 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1426 factory->pending_requests()[0]->script_data()->url()); 1431 factory->pending_requests()[0]->script_data()->url());
1427 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1432 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1428 1433
1429 ASSERT_EQ(1u, resolver.pending_requests().size()); 1434 ASSERT_EQ(1u, resolver.pending_requests().size());
1430 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1435 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1431 1436
1432 // Set the result in proxy resolver. 1437 // Set the result in proxy resolver.
1433 resolver.pending_requests()[0]->results()->UseNamedProxy( 1438 resolver.pending_requests()[0]->results()->UseNamedProxy(
1434 "foopy1:8080;foopy2:9090"); 1439 "foopy1:8080;foopy2:9090");
1435 resolver.pending_requests()[0]->CompleteNow(OK); 1440 resolver.pending_requests()[0]->CompleteNow(OK);
1436 1441
1437 // The first item is valid. 1442 // The first item is valid.
1438 EXPECT_EQ(OK, callback1.WaitForResult()); 1443 EXPECT_THAT(callback1.WaitForResult(), IsOk());
1439 EXPECT_FALSE(info.is_direct()); 1444 EXPECT_FALSE(info.is_direct());
1440 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1445 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1441 1446
1442 // Fake an error on the proxy, and also a new configuration on the proxy. 1447 // Fake an error on the proxy, and also a new configuration on the proxy.
1443 config_service->SetConfig( 1448 config_service->SetConfig(
1444 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy-new/proxy.pac"))); 1449 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy-new/proxy.pac")));
1445 1450
1446 TestCompletionCallback callback2; 1451 TestCompletionCallback callback2;
1447 rv = service.ReconsiderProxyAfterError( 1452 rv = service.ReconsiderProxyAfterError(
1448 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1453 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
1449 callback2.callback(), nullptr, nullptr, BoundNetLog()); 1454 callback2.callback(), nullptr, nullptr, BoundNetLog());
1450 EXPECT_EQ(ERR_IO_PENDING, rv); 1455 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1451 1456
1452 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"), 1457 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"),
1453 factory->pending_requests()[0]->script_data()->url()); 1458 factory->pending_requests()[0]->script_data()->url());
1454 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1459 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1455 1460
1456 ASSERT_EQ(1u, resolver.pending_requests().size()); 1461 ASSERT_EQ(1u, resolver.pending_requests().size());
1457 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1462 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1458 1463
1459 resolver.pending_requests()[0]->results()->UseNamedProxy( 1464 resolver.pending_requests()[0]->results()->UseNamedProxy(
1460 "foopy1:8080;foopy2:9090"); 1465 "foopy1:8080;foopy2:9090");
1461 resolver.pending_requests()[0]->CompleteNow(OK); 1466 resolver.pending_requests()[0]->CompleteNow(OK);
1462 1467
1463 // The first proxy is still there since the configuration changed. 1468 // The first proxy is still there since the configuration changed.
1464 EXPECT_EQ(OK, callback2.WaitForResult()); 1469 EXPECT_THAT(callback2.WaitForResult(), IsOk());
1465 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1470 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1466 1471
1467 // We fake another error. It should now ignore the first one. 1472 // We fake another error. It should now ignore the first one.
1468 TestCompletionCallback callback3; 1473 TestCompletionCallback callback3;
1469 rv = service.ReconsiderProxyAfterError( 1474 rv = service.ReconsiderProxyAfterError(
1470 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1475 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
1471 callback3.callback(), nullptr, nullptr, BoundNetLog()); 1476 callback3.callback(), nullptr, nullptr, BoundNetLog());
1472 EXPECT_EQ(OK, rv); 1477 EXPECT_THAT(rv, IsOk());
1473 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 1478 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
1474 1479
1475 // We simulate a new configuration. 1480 // We simulate a new configuration.
1476 config_service->SetConfig( 1481 config_service->SetConfig(
1477 ProxyConfig::CreateFromCustomPacURL( 1482 ProxyConfig::CreateFromCustomPacURL(
1478 GURL("http://foopy-new2/proxy.pac"))); 1483 GURL("http://foopy-new2/proxy.pac")));
1479 1484
1480 // We fake another error. It should go back to the first proxy. 1485 // We fake another error. It should go back to the first proxy.
1481 TestCompletionCallback callback4; 1486 TestCompletionCallback callback4;
1482 rv = service.ReconsiderProxyAfterError( 1487 rv = service.ReconsiderProxyAfterError(
1483 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1488 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
1484 callback4.callback(), nullptr, nullptr, BoundNetLog()); 1489 callback4.callback(), nullptr, nullptr, BoundNetLog());
1485 EXPECT_EQ(ERR_IO_PENDING, rv); 1490 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1486 1491
1487 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"), 1492 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"),
1488 factory->pending_requests()[0]->script_data()->url()); 1493 factory->pending_requests()[0]->script_data()->url());
1489 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1494 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1490 1495
1491 ASSERT_EQ(1u, resolver.pending_requests().size()); 1496 ASSERT_EQ(1u, resolver.pending_requests().size());
1492 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1497 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1493 1498
1494 resolver.pending_requests()[0]->results()->UseNamedProxy( 1499 resolver.pending_requests()[0]->results()->UseNamedProxy(
1495 "foopy1:8080;foopy2:9090"); 1500 "foopy1:8080;foopy2:9090");
1496 resolver.pending_requests()[0]->CompleteNow(OK); 1501 resolver.pending_requests()[0]->CompleteNow(OK);
1497 1502
1498 EXPECT_EQ(OK, callback4.WaitForResult()); 1503 EXPECT_THAT(callback4.WaitForResult(), IsOk());
1499 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1504 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1500 1505
1501 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 1506 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
1502 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 1507 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
1503 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 1508 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
1504 } 1509 }
1505 1510
1506 TEST_F(ProxyServiceTest, ProxyFallback_BadConfig) { 1511 TEST_F(ProxyServiceTest, ProxyFallback_BadConfig) {
1507 // Test proxy failover when the configuration is bad. 1512 // Test proxy failover when the configuration is bad.
1508 1513
1509 MockProxyConfigService* config_service = 1514 MockProxyConfigService* config_service =
1510 new MockProxyConfigService("http://foopy/proxy.pac"); 1515 new MockProxyConfigService("http://foopy/proxy.pac");
1511 1516
1512 MockAsyncProxyResolver resolver; 1517 MockAsyncProxyResolver resolver;
1513 MockAsyncProxyResolverFactory* factory = 1518 MockAsyncProxyResolverFactory* factory =
1514 new MockAsyncProxyResolverFactory(false); 1519 new MockAsyncProxyResolverFactory(false);
1515 1520
1516 ProxyService service(base::WrapUnique(config_service), 1521 ProxyService service(base::WrapUnique(config_service),
1517 base::WrapUnique(factory), nullptr); 1522 base::WrapUnique(factory), nullptr);
1518 1523
1519 GURL url("http://www.google.com/"); 1524 GURL url("http://www.google.com/");
1520 1525
1521 // Get the proxy information. 1526 // Get the proxy information.
1522 ProxyInfo info; 1527 ProxyInfo info;
1523 TestCompletionCallback callback1; 1528 TestCompletionCallback callback1;
1524 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1529 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
1525 callback1.callback(), nullptr, nullptr, 1530 callback1.callback(), nullptr, nullptr,
1526 BoundNetLog()); 1531 BoundNetLog());
1527 EXPECT_EQ(ERR_IO_PENDING, rv); 1532 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1528 1533
1529 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1534 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1530 factory->pending_requests()[0]->script_data()->url()); 1535 factory->pending_requests()[0]->script_data()->url());
1531 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1536 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1532 ASSERT_EQ(1u, resolver.pending_requests().size()); 1537 ASSERT_EQ(1u, resolver.pending_requests().size());
1533 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1538 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1534 1539
1535 resolver.pending_requests()[0]->results()->UseNamedProxy( 1540 resolver.pending_requests()[0]->results()->UseNamedProxy(
1536 "foopy1:8080;foopy2:9090"); 1541 "foopy1:8080;foopy2:9090");
1537 resolver.pending_requests()[0]->CompleteNow(OK); 1542 resolver.pending_requests()[0]->CompleteNow(OK);
1538 1543
1539 // The first item is valid. 1544 // The first item is valid.
1540 EXPECT_EQ(OK, callback1.WaitForResult()); 1545 EXPECT_THAT(callback1.WaitForResult(), IsOk());
1541 EXPECT_FALSE(info.is_direct()); 1546 EXPECT_FALSE(info.is_direct());
1542 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1547 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1543 1548
1544 // Fake a proxy error. 1549 // Fake a proxy error.
1545 TestCompletionCallback callback2; 1550 TestCompletionCallback callback2;
1546 rv = service.ReconsiderProxyAfterError( 1551 rv = service.ReconsiderProxyAfterError(
1547 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1552 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
1548 callback2.callback(), nullptr, nullptr, BoundNetLog()); 1553 callback2.callback(), nullptr, nullptr, BoundNetLog());
1549 EXPECT_EQ(OK, rv); 1554 EXPECT_THAT(rv, IsOk());
1550 1555
1551 // The first proxy is ignored, and the second one is selected. 1556 // The first proxy is ignored, and the second one is selected.
1552 EXPECT_FALSE(info.is_direct()); 1557 EXPECT_FALSE(info.is_direct());
1553 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 1558 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
1554 1559
1555 // Fake a PAC failure. 1560 // Fake a PAC failure.
1556 ProxyInfo info2; 1561 ProxyInfo info2;
1557 TestCompletionCallback callback3; 1562 TestCompletionCallback callback3;
1558 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info2, 1563 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info2,
1559 callback3.callback(), nullptr, nullptr, 1564 callback3.callback(), nullptr, nullptr,
1560 BoundNetLog()); 1565 BoundNetLog());
1561 EXPECT_EQ(ERR_IO_PENDING, rv); 1566 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1562 1567
1563 ASSERT_EQ(1u, resolver.pending_requests().size()); 1568 ASSERT_EQ(1u, resolver.pending_requests().size());
1564 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1569 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1565 1570
1566 // This simulates a javascript runtime error in the PAC script. 1571 // This simulates a javascript runtime error in the PAC script.
1567 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); 1572 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED);
1568 1573
1569 // Although the resolver failed, the ProxyService will implicitly fall-back 1574 // Although the resolver failed, the ProxyService will implicitly fall-back
1570 // to a DIRECT connection. 1575 // to a DIRECT connection.
1571 EXPECT_EQ(OK, callback3.WaitForResult()); 1576 EXPECT_THAT(callback3.WaitForResult(), IsOk());
1572 EXPECT_TRUE(info2.is_direct()); 1577 EXPECT_TRUE(info2.is_direct());
1573 EXPECT_FALSE(info2.is_empty()); 1578 EXPECT_FALSE(info2.is_empty());
1574 1579
1575 // The PAC script will work properly next time and successfully return a 1580 // The PAC script will work properly next time and successfully return a
1576 // proxy list. Since we have not marked the configuration as bad, it should 1581 // proxy list. Since we have not marked the configuration as bad, it should
1577 // "just work" the next time we call it. 1582 // "just work" the next time we call it.
1578 ProxyInfo info3; 1583 ProxyInfo info3;
1579 TestCompletionCallback callback4; 1584 TestCompletionCallback callback4;
1580 rv = service.ReconsiderProxyAfterError( 1585 rv = service.ReconsiderProxyAfterError(
1581 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info3, 1586 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info3,
1582 callback4.callback(), nullptr, nullptr, BoundNetLog()); 1587 callback4.callback(), nullptr, nullptr, BoundNetLog());
1583 EXPECT_EQ(ERR_IO_PENDING, rv); 1588 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1584 1589
1585 ASSERT_EQ(1u, resolver.pending_requests().size()); 1590 ASSERT_EQ(1u, resolver.pending_requests().size());
1586 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1591 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1587 1592
1588 resolver.pending_requests()[0]->results()->UseNamedProxy( 1593 resolver.pending_requests()[0]->results()->UseNamedProxy(
1589 "foopy1:8080;foopy2:9090"); 1594 "foopy1:8080;foopy2:9090");
1590 resolver.pending_requests()[0]->CompleteNow(OK); 1595 resolver.pending_requests()[0]->CompleteNow(OK);
1591 1596
1592 // The first proxy is not there since the it was added to the bad proxies 1597 // The first proxy is not there since the it was added to the bad proxies
1593 // list by the earlier ReconsiderProxyAfterError(). 1598 // list by the earlier ReconsiderProxyAfterError().
1594 EXPECT_EQ(OK, callback4.WaitForResult()); 1599 EXPECT_THAT(callback4.WaitForResult(), IsOk());
1595 EXPECT_FALSE(info3.is_direct()); 1600 EXPECT_FALSE(info3.is_direct());
1596 EXPECT_EQ("foopy1:8080", info3.proxy_server().ToURI()); 1601 EXPECT_EQ("foopy1:8080", info3.proxy_server().ToURI());
1597 1602
1598 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 1603 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
1599 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 1604 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
1600 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 1605 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
1601 } 1606 }
1602 1607
1603 TEST_F(ProxyServiceTest, ProxyFallback_BadConfigMandatory) { 1608 TEST_F(ProxyServiceTest, ProxyFallback_BadConfigMandatory) {
1604 // Test proxy failover when the configuration is bad. 1609 // Test proxy failover when the configuration is bad.
(...skipping 12 matching lines...) Expand all
1617 base::WrapUnique(factory), nullptr); 1622 base::WrapUnique(factory), nullptr);
1618 1623
1619 GURL url("http://www.google.com/"); 1624 GURL url("http://www.google.com/");
1620 1625
1621 // Get the proxy information. 1626 // Get the proxy information.
1622 ProxyInfo info; 1627 ProxyInfo info;
1623 TestCompletionCallback callback1; 1628 TestCompletionCallback callback1;
1624 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1629 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
1625 callback1.callback(), nullptr, nullptr, 1630 callback1.callback(), nullptr, nullptr,
1626 BoundNetLog()); 1631 BoundNetLog());
1627 EXPECT_EQ(ERR_IO_PENDING, rv); 1632 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1628 1633
1629 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1634 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1630 factory->pending_requests()[0]->script_data()->url()); 1635 factory->pending_requests()[0]->script_data()->url());
1631 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1636 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1632 ASSERT_EQ(1u, resolver.pending_requests().size()); 1637 ASSERT_EQ(1u, resolver.pending_requests().size());
1633 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1638 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1634 1639
1635 resolver.pending_requests()[0]->results()->UseNamedProxy( 1640 resolver.pending_requests()[0]->results()->UseNamedProxy(
1636 "foopy1:8080;foopy2:9090"); 1641 "foopy1:8080;foopy2:9090");
1637 resolver.pending_requests()[0]->CompleteNow(OK); 1642 resolver.pending_requests()[0]->CompleteNow(OK);
1638 1643
1639 // The first item is valid. 1644 // The first item is valid.
1640 EXPECT_EQ(OK, callback1.WaitForResult()); 1645 EXPECT_THAT(callback1.WaitForResult(), IsOk());
1641 EXPECT_FALSE(info.is_direct()); 1646 EXPECT_FALSE(info.is_direct());
1642 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1647 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1643 1648
1644 // Fake a proxy error. 1649 // Fake a proxy error.
1645 TestCompletionCallback callback2; 1650 TestCompletionCallback callback2;
1646 rv = service.ReconsiderProxyAfterError( 1651 rv = service.ReconsiderProxyAfterError(
1647 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1652 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
1648 callback2.callback(), nullptr, nullptr, BoundNetLog()); 1653 callback2.callback(), nullptr, nullptr, BoundNetLog());
1649 EXPECT_EQ(OK, rv); 1654 EXPECT_THAT(rv, IsOk());
1650 1655
1651 // The first proxy is ignored, and the second one is selected. 1656 // The first proxy is ignored, and the second one is selected.
1652 EXPECT_FALSE(info.is_direct()); 1657 EXPECT_FALSE(info.is_direct());
1653 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 1658 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
1654 1659
1655 // Fake a PAC failure. 1660 // Fake a PAC failure.
1656 ProxyInfo info2; 1661 ProxyInfo info2;
1657 TestCompletionCallback callback3; 1662 TestCompletionCallback callback3;
1658 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info2, 1663 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info2,
1659 callback3.callback(), nullptr, nullptr, 1664 callback3.callback(), nullptr, nullptr,
1660 BoundNetLog()); 1665 BoundNetLog());
1661 EXPECT_EQ(ERR_IO_PENDING, rv); 1666 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1662 1667
1663 ASSERT_EQ(1u, resolver.pending_requests().size()); 1668 ASSERT_EQ(1u, resolver.pending_requests().size());
1664 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1669 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1665 1670
1666 // This simulates a javascript runtime error in the PAC script. 1671 // This simulates a javascript runtime error in the PAC script.
1667 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); 1672 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED);
1668 1673
1669 // Although the resolver failed, the ProxyService will NOT fall-back 1674 // Although the resolver failed, the ProxyService will NOT fall-back
1670 // to a DIRECT connection as it is configured as mandatory. 1675 // to a DIRECT connection as it is configured as mandatory.
1671 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, 1676 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED,
1672 callback3.WaitForResult()); 1677 callback3.WaitForResult());
1673 EXPECT_FALSE(info2.is_direct()); 1678 EXPECT_FALSE(info2.is_direct());
1674 EXPECT_TRUE(info2.is_empty()); 1679 EXPECT_TRUE(info2.is_empty());
1675 1680
1676 // The PAC script will work properly next time and successfully return a 1681 // The PAC script will work properly next time and successfully return a
1677 // proxy list. Since we have not marked the configuration as bad, it should 1682 // proxy list. Since we have not marked the configuration as bad, it should
1678 // "just work" the next time we call it. 1683 // "just work" the next time we call it.
1679 ProxyInfo info3; 1684 ProxyInfo info3;
1680 TestCompletionCallback callback4; 1685 TestCompletionCallback callback4;
1681 rv = service.ReconsiderProxyAfterError( 1686 rv = service.ReconsiderProxyAfterError(
1682 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info3, 1687 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info3,
1683 callback4.callback(), nullptr, nullptr, BoundNetLog()); 1688 callback4.callback(), nullptr, nullptr, BoundNetLog());
1684 EXPECT_EQ(ERR_IO_PENDING, rv); 1689 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1685 1690
1686 ASSERT_EQ(1u, resolver.pending_requests().size()); 1691 ASSERT_EQ(1u, resolver.pending_requests().size());
1687 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1692 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1688 1693
1689 resolver.pending_requests()[0]->results()->UseNamedProxy( 1694 resolver.pending_requests()[0]->results()->UseNamedProxy(
1690 "foopy1:8080;foopy2:9090"); 1695 "foopy1:8080;foopy2:9090");
1691 resolver.pending_requests()[0]->CompleteNow(OK); 1696 resolver.pending_requests()[0]->CompleteNow(OK);
1692 1697
1693 // The first proxy is not there since the it was added to the bad proxies 1698 // The first proxy is not there since the it was added to the bad proxies
1694 // list by the earlier ReconsiderProxyAfterError(). 1699 // list by the earlier ReconsiderProxyAfterError().
1695 EXPECT_EQ(OK, callback4.WaitForResult()); 1700 EXPECT_THAT(callback4.WaitForResult(), IsOk());
1696 EXPECT_FALSE(info3.is_direct()); 1701 EXPECT_FALSE(info3.is_direct());
1697 EXPECT_EQ("foopy1:8080", info3.proxy_server().ToURI()); 1702 EXPECT_EQ("foopy1:8080", info3.proxy_server().ToURI());
1698 } 1703 }
1699 1704
1700 TEST_F(ProxyServiceTest, ProxyBypassList) { 1705 TEST_F(ProxyServiceTest, ProxyBypassList) {
1701 // Test that the proxy bypass rules are consulted. 1706 // Test that the proxy bypass rules are consulted.
1702 1707
1703 TestCompletionCallback callback[2]; 1708 TestCompletionCallback callback[2];
1704 ProxyInfo info[2]; 1709 ProxyInfo info[2];
1705 ProxyConfig config; 1710 ProxyConfig config;
1706 config.proxy_rules().ParseFromString("foopy1:8080;foopy2:9090"); 1711 config.proxy_rules().ParseFromString("foopy1:8080;foopy2:9090");
1707 config.set_auto_detect(false); 1712 config.set_auto_detect(false);
1708 config.proxy_rules().bypass_rules.ParseFromString("*.org"); 1713 config.proxy_rules().bypass_rules.ParseFromString("*.org");
1709 1714
1710 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1715 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1711 nullptr, nullptr); 1716 nullptr, nullptr);
1712 1717
1713 int rv; 1718 int rv;
1714 GURL url1("http://www.webkit.org"); 1719 GURL url1("http://www.webkit.org");
1715 GURL url2("http://www.webkit.com"); 1720 GURL url2("http://www.webkit.com");
1716 1721
1717 // Request for a .org domain should bypass proxy. 1722 // Request for a .org domain should bypass proxy.
1718 rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info[0], 1723 rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info[0],
1719 callback[0].callback(), nullptr, nullptr, 1724 callback[0].callback(), nullptr, nullptr,
1720 BoundNetLog()); 1725 BoundNetLog());
1721 EXPECT_EQ(OK, rv); 1726 EXPECT_THAT(rv, IsOk());
1722 EXPECT_TRUE(info[0].is_direct()); 1727 EXPECT_TRUE(info[0].is_direct());
1723 1728
1724 // Request for a .com domain hits the proxy. 1729 // Request for a .com domain hits the proxy.
1725 rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info[1], 1730 rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info[1],
1726 callback[1].callback(), nullptr, nullptr, 1731 callback[1].callback(), nullptr, nullptr,
1727 BoundNetLog()); 1732 BoundNetLog());
1728 EXPECT_EQ(OK, rv); 1733 EXPECT_THAT(rv, IsOk());
1729 EXPECT_EQ("foopy1:8080", info[1].proxy_server().ToURI()); 1734 EXPECT_EQ("foopy1:8080", info[1].proxy_server().ToURI());
1730 } 1735 }
1731 1736
1732 TEST_F(ProxyServiceTest, MarkProxiesAsBadTests) { 1737 TEST_F(ProxyServiceTest, MarkProxiesAsBadTests) {
1733 ProxyConfig config; 1738 ProxyConfig config;
1734 config.proxy_rules().ParseFromString( 1739 config.proxy_rules().ParseFromString(
1735 "http=foopy1:8080;http=foopy2:8080;http=foopy3.8080;http=foopy4:8080"); 1740 "http=foopy1:8080;http=foopy2:8080;http=foopy3.8080;http=foopy4:8080");
1736 config.set_auto_detect(false); 1741 config.set_auto_detect(false);
1737 1742
1738 ProxyList proxy_list; 1743 ProxyList proxy_list;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1770 config.set_auto_detect(false); 1775 config.set_auto_detect(false);
1771 { 1776 {
1772 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1777 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1773 nullptr, nullptr); 1778 nullptr, nullptr);
1774 GURL test_url("http://www.msn.com"); 1779 GURL test_url("http://www.msn.com");
1775 ProxyInfo info; 1780 ProxyInfo info;
1776 TestCompletionCallback callback; 1781 TestCompletionCallback callback;
1777 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1782 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info,
1778 callback.callback(), nullptr, nullptr, 1783 callback.callback(), nullptr, nullptr,
1779 BoundNetLog()); 1784 BoundNetLog());
1780 EXPECT_EQ(OK, rv); 1785 EXPECT_THAT(rv, IsOk());
1781 EXPECT_FALSE(info.is_direct()); 1786 EXPECT_FALSE(info.is_direct());
1782 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1787 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1783 } 1788 }
1784 { 1789 {
1785 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1790 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1786 nullptr, nullptr); 1791 nullptr, nullptr);
1787 GURL test_url("ftp://ftp.google.com"); 1792 GURL test_url("ftp://ftp.google.com");
1788 ProxyInfo info; 1793 ProxyInfo info;
1789 TestCompletionCallback callback; 1794 TestCompletionCallback callback;
1790 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1795 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info,
1791 callback.callback(), nullptr, nullptr, 1796 callback.callback(), nullptr, nullptr,
1792 BoundNetLog()); 1797 BoundNetLog());
1793 EXPECT_EQ(OK, rv); 1798 EXPECT_THAT(rv, IsOk());
1794 EXPECT_TRUE(info.is_direct()); 1799 EXPECT_TRUE(info.is_direct());
1795 EXPECT_EQ("direct://", info.proxy_server().ToURI()); 1800 EXPECT_EQ("direct://", info.proxy_server().ToURI());
1796 } 1801 }
1797 { 1802 {
1798 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1803 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1799 nullptr, nullptr); 1804 nullptr, nullptr);
1800 GURL test_url("https://webbranch.techcu.com"); 1805 GURL test_url("https://webbranch.techcu.com");
1801 ProxyInfo info; 1806 ProxyInfo info;
1802 TestCompletionCallback callback; 1807 TestCompletionCallback callback;
1803 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1808 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info,
1804 callback.callback(), nullptr, nullptr, 1809 callback.callback(), nullptr, nullptr,
1805 BoundNetLog()); 1810 BoundNetLog());
1806 EXPECT_EQ(OK, rv); 1811 EXPECT_THAT(rv, IsOk());
1807 EXPECT_FALSE(info.is_direct()); 1812 EXPECT_FALSE(info.is_direct());
1808 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); 1813 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI());
1809 } 1814 }
1810 { 1815 {
1811 config.proxy_rules().ParseFromString("foopy1:8080"); 1816 config.proxy_rules().ParseFromString("foopy1:8080");
1812 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1817 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1813 nullptr, nullptr); 1818 nullptr, nullptr);
1814 GURL test_url("http://www.microsoft.com"); 1819 GURL test_url("http://www.microsoft.com");
1815 ProxyInfo info; 1820 ProxyInfo info;
1816 TestCompletionCallback callback; 1821 TestCompletionCallback callback;
1817 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1822 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info,
1818 callback.callback(), nullptr, nullptr, 1823 callback.callback(), nullptr, nullptr,
1819 BoundNetLog()); 1824 BoundNetLog());
1820 EXPECT_EQ(OK, rv); 1825 EXPECT_THAT(rv, IsOk());
1821 EXPECT_FALSE(info.is_direct()); 1826 EXPECT_FALSE(info.is_direct());
1822 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1827 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1823 } 1828 }
1824 } 1829 }
1825 1830
1826 TEST_F(ProxyServiceTest, ProxyConfigSourcePropagates) { 1831 TEST_F(ProxyServiceTest, ProxyConfigSourcePropagates) {
1827 // Test that the proxy config source is set correctly when resolving proxies 1832 // Test that the proxy config source is set correctly when resolving proxies
1828 // using manual proxy rules. Namely, the config source should only be set if 1833 // using manual proxy rules. Namely, the config source should only be set if
1829 // any of the rules were applied. 1834 // any of the rules were applied.
1830 { 1835 {
1831 ProxyConfig config; 1836 ProxyConfig config;
1832 config.set_source(PROXY_CONFIG_SOURCE_TEST); 1837 config.set_source(PROXY_CONFIG_SOURCE_TEST);
1833 config.proxy_rules().ParseFromString("https=foopy2:8080"); 1838 config.proxy_rules().ParseFromString("https=foopy2:8080");
1834 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1839 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1835 nullptr, nullptr); 1840 nullptr, nullptr);
1836 GURL test_url("http://www.google.com"); 1841 GURL test_url("http://www.google.com");
1837 ProxyInfo info; 1842 ProxyInfo info;
1838 TestCompletionCallback callback; 1843 TestCompletionCallback callback;
1839 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1844 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info,
1840 callback.callback(), nullptr, nullptr, 1845 callback.callback(), nullptr, nullptr,
1841 BoundNetLog()); 1846 BoundNetLog());
1842 ASSERT_EQ(OK, rv); 1847 ASSERT_THAT(rv, IsOk());
1843 // Should be SOURCE_TEST, even if there are no HTTP proxies configured. 1848 // Should be SOURCE_TEST, even if there are no HTTP proxies configured.
1844 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); 1849 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source());
1845 } 1850 }
1846 { 1851 {
1847 ProxyConfig config; 1852 ProxyConfig config;
1848 config.set_source(PROXY_CONFIG_SOURCE_TEST); 1853 config.set_source(PROXY_CONFIG_SOURCE_TEST);
1849 config.proxy_rules().ParseFromString("https=foopy2:8080"); 1854 config.proxy_rules().ParseFromString("https=foopy2:8080");
1850 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1855 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1851 nullptr, nullptr); 1856 nullptr, nullptr);
1852 GURL test_url("https://www.google.com"); 1857 GURL test_url("https://www.google.com");
1853 ProxyInfo info; 1858 ProxyInfo info;
1854 TestCompletionCallback callback; 1859 TestCompletionCallback callback;
1855 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1860 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info,
1856 callback.callback(), nullptr, nullptr, 1861 callback.callback(), nullptr, nullptr,
1857 BoundNetLog()); 1862 BoundNetLog());
1858 ASSERT_EQ(OK, rv); 1863 ASSERT_THAT(rv, IsOk());
1859 // Used the HTTPS proxy. So source should be TEST. 1864 // Used the HTTPS proxy. So source should be TEST.
1860 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); 1865 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source());
1861 } 1866 }
1862 { 1867 {
1863 ProxyConfig config; 1868 ProxyConfig config;
1864 config.set_source(PROXY_CONFIG_SOURCE_TEST); 1869 config.set_source(PROXY_CONFIG_SOURCE_TEST);
1865 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1870 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1866 nullptr, nullptr); 1871 nullptr, nullptr);
1867 GURL test_url("http://www.google.com"); 1872 GURL test_url("http://www.google.com");
1868 ProxyInfo info; 1873 ProxyInfo info;
1869 TestCompletionCallback callback; 1874 TestCompletionCallback callback;
1870 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1875 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info,
1871 callback.callback(), nullptr, nullptr, 1876 callback.callback(), nullptr, nullptr,
1872 BoundNetLog()); 1877 BoundNetLog());
1873 ASSERT_EQ(OK, rv); 1878 ASSERT_THAT(rv, IsOk());
1874 // ProxyConfig is empty. Source should still be TEST. 1879 // ProxyConfig is empty. Source should still be TEST.
1875 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); 1880 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source());
1876 } 1881 }
1877 } 1882 }
1878 1883
1879 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries 1884 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries
1880 // fall back to the SOCKS proxy. 1885 // fall back to the SOCKS proxy.
1881 TEST_F(ProxyServiceTest, DefaultProxyFallbackToSOCKS) { 1886 TEST_F(ProxyServiceTest, DefaultProxyFallbackToSOCKS) {
1882 ProxyConfig config; 1887 ProxyConfig config;
1883 config.proxy_rules().ParseFromString("http=foopy1:8080;socks=foopy2:1080"); 1888 config.proxy_rules().ParseFromString("http=foopy1:8080;socks=foopy2:1080");
1884 config.set_auto_detect(false); 1889 config.set_auto_detect(false);
1885 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, 1890 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME,
1886 config.proxy_rules().type); 1891 config.proxy_rules().type);
1887 1892
1888 { 1893 {
1889 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1894 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1890 nullptr, nullptr); 1895 nullptr, nullptr);
1891 GURL test_url("http://www.msn.com"); 1896 GURL test_url("http://www.msn.com");
1892 ProxyInfo info; 1897 ProxyInfo info;
1893 TestCompletionCallback callback; 1898 TestCompletionCallback callback;
1894 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1899 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info,
1895 callback.callback(), nullptr, nullptr, 1900 callback.callback(), nullptr, nullptr,
1896 BoundNetLog()); 1901 BoundNetLog());
1897 EXPECT_EQ(OK, rv); 1902 EXPECT_THAT(rv, IsOk());
1898 EXPECT_FALSE(info.is_direct()); 1903 EXPECT_FALSE(info.is_direct());
1899 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1904 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1900 } 1905 }
1901 { 1906 {
1902 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1907 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1903 nullptr, nullptr); 1908 nullptr, nullptr);
1904 GURL test_url("ftp://ftp.google.com"); 1909 GURL test_url("ftp://ftp.google.com");
1905 ProxyInfo info; 1910 ProxyInfo info;
1906 TestCompletionCallback callback; 1911 TestCompletionCallback callback;
1907 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1912 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info,
1908 callback.callback(), nullptr, nullptr, 1913 callback.callback(), nullptr, nullptr,
1909 BoundNetLog()); 1914 BoundNetLog());
1910 EXPECT_EQ(OK, rv); 1915 EXPECT_THAT(rv, IsOk());
1911 EXPECT_FALSE(info.is_direct()); 1916 EXPECT_FALSE(info.is_direct());
1912 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); 1917 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI());
1913 } 1918 }
1914 { 1919 {
1915 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1920 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1916 nullptr, nullptr); 1921 nullptr, nullptr);
1917 GURL test_url("https://webbranch.techcu.com"); 1922 GURL test_url("https://webbranch.techcu.com");
1918 ProxyInfo info; 1923 ProxyInfo info;
1919 TestCompletionCallback callback; 1924 TestCompletionCallback callback;
1920 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1925 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info,
1921 callback.callback(), nullptr, nullptr, 1926 callback.callback(), nullptr, nullptr,
1922 BoundNetLog()); 1927 BoundNetLog());
1923 EXPECT_EQ(OK, rv); 1928 EXPECT_THAT(rv, IsOk());
1924 EXPECT_FALSE(info.is_direct()); 1929 EXPECT_FALSE(info.is_direct());
1925 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); 1930 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI());
1926 } 1931 }
1927 { 1932 {
1928 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1933 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1929 nullptr, nullptr); 1934 nullptr, nullptr);
1930 GURL test_url("unknown://www.microsoft.com"); 1935 GURL test_url("unknown://www.microsoft.com");
1931 ProxyInfo info; 1936 ProxyInfo info;
1932 TestCompletionCallback callback; 1937 TestCompletionCallback callback;
1933 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1938 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info,
1934 callback.callback(), nullptr, nullptr, 1939 callback.callback(), nullptr, nullptr,
1935 BoundNetLog()); 1940 BoundNetLog());
1936 EXPECT_EQ(OK, rv); 1941 EXPECT_THAT(rv, IsOk());
1937 EXPECT_FALSE(info.is_direct()); 1942 EXPECT_FALSE(info.is_direct());
1938 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); 1943 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI());
1939 } 1944 }
1940 } 1945 }
1941 1946
1942 // Test cancellation of an in-progress request. 1947 // Test cancellation of an in-progress request.
1943 TEST_F(ProxyServiceTest, CancelInProgressRequest) { 1948 TEST_F(ProxyServiceTest, CancelInProgressRequest) {
1944 const GURL url1("http://request1"); 1949 const GURL url1("http://request1");
1945 const GURL url2("http://request2"); 1950 const GURL url2("http://request2");
1946 const GURL url3("http://request3"); 1951 const GURL url3("http://request3");
1947 MockProxyConfigService* config_service = 1952 MockProxyConfigService* config_service =
1948 new MockProxyConfigService("http://foopy/proxy.pac"); 1953 new MockProxyConfigService("http://foopy/proxy.pac");
1949 1954
1950 MockAsyncProxyResolver resolver; 1955 MockAsyncProxyResolver resolver;
1951 MockAsyncProxyResolverFactory* factory = 1956 MockAsyncProxyResolverFactory* factory =
1952 new MockAsyncProxyResolverFactory(false); 1957 new MockAsyncProxyResolverFactory(false);
1953 1958
1954 ProxyService service(base::WrapUnique(config_service), 1959 ProxyService service(base::WrapUnique(config_service),
1955 base::WrapUnique(factory), nullptr); 1960 base::WrapUnique(factory), nullptr);
1956 1961
1957 // Start 3 requests. 1962 // Start 3 requests.
1958 1963
1959 ProxyInfo info1; 1964 ProxyInfo info1;
1960 TestCompletionCallback callback1; 1965 TestCompletionCallback callback1;
1961 int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1, 1966 int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1,
1962 callback1.callback(), nullptr, nullptr, 1967 callback1.callback(), nullptr, nullptr,
1963 BoundNetLog()); 1968 BoundNetLog());
1964 EXPECT_EQ(ERR_IO_PENDING, rv); 1969 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1965 1970
1966 // Successfully initialize the PAC script. 1971 // Successfully initialize the PAC script.
1967 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1972 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1968 factory->pending_requests()[0]->script_data()->url()); 1973 factory->pending_requests()[0]->script_data()->url());
1969 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1974 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1970 1975
1971 GetPendingRequestsForURLs(resolver, url1); 1976 GetPendingRequestsForURLs(resolver, url1);
1972 1977
1973 ProxyInfo info2; 1978 ProxyInfo info2;
1974 TestCompletionCallback callback2; 1979 TestCompletionCallback callback2;
1975 ProxyService::PacRequest* request2; 1980 ProxyService::PacRequest* request2;
1976 rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2, 1981 rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2,
1977 callback2.callback(), &request2, nullptr, 1982 callback2.callback(), &request2, nullptr,
1978 BoundNetLog()); 1983 BoundNetLog());
1979 EXPECT_EQ(ERR_IO_PENDING, rv); 1984 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1980 1985
1981 GetPendingRequestsForURLs(resolver, url1, url2); 1986 GetPendingRequestsForURLs(resolver, url1, url2);
1982 1987
1983 ProxyInfo info3; 1988 ProxyInfo info3;
1984 TestCompletionCallback callback3; 1989 TestCompletionCallback callback3;
1985 rv = service.ResolveProxy(url3, std::string(), LOAD_NORMAL, &info3, 1990 rv = service.ResolveProxy(url3, std::string(), LOAD_NORMAL, &info3,
1986 callback3.callback(), nullptr, nullptr, 1991 callback3.callback(), nullptr, nullptr,
1987 BoundNetLog()); 1992 BoundNetLog());
1988 EXPECT_EQ(ERR_IO_PENDING, rv); 1993 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1989 GetPendingRequestsForURLs(resolver, url1, url2, url3); 1994 GetPendingRequestsForURLs(resolver, url1, url2, url3);
1990 1995
1991 // Cancel the second request 1996 // Cancel the second request
1992 service.CancelPacRequest(request2); 1997 service.CancelPacRequest(request2);
1993 1998
1994 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url3); 1999 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url3);
1995 2000
1996 // Complete the two un-cancelled requests. 2001 // Complete the two un-cancelled requests.
1997 // We complete the last one first, just to mix it up a bit. 2002 // We complete the last one first, just to mix it up a bit.
1998 requests[url3]->results()->UseNamedProxy("request3:80"); 2003 requests[url3]->results()->UseNamedProxy("request3:80");
1999 requests[url3]->CompleteNow(OK); 2004 requests[url3]->CompleteNow(OK);
2000 2005
2001 requests[url1]->results()->UseNamedProxy("request1:80"); 2006 requests[url1]->results()->UseNamedProxy("request1:80");
2002 requests[url1]->CompleteNow(OK); 2007 requests[url1]->CompleteNow(OK);
2003 2008
2004 // Complete and verify that requests ran as expected. 2009 // Complete and verify that requests ran as expected.
2005 EXPECT_EQ(OK, callback1.WaitForResult()); 2010 EXPECT_THAT(callback1.WaitForResult(), IsOk());
2006 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 2011 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
2007 2012
2008 EXPECT_FALSE(callback2.have_result()); // Cancelled. 2013 EXPECT_FALSE(callback2.have_result()); // Cancelled.
2009 GetCancelledRequestsForURLs(resolver, url2); 2014 GetCancelledRequestsForURLs(resolver, url2);
2010 2015
2011 EXPECT_EQ(OK, callback3.WaitForResult()); 2016 EXPECT_THAT(callback3.WaitForResult(), IsOk());
2012 EXPECT_EQ("request3:80", info3.proxy_server().ToURI()); 2017 EXPECT_EQ("request3:80", info3.proxy_server().ToURI());
2013 } 2018 }
2014 2019
2015 // Test the initial PAC download for resolver that expects bytes. 2020 // Test the initial PAC download for resolver that expects bytes.
2016 TEST_F(ProxyServiceTest, InitialPACScriptDownload) { 2021 TEST_F(ProxyServiceTest, InitialPACScriptDownload) {
2017 const GURL url1("http://request1"); 2022 const GURL url1("http://request1");
2018 const GURL url2("http://request2"); 2023 const GURL url2("http://request2");
2019 const GURL url3("http://request3"); 2024 const GURL url3("http://request3");
2020 MockProxyConfigService* config_service = 2025 MockProxyConfigService* config_service =
2021 new MockProxyConfigService("http://foopy/proxy.pac"); 2026 new MockProxyConfigService("http://foopy/proxy.pac");
(...skipping 10 matching lines...) Expand all
2032 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2037 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2033 2038
2034 // Start 3 requests. 2039 // Start 3 requests.
2035 2040
2036 ProxyInfo info1; 2041 ProxyInfo info1;
2037 TestCompletionCallback callback1; 2042 TestCompletionCallback callback1;
2038 ProxyService::PacRequest* request1; 2043 ProxyService::PacRequest* request1;
2039 int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1, 2044 int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1,
2040 callback1.callback(), &request1, nullptr, 2045 callback1.callback(), &request1, nullptr,
2041 BoundNetLog()); 2046 BoundNetLog());
2042 EXPECT_EQ(ERR_IO_PENDING, rv); 2047 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2043 2048
2044 // The first request should have triggered download of PAC script. 2049 // The first request should have triggered download of PAC script.
2045 EXPECT_TRUE(fetcher->has_pending_request()); 2050 EXPECT_TRUE(fetcher->has_pending_request());
2046 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2051 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2047 2052
2048 ProxyInfo info2; 2053 ProxyInfo info2;
2049 TestCompletionCallback callback2; 2054 TestCompletionCallback callback2;
2050 ProxyService::PacRequest* request2; 2055 ProxyService::PacRequest* request2;
2051 rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2, 2056 rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2,
2052 callback2.callback(), &request2, nullptr, 2057 callback2.callback(), &request2, nullptr,
2053 BoundNetLog()); 2058 BoundNetLog());
2054 EXPECT_EQ(ERR_IO_PENDING, rv); 2059 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2055 2060
2056 ProxyInfo info3; 2061 ProxyInfo info3;
2057 TestCompletionCallback callback3; 2062 TestCompletionCallback callback3;
2058 ProxyService::PacRequest* request3; 2063 ProxyService::PacRequest* request3;
2059 rv = service.ResolveProxy(url3, std::string(), LOAD_NORMAL, &info3, 2064 rv = service.ResolveProxy(url3, std::string(), LOAD_NORMAL, &info3,
2060 callback3.callback(), &request3, nullptr, 2065 callback3.callback(), &request3, nullptr,
2061 BoundNetLog()); 2066 BoundNetLog());
2062 EXPECT_EQ(ERR_IO_PENDING, rv); 2067 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2063 2068
2064 // Nothing has been sent to the factory yet. 2069 // Nothing has been sent to the factory yet.
2065 EXPECT_TRUE(factory->pending_requests().empty()); 2070 EXPECT_TRUE(factory->pending_requests().empty());
2066 2071
2067 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, 2072 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT,
2068 service.GetLoadState(request1)); 2073 service.GetLoadState(request1));
2069 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, 2074 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT,
2070 service.GetLoadState(request2)); 2075 service.GetLoadState(request2));
2071 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, 2076 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT,
2072 service.GetLoadState(request3)); 2077 service.GetLoadState(request3));
(...skipping 20 matching lines...) Expand all
2093 requests[url3]->results()->UseNamedProxy("request3:80"); 2098 requests[url3]->results()->UseNamedProxy("request3:80");
2094 requests[url3]->CompleteNow(OK); 2099 requests[url3]->CompleteNow(OK);
2095 2100
2096 requests[url1]->results()->UseNamedProxy("request1:80"); 2101 requests[url1]->results()->UseNamedProxy("request1:80");
2097 requests[url1]->CompleteNow(OK); 2102 requests[url1]->CompleteNow(OK);
2098 2103
2099 requests[url2]->results()->UseNamedProxy("request2:80"); 2104 requests[url2]->results()->UseNamedProxy("request2:80");
2100 requests[url2]->CompleteNow(OK); 2105 requests[url2]->CompleteNow(OK);
2101 2106
2102 // Complete and verify that requests ran as expected. 2107 // Complete and verify that requests ran as expected.
2103 EXPECT_EQ(OK, callback1.WaitForResult()); 2108 EXPECT_THAT(callback1.WaitForResult(), IsOk());
2104 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 2109 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
2105 EXPECT_FALSE(info1.proxy_resolve_start_time().is_null()); 2110 EXPECT_FALSE(info1.proxy_resolve_start_time().is_null());
2106 EXPECT_FALSE(info1.proxy_resolve_end_time().is_null()); 2111 EXPECT_FALSE(info1.proxy_resolve_end_time().is_null());
2107 EXPECT_LE(info1.proxy_resolve_start_time(), info1.proxy_resolve_end_time()); 2112 EXPECT_LE(info1.proxy_resolve_start_time(), info1.proxy_resolve_end_time());
2108 2113
2109 EXPECT_EQ(OK, callback2.WaitForResult()); 2114 EXPECT_THAT(callback2.WaitForResult(), IsOk());
2110 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 2115 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
2111 EXPECT_FALSE(info2.proxy_resolve_start_time().is_null()); 2116 EXPECT_FALSE(info2.proxy_resolve_start_time().is_null());
2112 EXPECT_FALSE(info2.proxy_resolve_end_time().is_null()); 2117 EXPECT_FALSE(info2.proxy_resolve_end_time().is_null());
2113 EXPECT_LE(info2.proxy_resolve_start_time(), info2.proxy_resolve_end_time()); 2118 EXPECT_LE(info2.proxy_resolve_start_time(), info2.proxy_resolve_end_time());
2114 2119
2115 EXPECT_EQ(OK, callback3.WaitForResult()); 2120 EXPECT_THAT(callback3.WaitForResult(), IsOk());
2116 EXPECT_EQ("request3:80", info3.proxy_server().ToURI()); 2121 EXPECT_EQ("request3:80", info3.proxy_server().ToURI());
2117 EXPECT_FALSE(info3.proxy_resolve_start_time().is_null()); 2122 EXPECT_FALSE(info3.proxy_resolve_start_time().is_null());
2118 EXPECT_FALSE(info3.proxy_resolve_end_time().is_null()); 2123 EXPECT_FALSE(info3.proxy_resolve_end_time().is_null());
2119 EXPECT_LE(info3.proxy_resolve_start_time(), info3.proxy_resolve_end_time()); 2124 EXPECT_LE(info3.proxy_resolve_start_time(), info3.proxy_resolve_end_time());
2120 } 2125 }
2121 2126
2122 // Test changing the ProxyScriptFetcher while PAC download is in progress. 2127 // Test changing the ProxyScriptFetcher while PAC download is in progress.
2123 TEST_F(ProxyServiceTest, ChangeScriptFetcherWhilePACDownloadInProgress) { 2128 TEST_F(ProxyServiceTest, ChangeScriptFetcherWhilePACDownloadInProgress) {
2124 const GURL url1("http://request1"); 2129 const GURL url1("http://request1");
2125 const GURL url2("http://request2"); 2130 const GURL url2("http://request2");
(...skipping 11 matching lines...) Expand all
2137 service.SetProxyScriptFetchers( 2142 service.SetProxyScriptFetchers(
2138 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2143 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2139 2144
2140 // Start 2 requests. 2145 // Start 2 requests.
2141 2146
2142 ProxyInfo info1; 2147 ProxyInfo info1;
2143 TestCompletionCallback callback1; 2148 TestCompletionCallback callback1;
2144 int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1, 2149 int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1,
2145 callback1.callback(), nullptr, nullptr, 2150 callback1.callback(), nullptr, nullptr,
2146 BoundNetLog()); 2151 BoundNetLog());
2147 EXPECT_EQ(ERR_IO_PENDING, rv); 2152 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2148 2153
2149 // The first request should have triggered download of PAC script. 2154 // The first request should have triggered download of PAC script.
2150 EXPECT_TRUE(fetcher->has_pending_request()); 2155 EXPECT_TRUE(fetcher->has_pending_request());
2151 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2156 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2152 2157
2153 ProxyInfo info2; 2158 ProxyInfo info2;
2154 TestCompletionCallback callback2; 2159 TestCompletionCallback callback2;
2155 rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2, 2160 rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2,
2156 callback2.callback(), nullptr, nullptr, 2161 callback2.callback(), nullptr, nullptr,
2157 BoundNetLog()); 2162 BoundNetLog());
2158 EXPECT_EQ(ERR_IO_PENDING, rv); 2163 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2159 2164
2160 // At this point the ProxyService should be waiting for the 2165 // At this point the ProxyService should be waiting for the
2161 // ProxyScriptFetcher to invoke its completion callback, notifying it of 2166 // ProxyScriptFetcher to invoke its completion callback, notifying it of
2162 // PAC script download completion. 2167 // PAC script download completion.
2163 2168
2164 // We now change out the ProxyService's script fetcher. We should restart 2169 // We now change out the ProxyService's script fetcher. We should restart
2165 // the initialization with the new fetcher. 2170 // the initialization with the new fetcher.
2166 2171
2167 fetcher = new MockProxyScriptFetcher; 2172 fetcher = new MockProxyScriptFetcher;
2168 service.SetProxyScriptFetchers( 2173 service.SetProxyScriptFetchers(
(...skipping 30 matching lines...) Expand all
2199 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2204 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2200 2205
2201 // Start 3 requests. 2206 // Start 3 requests.
2202 ProxyInfo info1; 2207 ProxyInfo info1;
2203 TestCompletionCallback callback1; 2208 TestCompletionCallback callback1;
2204 ProxyService::PacRequest* request1; 2209 ProxyService::PacRequest* request1;
2205 BoundTestNetLog log1; 2210 BoundTestNetLog log1;
2206 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), 2211 int rv = service.ResolveProxy(GURL("http://request1"), std::string(),
2207 LOAD_NORMAL, &info1, callback1.callback(), 2212 LOAD_NORMAL, &info1, callback1.callback(),
2208 &request1, nullptr, log1.bound()); 2213 &request1, nullptr, log1.bound());
2209 EXPECT_EQ(ERR_IO_PENDING, rv); 2214 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2210 2215
2211 // The first request should have triggered download of PAC script. 2216 // The first request should have triggered download of PAC script.
2212 EXPECT_TRUE(fetcher->has_pending_request()); 2217 EXPECT_TRUE(fetcher->has_pending_request());
2213 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2218 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2214 2219
2215 ProxyInfo info2; 2220 ProxyInfo info2;
2216 TestCompletionCallback callback2; 2221 TestCompletionCallback callback2;
2217 ProxyService::PacRequest* request2; 2222 ProxyService::PacRequest* request2;
2218 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, 2223 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL,
2219 &info2, callback2.callback(), &request2, nullptr, 2224 &info2, callback2.callback(), &request2, nullptr,
2220 BoundNetLog()); 2225 BoundNetLog());
2221 EXPECT_EQ(ERR_IO_PENDING, rv); 2226 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2222 2227
2223 ProxyInfo info3; 2228 ProxyInfo info3;
2224 TestCompletionCallback callback3; 2229 TestCompletionCallback callback3;
2225 rv = service.ResolveProxy(GURL("http://request3"), std::string(), LOAD_NORMAL, 2230 rv = service.ResolveProxy(GURL("http://request3"), std::string(), LOAD_NORMAL,
2226 &info3, callback3.callback(), nullptr, nullptr, 2231 &info3, callback3.callback(), nullptr, nullptr,
2227 BoundNetLog()); 2232 BoundNetLog());
2228 EXPECT_EQ(ERR_IO_PENDING, rv); 2233 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2229 2234
2230 // Nothing has been sent to the factory yet. 2235 // Nothing has been sent to the factory yet.
2231 EXPECT_TRUE(factory->pending_requests().empty()); 2236 EXPECT_TRUE(factory->pending_requests().empty());
2232 2237
2233 // Cancel the first 2 requests. 2238 // Cancel the first 2 requests.
2234 service.CancelPacRequest(request1); 2239 service.CancelPacRequest(request1);
2235 service.CancelPacRequest(request2); 2240 service.CancelPacRequest(request2);
2236 2241
2237 // At this point the ProxyService should be waiting for the 2242 // At this point the ProxyService should be waiting for the
2238 // ProxyScriptFetcher to invoke its completion callback, notifying it of 2243 // ProxyScriptFetcher to invoke its completion callback, notifying it of
2239 // PAC script download completion. 2244 // PAC script download completion.
2240 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 2245 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
2241 2246
2242 // Now that the PAC script is downloaded, it will have been sent to the 2247 // Now that the PAC script is downloaded, it will have been sent to the
2243 // proxy resolver. 2248 // proxy resolver.
2244 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), 2249 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1),
2245 factory->pending_requests()[0]->script_data()->utf16()); 2250 factory->pending_requests()[0]->script_data()->utf16());
2246 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2251 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2247 2252
2248 ASSERT_EQ(1u, resolver.pending_requests().size()); 2253 ASSERT_EQ(1u, resolver.pending_requests().size());
2249 EXPECT_EQ(GURL("http://request3"), resolver.pending_requests()[0]->url()); 2254 EXPECT_EQ(GURL("http://request3"), resolver.pending_requests()[0]->url());
2250 2255
2251 // Complete all the requests. 2256 // Complete all the requests.
2252 resolver.pending_requests()[0]->results()->UseNamedProxy("request3:80"); 2257 resolver.pending_requests()[0]->results()->UseNamedProxy("request3:80");
2253 resolver.pending_requests()[0]->CompleteNow(OK); 2258 resolver.pending_requests()[0]->CompleteNow(OK);
2254 2259
2255 EXPECT_EQ(OK, callback3.WaitForResult()); 2260 EXPECT_THAT(callback3.WaitForResult(), IsOk());
2256 EXPECT_EQ("request3:80", info3.proxy_server().ToURI()); 2261 EXPECT_EQ("request3:80", info3.proxy_server().ToURI());
2257 2262
2258 EXPECT_TRUE(resolver.cancelled_requests().empty()); 2263 EXPECT_TRUE(resolver.cancelled_requests().empty());
2259 2264
2260 EXPECT_FALSE(callback1.have_result()); // Cancelled. 2265 EXPECT_FALSE(callback1.have_result()); // Cancelled.
2261 EXPECT_FALSE(callback2.have_result()); // Cancelled. 2266 EXPECT_FALSE(callback2.have_result()); // Cancelled.
2262 2267
2263 TestNetLogEntry::List entries1; 2268 TestNetLogEntry::List entries1;
2264 log1.GetEntries(&entries1); 2269 log1.GetEntries(&entries1);
2265 2270
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2297 service.SetProxyScriptFetchers( 2302 service.SetProxyScriptFetchers(
2298 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2303 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2299 2304
2300 // Start 2 requests. 2305 // Start 2 requests.
2301 2306
2302 ProxyInfo info1; 2307 ProxyInfo info1;
2303 TestCompletionCallback callback1; 2308 TestCompletionCallback callback1;
2304 int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1, 2309 int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1,
2305 callback1.callback(), nullptr, nullptr, 2310 callback1.callback(), nullptr, nullptr,
2306 BoundNetLog()); 2311 BoundNetLog());
2307 EXPECT_EQ(ERR_IO_PENDING, rv); 2312 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2308 2313
2309 ProxyInfo info2; 2314 ProxyInfo info2;
2310 TestCompletionCallback callback2; 2315 TestCompletionCallback callback2;
2311 ProxyService::PacRequest* request2; 2316 ProxyService::PacRequest* request2;
2312 rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2, 2317 rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2,
2313 callback2.callback(), &request2, nullptr, 2318 callback2.callback(), &request2, nullptr,
2314 BoundNetLog()); 2319 BoundNetLog());
2315 EXPECT_EQ(ERR_IO_PENDING, rv); 2320 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2316 2321
2317 // Check that nothing has been sent to the proxy resolver factory yet. 2322 // Check that nothing has been sent to the proxy resolver factory yet.
2318 ASSERT_EQ(0u, factory->pending_requests().size()); 2323 ASSERT_EQ(0u, factory->pending_requests().size());
2319 2324
2320 // It should be trying to auto-detect first -- FAIL the autodetect during 2325 // It should be trying to auto-detect first -- FAIL the autodetect during
2321 // the script download. 2326 // the script download.
2322 EXPECT_TRUE(fetcher->has_pending_request()); 2327 EXPECT_TRUE(fetcher->has_pending_request());
2323 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); 2328 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url());
2324 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); 2329 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string());
2325 2330
(...skipping 11 matching lines...) Expand all
2337 2342
2338 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url2); 2343 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url2);
2339 2344
2340 // Complete the pending requests. 2345 // Complete the pending requests.
2341 requests[url2]->results()->UseNamedProxy("request2:80"); 2346 requests[url2]->results()->UseNamedProxy("request2:80");
2342 requests[url2]->CompleteNow(OK); 2347 requests[url2]->CompleteNow(OK);
2343 requests[url1]->results()->UseNamedProxy("request1:80"); 2348 requests[url1]->results()->UseNamedProxy("request1:80");
2344 requests[url1]->CompleteNow(OK); 2349 requests[url1]->CompleteNow(OK);
2345 2350
2346 // Verify that requests ran as expected. 2351 // Verify that requests ran as expected.
2347 EXPECT_EQ(OK, callback1.WaitForResult()); 2352 EXPECT_THAT(callback1.WaitForResult(), IsOk());
2348 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 2353 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
2349 EXPECT_FALSE(info1.proxy_resolve_start_time().is_null()); 2354 EXPECT_FALSE(info1.proxy_resolve_start_time().is_null());
2350 EXPECT_FALSE(info1.proxy_resolve_end_time().is_null()); 2355 EXPECT_FALSE(info1.proxy_resolve_end_time().is_null());
2351 EXPECT_LE(info1.proxy_resolve_start_time(), info1.proxy_resolve_end_time()); 2356 EXPECT_LE(info1.proxy_resolve_start_time(), info1.proxy_resolve_end_time());
2352 2357
2353 EXPECT_EQ(OK, callback2.WaitForResult()); 2358 EXPECT_THAT(callback2.WaitForResult(), IsOk());
2354 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 2359 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
2355 EXPECT_FALSE(info2.proxy_resolve_start_time().is_null()); 2360 EXPECT_FALSE(info2.proxy_resolve_start_time().is_null());
2356 EXPECT_FALSE(info2.proxy_resolve_end_time().is_null()); 2361 EXPECT_FALSE(info2.proxy_resolve_end_time().is_null());
2357 EXPECT_LE(info2.proxy_resolve_start_time(), info2.proxy_resolve_end_time()); 2362 EXPECT_LE(info2.proxy_resolve_start_time(), info2.proxy_resolve_end_time());
2358 } 2363 }
2359 2364
2360 // This is the same test as FallbackFromAutodetectToCustomPac, except 2365 // This is the same test as FallbackFromAutodetectToCustomPac, except
2361 // the auto-detect script fails parsing rather than downloading. 2366 // the auto-detect script fails parsing rather than downloading.
2362 TEST_F(ProxyServiceTest, FallbackFromAutodetectToCustomPac2) { 2367 TEST_F(ProxyServiceTest, FallbackFromAutodetectToCustomPac2) {
2363 const GURL url1("http://request1"); 2368 const GURL url1("http://request1");
(...skipping 14 matching lines...) Expand all
2378 service.SetProxyScriptFetchers( 2383 service.SetProxyScriptFetchers(
2379 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2384 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2380 2385
2381 // Start 2 requests. 2386 // Start 2 requests.
2382 2387
2383 ProxyInfo info1; 2388 ProxyInfo info1;
2384 TestCompletionCallback callback1; 2389 TestCompletionCallback callback1;
2385 int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1, 2390 int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1,
2386 callback1.callback(), nullptr, nullptr, 2391 callback1.callback(), nullptr, nullptr,
2387 BoundNetLog()); 2392 BoundNetLog());
2388 EXPECT_EQ(ERR_IO_PENDING, rv); 2393 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2389 2394
2390 ProxyInfo info2; 2395 ProxyInfo info2;
2391 TestCompletionCallback callback2; 2396 TestCompletionCallback callback2;
2392 ProxyService::PacRequest* request2; 2397 ProxyService::PacRequest* request2;
2393 rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2, 2398 rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2,
2394 callback2.callback(), &request2, nullptr, 2399 callback2.callback(), &request2, nullptr,
2395 BoundNetLog()); 2400 BoundNetLog());
2396 EXPECT_EQ(ERR_IO_PENDING, rv); 2401 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2397 2402
2398 // Check that nothing has been sent to the proxy resolver factory yet. 2403 // Check that nothing has been sent to the proxy resolver factory yet.
2399 ASSERT_EQ(0u, factory->pending_requests().size()); 2404 ASSERT_EQ(0u, factory->pending_requests().size());
2400 2405
2401 // It should be trying to auto-detect first -- succeed the download. 2406 // It should be trying to auto-detect first -- succeed the download.
2402 EXPECT_TRUE(fetcher->has_pending_request()); 2407 EXPECT_TRUE(fetcher->has_pending_request());
2403 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); 2408 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url());
2404 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); 2409 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents");
2405 2410
2406 // The script contents passed failed basic verification step (since didn't 2411 // The script contents passed failed basic verification step (since didn't
(...skipping 13 matching lines...) Expand all
2420 2425
2421 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url2); 2426 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url2);
2422 2427
2423 // Complete the pending requests. 2428 // Complete the pending requests.
2424 requests[url2]->results()->UseNamedProxy("request2:80"); 2429 requests[url2]->results()->UseNamedProxy("request2:80");
2425 requests[url2]->CompleteNow(OK); 2430 requests[url2]->CompleteNow(OK);
2426 requests[url1]->results()->UseNamedProxy("request1:80"); 2431 requests[url1]->results()->UseNamedProxy("request1:80");
2427 requests[url1]->CompleteNow(OK); 2432 requests[url1]->CompleteNow(OK);
2428 2433
2429 // Verify that requests ran as expected. 2434 // Verify that requests ran as expected.
2430 EXPECT_EQ(OK, callback1.WaitForResult()); 2435 EXPECT_THAT(callback1.WaitForResult(), IsOk());
2431 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 2436 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
2432 2437
2433 EXPECT_EQ(OK, callback2.WaitForResult()); 2438 EXPECT_THAT(callback2.WaitForResult(), IsOk());
2434 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 2439 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
2435 } 2440 }
2436 2441
2437 // Test that if all of auto-detect, a custom PAC script, and manual settings 2442 // Test that if all of auto-detect, a custom PAC script, and manual settings
2438 // are given, then we will try them in that order. 2443 // are given, then we will try them in that order.
2439 TEST_F(ProxyServiceTest, FallbackFromAutodetectToCustomToManual) { 2444 TEST_F(ProxyServiceTest, FallbackFromAutodetectToCustomToManual) {
2440 ProxyConfig config; 2445 ProxyConfig config;
2441 config.set_auto_detect(true); 2446 config.set_auto_detect(true);
2442 config.set_pac_url(GURL("http://foopy/proxy.pac")); 2447 config.set_pac_url(GURL("http://foopy/proxy.pac"));
2443 config.proxy_rules().ParseFromString("http=foopy:80"); 2448 config.proxy_rules().ParseFromString("http=foopy:80");
2444 2449
2445 MockProxyConfigService* config_service = new MockProxyConfigService(config); 2450 MockProxyConfigService* config_service = new MockProxyConfigService(config);
2446 MockAsyncProxyResolverFactory* factory = 2451 MockAsyncProxyResolverFactory* factory =
2447 new MockAsyncProxyResolverFactory(true); 2452 new MockAsyncProxyResolverFactory(true);
2448 ProxyService service(base::WrapUnique(config_service), 2453 ProxyService service(base::WrapUnique(config_service),
2449 base::WrapUnique(factory), nullptr); 2454 base::WrapUnique(factory), nullptr);
2450 2455
2451 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 2456 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
2452 service.SetProxyScriptFetchers( 2457 service.SetProxyScriptFetchers(
2453 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2458 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2454 2459
2455 // Start 2 requests. 2460 // Start 2 requests.
2456 2461
2457 ProxyInfo info1; 2462 ProxyInfo info1;
2458 TestCompletionCallback callback1; 2463 TestCompletionCallback callback1;
2459 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), 2464 int rv = service.ResolveProxy(GURL("http://request1"), std::string(),
2460 LOAD_NORMAL, &info1, callback1.callback(), 2465 LOAD_NORMAL, &info1, callback1.callback(),
2461 nullptr, nullptr, BoundNetLog()); 2466 nullptr, nullptr, BoundNetLog());
2462 EXPECT_EQ(ERR_IO_PENDING, rv); 2467 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2463 2468
2464 ProxyInfo info2; 2469 ProxyInfo info2;
2465 TestCompletionCallback callback2; 2470 TestCompletionCallback callback2;
2466 ProxyService::PacRequest* request2; 2471 ProxyService::PacRequest* request2;
2467 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, 2472 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL,
2468 &info2, callback2.callback(), &request2, nullptr, 2473 &info2, callback2.callback(), &request2, nullptr,
2469 BoundNetLog()); 2474 BoundNetLog());
2470 EXPECT_EQ(ERR_IO_PENDING, rv); 2475 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2471 2476
2472 // Check that nothing has been sent to the proxy resolver factory yet. 2477 // Check that nothing has been sent to the proxy resolver factory yet.
2473 ASSERT_EQ(0u, factory->pending_requests().size()); 2478 ASSERT_EQ(0u, factory->pending_requests().size());
2474 2479
2475 // It should be trying to auto-detect first -- fail the download. 2480 // It should be trying to auto-detect first -- fail the download.
2476 EXPECT_TRUE(fetcher->has_pending_request()); 2481 EXPECT_TRUE(fetcher->has_pending_request());
2477 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); 2482 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url());
2478 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); 2483 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string());
2479 2484
2480 // Next it should be trying the custom PAC url -- fail the download. 2485 // Next it should be trying the custom PAC url -- fail the download.
2481 EXPECT_TRUE(fetcher->has_pending_request()); 2486 EXPECT_TRUE(fetcher->has_pending_request());
2482 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2487 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2483 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); 2488 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string());
2484 2489
2485 // Since we never managed to initialize a resolver, nothing should have been 2490 // Since we never managed to initialize a resolver, nothing should have been
2486 // sent to it. 2491 // sent to it.
2487 ASSERT_EQ(0u, factory->pending_requests().size()); 2492 ASSERT_EQ(0u, factory->pending_requests().size());
2488 2493
2489 // Verify that requests ran as expected -- they should have fallen back to 2494 // Verify that requests ran as expected -- they should have fallen back to
2490 // the manual proxy configuration for HTTP urls. 2495 // the manual proxy configuration for HTTP urls.
2491 EXPECT_EQ(OK, callback1.WaitForResult()); 2496 EXPECT_THAT(callback1.WaitForResult(), IsOk());
2492 EXPECT_EQ("foopy:80", info1.proxy_server().ToURI()); 2497 EXPECT_EQ("foopy:80", info1.proxy_server().ToURI());
2493 2498
2494 EXPECT_EQ(OK, callback2.WaitForResult()); 2499 EXPECT_THAT(callback2.WaitForResult(), IsOk());
2495 EXPECT_EQ("foopy:80", info2.proxy_server().ToURI()); 2500 EXPECT_EQ("foopy:80", info2.proxy_server().ToURI());
2496 } 2501 }
2497 2502
2498 // Test that the bypass rules are NOT applied when using autodetect. 2503 // Test that the bypass rules are NOT applied when using autodetect.
2499 TEST_F(ProxyServiceTest, BypassDoesntApplyToPac) { 2504 TEST_F(ProxyServiceTest, BypassDoesntApplyToPac) {
2500 ProxyConfig config; 2505 ProxyConfig config;
2501 config.set_auto_detect(true); 2506 config.set_auto_detect(true);
2502 config.set_pac_url(GURL("http://foopy/proxy.pac")); 2507 config.set_pac_url(GURL("http://foopy/proxy.pac"));
2503 config.proxy_rules().ParseFromString("http=foopy:80"); // Not used. 2508 config.proxy_rules().ParseFromString("http=foopy:80"); // Not used.
2504 config.proxy_rules().bypass_rules.ParseFromString("www.google.com"); 2509 config.proxy_rules().bypass_rules.ParseFromString("www.google.com");
2505 2510
2506 MockProxyConfigService* config_service = new MockProxyConfigService(config); 2511 MockProxyConfigService* config_service = new MockProxyConfigService(config);
2507 MockAsyncProxyResolver resolver; 2512 MockAsyncProxyResolver resolver;
2508 MockAsyncProxyResolverFactory* factory = 2513 MockAsyncProxyResolverFactory* factory =
2509 new MockAsyncProxyResolverFactory(true); 2514 new MockAsyncProxyResolverFactory(true);
2510 ProxyService service(base::WrapUnique(config_service), 2515 ProxyService service(base::WrapUnique(config_service),
2511 base::WrapUnique(factory), nullptr); 2516 base::WrapUnique(factory), nullptr);
2512 2517
2513 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 2518 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
2514 service.SetProxyScriptFetchers( 2519 service.SetProxyScriptFetchers(
2515 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2520 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2516 2521
2517 // Start 1 requests. 2522 // Start 1 requests.
2518 2523
2519 ProxyInfo info1; 2524 ProxyInfo info1;
2520 TestCompletionCallback callback1; 2525 TestCompletionCallback callback1;
2521 int rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(), 2526 int rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(),
2522 LOAD_NORMAL, &info1, callback1.callback(), 2527 LOAD_NORMAL, &info1, callback1.callback(),
2523 nullptr, nullptr, BoundNetLog()); 2528 nullptr, nullptr, BoundNetLog());
2524 EXPECT_EQ(ERR_IO_PENDING, rv); 2529 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2525 2530
2526 // Check that nothing has been sent to the proxy resolver factory yet. 2531 // Check that nothing has been sent to the proxy resolver factory yet.
2527 ASSERT_EQ(0u, factory->pending_requests().size()); 2532 ASSERT_EQ(0u, factory->pending_requests().size());
2528 2533
2529 // It should be trying to auto-detect first -- succeed the download. 2534 // It should be trying to auto-detect first -- succeed the download.
2530 EXPECT_TRUE(fetcher->has_pending_request()); 2535 EXPECT_TRUE(fetcher->has_pending_request());
2531 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); 2536 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url());
2532 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 2537 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
2533 2538
2534 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), 2539 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1),
2535 factory->pending_requests()[0]->script_data()->utf16()); 2540 factory->pending_requests()[0]->script_data()->utf16());
2536 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2541 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2537 2542
2538 ASSERT_EQ(1u, resolver.pending_requests().size()); 2543 ASSERT_EQ(1u, resolver.pending_requests().size());
2539 EXPECT_EQ(GURL("http://www.google.com"), 2544 EXPECT_EQ(GURL("http://www.google.com"),
2540 resolver.pending_requests()[0]->url()); 2545 resolver.pending_requests()[0]->url());
2541 2546
2542 // Complete the pending request. 2547 // Complete the pending request.
2543 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); 2548 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80");
2544 resolver.pending_requests()[0]->CompleteNow(OK); 2549 resolver.pending_requests()[0]->CompleteNow(OK);
2545 2550
2546 // Verify that request ran as expected. 2551 // Verify that request ran as expected.
2547 EXPECT_EQ(OK, callback1.WaitForResult()); 2552 EXPECT_THAT(callback1.WaitForResult(), IsOk());
2548 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 2553 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
2549 2554
2550 // Start another request, it should pickup the bypass item. 2555 // Start another request, it should pickup the bypass item.
2551 ProxyInfo info2; 2556 ProxyInfo info2;
2552 TestCompletionCallback callback2; 2557 TestCompletionCallback callback2;
2553 rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(), 2558 rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(),
2554 LOAD_NORMAL, &info2, callback2.callback(), nullptr, 2559 LOAD_NORMAL, &info2, callback2.callback(), nullptr,
2555 nullptr, BoundNetLog()); 2560 nullptr, BoundNetLog());
2556 EXPECT_EQ(ERR_IO_PENDING, rv); 2561 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2557 2562
2558 ASSERT_EQ(1u, resolver.pending_requests().size()); 2563 ASSERT_EQ(1u, resolver.pending_requests().size());
2559 EXPECT_EQ(GURL("http://www.google.com"), 2564 EXPECT_EQ(GURL("http://www.google.com"),
2560 resolver.pending_requests()[0]->url()); 2565 resolver.pending_requests()[0]->url());
2561 2566
2562 // Complete the pending request. 2567 // Complete the pending request.
2563 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); 2568 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80");
2564 resolver.pending_requests()[0]->CompleteNow(OK); 2569 resolver.pending_requests()[0]->CompleteNow(OK);
2565 2570
2566 EXPECT_EQ(OK, callback2.WaitForResult()); 2571 EXPECT_THAT(callback2.WaitForResult(), IsOk());
2567 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 2572 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
2568 } 2573 }
2569 2574
2570 // Delete the ProxyService while InitProxyResolver has an outstanding 2575 // Delete the ProxyService while InitProxyResolver has an outstanding
2571 // request to the script fetcher. When run under valgrind, should not 2576 // request to the script fetcher. When run under valgrind, should not
2572 // have any memory errors (used to be that the ProxyScriptFetcher was 2577 // have any memory errors (used to be that the ProxyScriptFetcher was
2573 // being deleted prior to the InitProxyResolver). 2578 // being deleted prior to the InitProxyResolver).
2574 TEST_F(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingFetch) { 2579 TEST_F(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingFetch) {
2575 ProxyConfig config = 2580 ProxyConfig config =
2576 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); 2581 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"));
2577 2582
2578 MockProxyConfigService* config_service = new MockProxyConfigService(config); 2583 MockProxyConfigService* config_service = new MockProxyConfigService(config);
2579 MockAsyncProxyResolverFactory* factory = 2584 MockAsyncProxyResolverFactory* factory =
2580 new MockAsyncProxyResolverFactory(true); 2585 new MockAsyncProxyResolverFactory(true);
2581 ProxyService service(base::WrapUnique(config_service), 2586 ProxyService service(base::WrapUnique(config_service),
2582 base::WrapUnique(factory), nullptr); 2587 base::WrapUnique(factory), nullptr);
2583 2588
2584 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 2589 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
2585 service.SetProxyScriptFetchers( 2590 service.SetProxyScriptFetchers(
2586 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2591 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2587 2592
2588 // Start 1 request. 2593 // Start 1 request.
2589 2594
2590 ProxyInfo info1; 2595 ProxyInfo info1;
2591 TestCompletionCallback callback1; 2596 TestCompletionCallback callback1;
2592 int rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(), 2597 int rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(),
2593 LOAD_NORMAL, &info1, callback1.callback(), 2598 LOAD_NORMAL, &info1, callback1.callback(),
2594 nullptr, nullptr, BoundNetLog()); 2599 nullptr, nullptr, BoundNetLog());
2595 EXPECT_EQ(ERR_IO_PENDING, rv); 2600 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2596 2601
2597 // Check that nothing has been sent to the proxy resolver factory yet. 2602 // Check that nothing has been sent to the proxy resolver factory yet.
2598 ASSERT_EQ(0u, factory->pending_requests().size()); 2603 ASSERT_EQ(0u, factory->pending_requests().size());
2599 2604
2600 // InitProxyResolver should have issued a request to the ProxyScriptFetcher 2605 // InitProxyResolver should have issued a request to the ProxyScriptFetcher
2601 // and be waiting on that to complete. 2606 // and be waiting on that to complete.
2602 EXPECT_TRUE(fetcher->has_pending_request()); 2607 EXPECT_TRUE(fetcher->has_pending_request());
2603 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2608 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2604 } 2609 }
2605 2610
(...skipping 11 matching lines...) Expand all
2617 ProxyService service(base::WrapUnique(config_service), 2622 ProxyService service(base::WrapUnique(config_service),
2618 base::WrapUnique(factory), nullptr); 2623 base::WrapUnique(factory), nullptr);
2619 2624
2620 GURL url("http://www.google.com/"); 2625 GURL url("http://www.google.com/");
2621 2626
2622 ProxyInfo info; 2627 ProxyInfo info;
2623 TestCompletionCallback callback; 2628 TestCompletionCallback callback;
2624 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 2629 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
2625 callback.callback(), nullptr, nullptr, 2630 callback.callback(), nullptr, nullptr,
2626 BoundNetLog()); 2631 BoundNetLog());
2627 EXPECT_EQ(ERR_IO_PENDING, rv); 2632 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2628 2633
2629 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 2634 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
2630 factory->pending_requests()[0]->script_data()->url()); 2635 factory->pending_requests()[0]->script_data()->url());
2631 } 2636 }
2632 2637
2633 TEST_F(ProxyServiceTest, ResetProxyConfigService) { 2638 TEST_F(ProxyServiceTest, ResetProxyConfigService) {
2634 ProxyConfig config1; 2639 ProxyConfig config1;
2635 config1.proxy_rules().ParseFromString("foopy1:8080"); 2640 config1.proxy_rules().ParseFromString("foopy1:8080");
2636 config1.set_auto_detect(false); 2641 config1.set_auto_detect(false);
2637 ProxyService service(base::WrapUnique(new MockProxyConfigService(config1)), 2642 ProxyService service(base::WrapUnique(new MockProxyConfigService(config1)),
2638 nullptr, nullptr); 2643 nullptr, nullptr);
2639 2644
2640 ProxyInfo info; 2645 ProxyInfo info;
2641 TestCompletionCallback callback1; 2646 TestCompletionCallback callback1;
2642 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), 2647 int rv = service.ResolveProxy(GURL("http://request1"), std::string(),
2643 LOAD_NORMAL, &info, callback1.callback(), 2648 LOAD_NORMAL, &info, callback1.callback(),
2644 nullptr, nullptr, BoundNetLog()); 2649 nullptr, nullptr, BoundNetLog());
2645 EXPECT_EQ(OK, rv); 2650 EXPECT_THAT(rv, IsOk());
2646 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 2651 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
2647 2652
2648 ProxyConfig config2; 2653 ProxyConfig config2;
2649 config2.proxy_rules().ParseFromString("foopy2:8080"); 2654 config2.proxy_rules().ParseFromString("foopy2:8080");
2650 config2.set_auto_detect(false); 2655 config2.set_auto_detect(false);
2651 service.ResetConfigService( 2656 service.ResetConfigService(
2652 base::WrapUnique(new MockProxyConfigService(config2))); 2657 base::WrapUnique(new MockProxyConfigService(config2)));
2653 TestCompletionCallback callback2; 2658 TestCompletionCallback callback2;
2654 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, 2659 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL,
2655 &info, callback2.callback(), nullptr, nullptr, 2660 &info, callback2.callback(), nullptr, nullptr,
2656 BoundNetLog()); 2661 BoundNetLog());
2657 EXPECT_EQ(OK, rv); 2662 EXPECT_THAT(rv, IsOk());
2658 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); 2663 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI());
2659 } 2664 }
2660 2665
2661 // Test that when going from a configuration that required PAC to one 2666 // Test that when going from a configuration that required PAC to one
2662 // that does NOT, we unset the variable |should_use_proxy_resolver_|. 2667 // that does NOT, we unset the variable |should_use_proxy_resolver_|.
2663 TEST_F(ProxyServiceTest, UpdateConfigFromPACToDirect) { 2668 TEST_F(ProxyServiceTest, UpdateConfigFromPACToDirect) {
2664 ProxyConfig config = ProxyConfig::CreateAutoDetect(); 2669 ProxyConfig config = ProxyConfig::CreateAutoDetect();
2665 2670
2666 MockProxyConfigService* config_service = new MockProxyConfigService(config); 2671 MockProxyConfigService* config_service = new MockProxyConfigService(config);
2667 MockAsyncProxyResolver resolver; 2672 MockAsyncProxyResolver resolver;
2668 MockAsyncProxyResolverFactory* factory = 2673 MockAsyncProxyResolverFactory* factory =
2669 new MockAsyncProxyResolverFactory(false); 2674 new MockAsyncProxyResolverFactory(false);
2670 ProxyService service(base::WrapUnique(config_service), 2675 ProxyService service(base::WrapUnique(config_service),
2671 base::WrapUnique(factory), nullptr); 2676 base::WrapUnique(factory), nullptr);
2672 2677
2673 // Start 1 request. 2678 // Start 1 request.
2674 2679
2675 ProxyInfo info1; 2680 ProxyInfo info1;
2676 TestCompletionCallback callback1; 2681 TestCompletionCallback callback1;
2677 int rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(), 2682 int rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(),
2678 LOAD_NORMAL, &info1, callback1.callback(), 2683 LOAD_NORMAL, &info1, callback1.callback(),
2679 nullptr, nullptr, BoundNetLog()); 2684 nullptr, nullptr, BoundNetLog());
2680 EXPECT_EQ(ERR_IO_PENDING, rv); 2685 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2681 2686
2682 // Successfully set the autodetect script. 2687 // Successfully set the autodetect script.
2683 EXPECT_EQ(ProxyResolverScriptData::TYPE_AUTO_DETECT, 2688 EXPECT_EQ(ProxyResolverScriptData::TYPE_AUTO_DETECT,
2684 factory->pending_requests()[0]->script_data()->type()); 2689 factory->pending_requests()[0]->script_data()->type());
2685 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2690 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2686 2691
2687 // Complete the pending request. 2692 // Complete the pending request.
2688 ASSERT_EQ(1u, resolver.pending_requests().size()); 2693 ASSERT_EQ(1u, resolver.pending_requests().size());
2689 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); 2694 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80");
2690 resolver.pending_requests()[0]->CompleteNow(OK); 2695 resolver.pending_requests()[0]->CompleteNow(OK);
2691 2696
2692 // Verify that request ran as expected. 2697 // Verify that request ran as expected.
2693 EXPECT_EQ(OK, callback1.WaitForResult()); 2698 EXPECT_THAT(callback1.WaitForResult(), IsOk());
2694 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 2699 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
2695 2700
2696 // Force the ProxyService to pull down a new proxy configuration. 2701 // Force the ProxyService to pull down a new proxy configuration.
2697 // (Even though the configuration isn't old/bad). 2702 // (Even though the configuration isn't old/bad).
2698 // 2703 //
2699 // This new configuration no longer has auto_detect set, so 2704 // This new configuration no longer has auto_detect set, so
2700 // requests should complete synchronously now as direct-connect. 2705 // requests should complete synchronously now as direct-connect.
2701 config_service->SetConfig(ProxyConfig::CreateDirect()); 2706 config_service->SetConfig(ProxyConfig::CreateDirect());
2702 2707
2703 // Start another request -- the effective configuration has changed. 2708 // Start another request -- the effective configuration has changed.
2704 ProxyInfo info2; 2709 ProxyInfo info2;
2705 TestCompletionCallback callback2; 2710 TestCompletionCallback callback2;
2706 rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(), 2711 rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(),
2707 LOAD_NORMAL, &info2, callback2.callback(), nullptr, 2712 LOAD_NORMAL, &info2, callback2.callback(), nullptr,
2708 nullptr, BoundNetLog()); 2713 nullptr, BoundNetLog());
2709 EXPECT_EQ(OK, rv); 2714 EXPECT_THAT(rv, IsOk());
2710 2715
2711 EXPECT_TRUE(info2.is_direct()); 2716 EXPECT_TRUE(info2.is_direct());
2712 } 2717 }
2713 2718
2714 TEST_F(ProxyServiceTest, NetworkChangeTriggersPacRefetch) { 2719 TEST_F(ProxyServiceTest, NetworkChangeTriggersPacRefetch) {
2715 MockProxyConfigService* config_service = 2720 MockProxyConfigService* config_service =
2716 new MockProxyConfigService("http://foopy/proxy.pac"); 2721 new MockProxyConfigService("http://foopy/proxy.pac");
2717 2722
2718 MockAsyncProxyResolver resolver; 2723 MockAsyncProxyResolver resolver;
2719 MockAsyncProxyResolverFactory* factory = 2724 MockAsyncProxyResolverFactory* factory =
(...skipping 12 matching lines...) Expand all
2732 // complete quickly. 2737 // complete quickly.
2733 service.set_stall_proxy_auto_config_delay(base::TimeDelta()); 2738 service.set_stall_proxy_auto_config_delay(base::TimeDelta());
2734 2739
2735 // Start 1 request. 2740 // Start 1 request.
2736 2741
2737 ProxyInfo info1; 2742 ProxyInfo info1;
2738 TestCompletionCallback callback1; 2743 TestCompletionCallback callback1;
2739 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), 2744 int rv = service.ResolveProxy(GURL("http://request1"), std::string(),
2740 LOAD_NORMAL, &info1, callback1.callback(), 2745 LOAD_NORMAL, &info1, callback1.callback(),
2741 nullptr, nullptr, BoundNetLog()); 2746 nullptr, nullptr, BoundNetLog());
2742 EXPECT_EQ(ERR_IO_PENDING, rv); 2747 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2743 2748
2744 // The first request should have triggered initial download of PAC script. 2749 // The first request should have triggered initial download of PAC script.
2745 EXPECT_TRUE(fetcher->has_pending_request()); 2750 EXPECT_TRUE(fetcher->has_pending_request());
2746 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2751 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2747 2752
2748 // Nothing has been sent to the factory yet. 2753 // Nothing has been sent to the factory yet.
2749 EXPECT_TRUE(factory->pending_requests().empty()); 2754 EXPECT_TRUE(factory->pending_requests().empty());
2750 2755
2751 // At this point the ProxyService should be waiting for the 2756 // At this point the ProxyService should be waiting for the
2752 // ProxyScriptFetcher to invoke its completion callback, notifying it of 2757 // ProxyScriptFetcher to invoke its completion callback, notifying it of
2753 // PAC script download completion. 2758 // PAC script download completion.
2754 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 2759 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
2755 2760
2756 // Now that the PAC script is downloaded, the request will have been sent to 2761 // Now that the PAC script is downloaded, the request will have been sent to
2757 // the proxy resolver. 2762 // the proxy resolver.
2758 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), 2763 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1),
2759 factory->pending_requests()[0]->script_data()->utf16()); 2764 factory->pending_requests()[0]->script_data()->utf16());
2760 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2765 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2761 2766
2762 ASSERT_EQ(1u, resolver.pending_requests().size()); 2767 ASSERT_EQ(1u, resolver.pending_requests().size());
2763 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); 2768 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url());
2764 2769
2765 // Complete the pending request. 2770 // Complete the pending request.
2766 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); 2771 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80");
2767 resolver.pending_requests()[0]->CompleteNow(OK); 2772 resolver.pending_requests()[0]->CompleteNow(OK);
2768 2773
2769 // Wait for completion callback, and verify that the request ran as expected. 2774 // Wait for completion callback, and verify that the request ran as expected.
2770 EXPECT_EQ(OK, callback1.WaitForResult()); 2775 EXPECT_THAT(callback1.WaitForResult(), IsOk());
2771 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 2776 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
2772 2777
2773 // Now simluate a change in the network. The ProxyConfigService is still 2778 // Now simluate a change in the network. The ProxyConfigService is still
2774 // going to return the same PAC URL as before, but this URL needs to be 2779 // going to return the same PAC URL as before, but this URL needs to be
2775 // refetched on the new network. 2780 // refetched on the new network.
2776 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); 2781 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
2777 base::RunLoop().RunUntilIdle(); // Notification happens async. 2782 base::RunLoop().RunUntilIdle(); // Notification happens async.
2778 2783
2779 // Start a second request. 2784 // Start a second request.
2780 ProxyInfo info2; 2785 ProxyInfo info2;
2781 TestCompletionCallback callback2; 2786 TestCompletionCallback callback2;
2782 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, 2787 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL,
2783 &info2, callback2.callback(), nullptr, nullptr, 2788 &info2, callback2.callback(), nullptr, nullptr,
2784 BoundNetLog()); 2789 BoundNetLog());
2785 EXPECT_EQ(ERR_IO_PENDING, rv); 2790 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2786 2791
2787 // This second request should have triggered the re-download of the PAC 2792 // This second request should have triggered the re-download of the PAC
2788 // script (since we marked the network as having changed). 2793 // script (since we marked the network as having changed).
2789 EXPECT_TRUE(fetcher->has_pending_request()); 2794 EXPECT_TRUE(fetcher->has_pending_request());
2790 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2795 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2791 2796
2792 // Nothing has been sent to the factory yet. 2797 // Nothing has been sent to the factory yet.
2793 EXPECT_TRUE(factory->pending_requests().empty()); 2798 EXPECT_TRUE(factory->pending_requests().empty());
2794 2799
2795 // Simulate the PAC script fetch as having completed (this time with 2800 // Simulate the PAC script fetch as having completed (this time with
2796 // different data). 2801 // different data).
2797 fetcher->NotifyFetchCompletion(OK, kValidPacScript2); 2802 fetcher->NotifyFetchCompletion(OK, kValidPacScript2);
2798 2803
2799 // Now that the PAC script is downloaded, the second request will have been 2804 // Now that the PAC script is downloaded, the second request will have been
2800 // sent to the proxy resolver. 2805 // sent to the proxy resolver.
2801 EXPECT_EQ(ASCIIToUTF16(kValidPacScript2), 2806 EXPECT_EQ(ASCIIToUTF16(kValidPacScript2),
2802 factory->pending_requests()[0]->script_data()->utf16()); 2807 factory->pending_requests()[0]->script_data()->utf16());
2803 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2808 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2804 2809
2805 ASSERT_EQ(1u, resolver.pending_requests().size()); 2810 ASSERT_EQ(1u, resolver.pending_requests().size());
2806 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); 2811 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url());
2807 2812
2808 // Complete the pending second request. 2813 // Complete the pending second request.
2809 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); 2814 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80");
2810 resolver.pending_requests()[0]->CompleteNow(OK); 2815 resolver.pending_requests()[0]->CompleteNow(OK);
2811 2816
2812 // Wait for completion callback, and verify that the request ran as expected. 2817 // Wait for completion callback, and verify that the request ran as expected.
2813 EXPECT_EQ(OK, callback2.WaitForResult()); 2818 EXPECT_THAT(callback2.WaitForResult(), IsOk());
2814 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 2819 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
2815 2820
2816 // Check that the expected events were output to the log stream. In particular 2821 // Check that the expected events were output to the log stream. In particular
2817 // PROXY_CONFIG_CHANGED should have only been emitted once (for the initial 2822 // PROXY_CONFIG_CHANGED should have only been emitted once (for the initial
2818 // setup), and NOT a second time when the IP address changed. 2823 // setup), and NOT a second time when the IP address changed.
2819 TestNetLogEntry::List entries; 2824 TestNetLogEntry::List entries;
2820 log.GetEntries(&entries); 2825 log.GetEntries(&entries);
2821 2826
2822 EXPECT_TRUE(LogContainsEntryWithType(entries, 0, 2827 EXPECT_TRUE(LogContainsEntryWithType(entries, 0,
2823 NetLog::TYPE_PROXY_CONFIG_CHANGED)); 2828 NetLog::TYPE_PROXY_CONFIG_CHANGED));
(...skipping 26 matching lines...) Expand all
2850 service.SetProxyScriptFetchers( 2855 service.SetProxyScriptFetchers(
2851 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2856 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2852 2857
2853 // Start 1 request. 2858 // Start 1 request.
2854 2859
2855 ProxyInfo info1; 2860 ProxyInfo info1;
2856 TestCompletionCallback callback1; 2861 TestCompletionCallback callback1;
2857 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), 2862 int rv = service.ResolveProxy(GURL("http://request1"), std::string(),
2858 LOAD_NORMAL, &info1, callback1.callback(), 2863 LOAD_NORMAL, &info1, callback1.callback(),
2859 nullptr, nullptr, BoundNetLog()); 2864 nullptr, nullptr, BoundNetLog());
2860 EXPECT_EQ(ERR_IO_PENDING, rv); 2865 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2861 2866
2862 // The first request should have triggered initial download of PAC script. 2867 // The first request should have triggered initial download of PAC script.
2863 EXPECT_TRUE(fetcher->has_pending_request()); 2868 EXPECT_TRUE(fetcher->has_pending_request());
2864 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2869 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2865 2870
2866 // Nothing has been sent to the factory yet. 2871 // Nothing has been sent to the factory yet.
2867 EXPECT_TRUE(factory->pending_requests().empty()); 2872 EXPECT_TRUE(factory->pending_requests().empty());
2868 2873
2869 // At this point the ProxyService should be waiting for the 2874 // At this point the ProxyService should be waiting for the
2870 // ProxyScriptFetcher to invoke its completion callback, notifying it of 2875 // ProxyScriptFetcher to invoke its completion callback, notifying it of
2871 // PAC script download completion. 2876 // PAC script download completion.
2872 // 2877 //
2873 // We simulate a failed download attempt, the proxy service should now 2878 // We simulate a failed download attempt, the proxy service should now
2874 // fall-back to DIRECT connections. 2879 // fall-back to DIRECT connections.
2875 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); 2880 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string());
2876 2881
2877 ASSERT_TRUE(factory->pending_requests().empty()); 2882 ASSERT_TRUE(factory->pending_requests().empty());
2878 2883
2879 // Wait for completion callback, and verify it used DIRECT. 2884 // Wait for completion callback, and verify it used DIRECT.
2880 EXPECT_EQ(OK, callback1.WaitForResult()); 2885 EXPECT_THAT(callback1.WaitForResult(), IsOk());
2881 EXPECT_TRUE(info1.is_direct()); 2886 EXPECT_TRUE(info1.is_direct());
2882 2887
2883 // At this point we have initialized the proxy service using a PAC script, 2888 // At this point we have initialized the proxy service using a PAC script,
2884 // however it failed and fell-back to DIRECT. 2889 // however it failed and fell-back to DIRECT.
2885 // 2890 //
2886 // A background task to periodically re-check the PAC script for validity will 2891 // A background task to periodically re-check the PAC script for validity will
2887 // have been started. We will now wait for the next download attempt to start. 2892 // have been started. We will now wait for the next download attempt to start.
2888 // 2893 //
2889 // Note that we shouldn't have to wait long here, since our test enables a 2894 // Note that we shouldn't have to wait long here, since our test enables a
2890 // special unit-test mode. 2895 // special unit-test mode.
(...skipping 20 matching lines...) Expand all
2911 // PAC script (thereby recovering from the initial fetch failure). We will 2916 // PAC script (thereby recovering from the initial fetch failure). We will
2912 // verify that the next Resolve request uses the resolver rather than 2917 // verify that the next Resolve request uses the resolver rather than
2913 // DIRECT. 2918 // DIRECT.
2914 2919
2915 // Start a second request. 2920 // Start a second request.
2916 ProxyInfo info2; 2921 ProxyInfo info2;
2917 TestCompletionCallback callback2; 2922 TestCompletionCallback callback2;
2918 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, 2923 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL,
2919 &info2, callback2.callback(), nullptr, nullptr, 2924 &info2, callback2.callback(), nullptr, nullptr,
2920 BoundNetLog()); 2925 BoundNetLog());
2921 EXPECT_EQ(ERR_IO_PENDING, rv); 2926 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2922 2927
2923 // Check that it was sent to the resolver. 2928 // Check that it was sent to the resolver.
2924 ASSERT_EQ(1u, resolver.pending_requests().size()); 2929 ASSERT_EQ(1u, resolver.pending_requests().size());
2925 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); 2930 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url());
2926 2931
2927 // Complete the pending second request. 2932 // Complete the pending second request.
2928 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); 2933 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80");
2929 resolver.pending_requests()[0]->CompleteNow(OK); 2934 resolver.pending_requests()[0]->CompleteNow(OK);
2930 2935
2931 // Wait for completion callback, and verify that the request ran as expected. 2936 // Wait for completion callback, and verify that the request ran as expected.
2932 EXPECT_EQ(OK, callback2.WaitForResult()); 2937 EXPECT_THAT(callback2.WaitForResult(), IsOk());
2933 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 2938 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
2934 } 2939 }
2935 2940
2936 // This test verifies that the PAC script specified by the settings is 2941 // This test verifies that the PAC script specified by the settings is
2937 // periodically polled for changes. Specifically, if the initial fetch succeeds, 2942 // periodically polled for changes. Specifically, if the initial fetch succeeds,
2938 // however at a later time its *contents* change, we will eventually 2943 // however at a later time its *contents* change, we will eventually
2939 // re-configure the service to use the new script. 2944 // re-configure the service to use the new script.
2940 TEST_F(ProxyServiceTest, PACScriptRefetchAfterContentChange) { 2945 TEST_F(ProxyServiceTest, PACScriptRefetchAfterContentChange) {
2941 // Change the retry policy to wait a mere 1 ms before retrying, so the test 2946 // Change the retry policy to wait a mere 1 ms before retrying, so the test
2942 // runs quickly. 2947 // runs quickly.
(...skipping 14 matching lines...) Expand all
2957 service.SetProxyScriptFetchers( 2962 service.SetProxyScriptFetchers(
2958 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2963 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2959 2964
2960 // Start 1 request. 2965 // Start 1 request.
2961 2966
2962 ProxyInfo info1; 2967 ProxyInfo info1;
2963 TestCompletionCallback callback1; 2968 TestCompletionCallback callback1;
2964 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), 2969 int rv = service.ResolveProxy(GURL("http://request1"), std::string(),
2965 LOAD_NORMAL, &info1, callback1.callback(), 2970 LOAD_NORMAL, &info1, callback1.callback(),
2966 nullptr, nullptr, BoundNetLog()); 2971 nullptr, nullptr, BoundNetLog());
2967 EXPECT_EQ(ERR_IO_PENDING, rv); 2972 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2968 2973
2969 // The first request should have triggered initial download of PAC script. 2974 // The first request should have triggered initial download of PAC script.
2970 EXPECT_TRUE(fetcher->has_pending_request()); 2975 EXPECT_TRUE(fetcher->has_pending_request());
2971 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2976 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2972 2977
2973 // Nothing has been sent to the factory yet. 2978 // Nothing has been sent to the factory yet.
2974 EXPECT_TRUE(factory->pending_requests().empty()); 2979 EXPECT_TRUE(factory->pending_requests().empty());
2975 2980
2976 // At this point the ProxyService should be waiting for the 2981 // At this point the ProxyService should be waiting for the
2977 // ProxyScriptFetcher to invoke its completion callback, notifying it of 2982 // ProxyScriptFetcher to invoke its completion callback, notifying it of
2978 // PAC script download completion. 2983 // PAC script download completion.
2979 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 2984 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
2980 2985
2981 // Now that the PAC script is downloaded, the request will have been sent to 2986 // Now that the PAC script is downloaded, the request will have been sent to
2982 // the proxy resolver. 2987 // the proxy resolver.
2983 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), 2988 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1),
2984 factory->pending_requests()[0]->script_data()->utf16()); 2989 factory->pending_requests()[0]->script_data()->utf16());
2985 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2990 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2986 2991
2987 ASSERT_EQ(1u, resolver.pending_requests().size()); 2992 ASSERT_EQ(1u, resolver.pending_requests().size());
2988 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); 2993 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url());
2989 2994
2990 // Complete the pending request. 2995 // Complete the pending request.
2991 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); 2996 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80");
2992 resolver.pending_requests()[0]->CompleteNow(OK); 2997 resolver.pending_requests()[0]->CompleteNow(OK);
2993 2998
2994 // Wait for completion callback, and verify that the request ran as expected. 2999 // Wait for completion callback, and verify that the request ran as expected.
2995 EXPECT_EQ(OK, callback1.WaitForResult()); 3000 EXPECT_THAT(callback1.WaitForResult(), IsOk());
2996 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 3001 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
2997 3002
2998 // At this point we have initialized the proxy service using a PAC script. 3003 // At this point we have initialized the proxy service using a PAC script.
2999 // 3004 //
3000 // A background task to periodically re-check the PAC script for validity will 3005 // A background task to periodically re-check the PAC script for validity will
3001 // have been started. We will now wait for the next download attempt to start. 3006 // have been started. We will now wait for the next download attempt to start.
3002 // 3007 //
3003 // Note that we shouldn't have to wait long here, since our test enables a 3008 // Note that we shouldn't have to wait long here, since our test enables a
3004 // special unit-test mode. 3009 // special unit-test mode.
3005 fetcher->WaitUntilFetch(); 3010 fetcher->WaitUntilFetch();
(...skipping 18 matching lines...) Expand all
3024 3029
3025 // At this point the ProxyService should have re-configured itself to use the 3030 // At this point the ProxyService should have re-configured itself to use the
3026 // new PAC script. 3031 // new PAC script.
3027 3032
3028 // Start a second request. 3033 // Start a second request.
3029 ProxyInfo info2; 3034 ProxyInfo info2;
3030 TestCompletionCallback callback2; 3035 TestCompletionCallback callback2;
3031 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, 3036 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL,
3032 &info2, callback2.callback(), nullptr, nullptr, 3037 &info2, callback2.callback(), nullptr, nullptr,
3033 BoundNetLog()); 3038 BoundNetLog());
3034 EXPECT_EQ(ERR_IO_PENDING, rv); 3039 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
3035 3040
3036 // Check that it was sent to the resolver. 3041 // Check that it was sent to the resolver.
3037 ASSERT_EQ(1u, resolver.pending_requests().size()); 3042 ASSERT_EQ(1u, resolver.pending_requests().size());
3038 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); 3043 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url());
3039 3044
3040 // Complete the pending second request. 3045 // Complete the pending second request.
3041 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); 3046 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80");
3042 resolver.pending_requests()[0]->CompleteNow(OK); 3047 resolver.pending_requests()[0]->CompleteNow(OK);
3043 3048
3044 // Wait for completion callback, and verify that the request ran as expected. 3049 // Wait for completion callback, and verify that the request ran as expected.
3045 EXPECT_EQ(OK, callback2.WaitForResult()); 3050 EXPECT_THAT(callback2.WaitForResult(), IsOk());
3046 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 3051 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
3047 } 3052 }
3048 3053
3049 // This test verifies that the PAC script specified by the settings is 3054 // This test verifies that the PAC script specified by the settings is
3050 // periodically polled for changes. Specifically, if the initial fetch succeeds 3055 // periodically polled for changes. Specifically, if the initial fetch succeeds
3051 // and so does the next poll, however the contents of the downloaded script 3056 // and so does the next poll, however the contents of the downloaded script
3052 // have NOT changed, then we do not bother to re-initialize the proxy resolver. 3057 // have NOT changed, then we do not bother to re-initialize the proxy resolver.
3053 TEST_F(ProxyServiceTest, PACScriptRefetchAfterContentUnchanged) { 3058 TEST_F(ProxyServiceTest, PACScriptRefetchAfterContentUnchanged) {
3054 // Change the retry policy to wait a mere 1 ms before retrying, so the test 3059 // Change the retry policy to wait a mere 1 ms before retrying, so the test
3055 // runs quickly. 3060 // runs quickly.
(...skipping 14 matching lines...) Expand all
3070 service.SetProxyScriptFetchers( 3075 service.SetProxyScriptFetchers(
3071 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 3076 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
3072 3077
3073 // Start 1 request. 3078 // Start 1 request.
3074 3079
3075 ProxyInfo info1; 3080 ProxyInfo info1;
3076 TestCompletionCallback callback1; 3081 TestCompletionCallback callback1;
3077 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), 3082 int rv = service.ResolveProxy(GURL("http://request1"), std::string(),
3078 LOAD_NORMAL, &info1, callback1.callback(), 3083 LOAD_NORMAL, &info1, callback1.callback(),
3079 nullptr, nullptr, BoundNetLog()); 3084 nullptr, nullptr, BoundNetLog());
3080 EXPECT_EQ(ERR_IO_PENDING, rv); 3085 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
3081 3086
3082 // The first request should have triggered initial download of PAC script. 3087 // The first request should have triggered initial download of PAC script.
3083 EXPECT_TRUE(fetcher->has_pending_request()); 3088 EXPECT_TRUE(fetcher->has_pending_request());
3084 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 3089 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
3085 3090
3086 // Nothing has been sent to the factory yet. 3091 // Nothing has been sent to the factory yet.
3087 EXPECT_TRUE(factory->pending_requests().empty()); 3092 EXPECT_TRUE(factory->pending_requests().empty());
3088 3093
3089 // At this point the ProxyService should be waiting for the 3094 // At this point the ProxyService should be waiting for the
3090 // ProxyScriptFetcher to invoke its completion callback, notifying it of 3095 // ProxyScriptFetcher to invoke its completion callback, notifying it of
3091 // PAC script download completion. 3096 // PAC script download completion.
3092 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 3097 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
3093 3098
3094 // Now that the PAC script is downloaded, the request will have been sent to 3099 // Now that the PAC script is downloaded, the request will have been sent to
3095 // the proxy resolver. 3100 // the proxy resolver.
3096 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), 3101 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1),
3097 factory->pending_requests()[0]->script_data()->utf16()); 3102 factory->pending_requests()[0]->script_data()->utf16());
3098 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 3103 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
3099 3104
3100 ASSERT_EQ(1u, resolver.pending_requests().size()); 3105 ASSERT_EQ(1u, resolver.pending_requests().size());
3101 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); 3106 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url());
3102 3107
3103 // Complete the pending request. 3108 // Complete the pending request.
3104 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); 3109 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80");
3105 resolver.pending_requests()[0]->CompleteNow(OK); 3110 resolver.pending_requests()[0]->CompleteNow(OK);
3106 3111
3107 // Wait for completion callback, and verify that the request ran as expected. 3112 // Wait for completion callback, and verify that the request ran as expected.
3108 EXPECT_EQ(OK, callback1.WaitForResult()); 3113 EXPECT_THAT(callback1.WaitForResult(), IsOk());
3109 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 3114 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
3110 3115
3111 // At this point we have initialized the proxy service using a PAC script. 3116 // At this point we have initialized the proxy service using a PAC script.
3112 // 3117 //
3113 // A background task to periodically re-check the PAC script for validity will 3118 // A background task to periodically re-check the PAC script for validity will
3114 // have been started. We will now wait for the next download attempt to start. 3119 // have been started. We will now wait for the next download attempt to start.
3115 // 3120 //
3116 // Note that we shouldn't have to wait long here, since our test enables a 3121 // Note that we shouldn't have to wait long here, since our test enables a
3117 // special unit-test mode. 3122 // special unit-test mode.
3118 fetcher->WaitUntilFetch(); 3123 fetcher->WaitUntilFetch();
(...skipping 15 matching lines...) Expand all
3134 3139
3135 // At this point the ProxyService is still running the same PAC script as 3140 // At this point the ProxyService is still running the same PAC script as
3136 // before. 3141 // before.
3137 3142
3138 // Start a second request. 3143 // Start a second request.
3139 ProxyInfo info2; 3144 ProxyInfo info2;
3140 TestCompletionCallback callback2; 3145 TestCompletionCallback callback2;
3141 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, 3146 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL,
3142 &info2, callback2.callback(), nullptr, nullptr, 3147 &info2, callback2.callback(), nullptr, nullptr,
3143 BoundNetLog()); 3148 BoundNetLog());
3144 EXPECT_EQ(ERR_IO_PENDING, rv); 3149 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
3145 3150
3146 // Check that it was sent to the resolver. 3151 // Check that it was sent to the resolver.
3147 ASSERT_EQ(1u, resolver.pending_requests().size()); 3152 ASSERT_EQ(1u, resolver.pending_requests().size());
3148 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); 3153 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url());
3149 3154
3150 // Complete the pending second request. 3155 // Complete the pending second request.
3151 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); 3156 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80");
3152 resolver.pending_requests()[0]->CompleteNow(OK); 3157 resolver.pending_requests()[0]->CompleteNow(OK);
3153 3158
3154 // Wait for completion callback, and verify that the request ran as expected. 3159 // Wait for completion callback, and verify that the request ran as expected.
3155 EXPECT_EQ(OK, callback2.WaitForResult()); 3160 EXPECT_THAT(callback2.WaitForResult(), IsOk());
3156 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 3161 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
3157 } 3162 }
3158 3163
3159 // This test verifies that the PAC script specified by the settings is 3164 // This test verifies that the PAC script specified by the settings is
3160 // periodically polled for changes. Specifically, if the initial fetch succeeds, 3165 // periodically polled for changes. Specifically, if the initial fetch succeeds,
3161 // however at a later time it starts to fail, we should re-configure the 3166 // however at a later time it starts to fail, we should re-configure the
3162 // ProxyService to stop using that PAC script. 3167 // ProxyService to stop using that PAC script.
3163 TEST_F(ProxyServiceTest, PACScriptRefetchAfterSuccess) { 3168 TEST_F(ProxyServiceTest, PACScriptRefetchAfterSuccess) {
3164 // Change the retry policy to wait a mere 1 ms before retrying, so the test 3169 // Change the retry policy to wait a mere 1 ms before retrying, so the test
3165 // runs quickly. 3170 // runs quickly.
(...skipping 14 matching lines...) Expand all
3180 service.SetProxyScriptFetchers( 3185 service.SetProxyScriptFetchers(
3181 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 3186 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
3182 3187
3183 // Start 1 request. 3188 // Start 1 request.
3184 3189
3185 ProxyInfo info1; 3190 ProxyInfo info1;
3186 TestCompletionCallback callback1; 3191 TestCompletionCallback callback1;
3187 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), 3192 int rv = service.ResolveProxy(GURL("http://request1"), std::string(),
3188 LOAD_NORMAL, &info1, callback1.callback(), 3193 LOAD_NORMAL, &info1, callback1.callback(),
3189 nullptr, nullptr, BoundNetLog()); 3194 nullptr, nullptr, BoundNetLog());
3190 EXPECT_EQ(ERR_IO_PENDING, rv); 3195 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
3191 3196
3192 // The first request should have triggered initial download of PAC script. 3197 // The first request should have triggered initial download of PAC script.
3193 EXPECT_TRUE(fetcher->has_pending_request()); 3198 EXPECT_TRUE(fetcher->has_pending_request());
3194 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 3199 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
3195 3200
3196 // Nothing has been sent to the factory yet. 3201 // Nothing has been sent to the factory yet.
3197 EXPECT_TRUE(factory->pending_requests().empty()); 3202 EXPECT_TRUE(factory->pending_requests().empty());
3198 3203
3199 // At this point the ProxyService should be waiting for the 3204 // At this point the ProxyService should be waiting for the
3200 // ProxyScriptFetcher to invoke its completion callback, notifying it of 3205 // ProxyScriptFetcher to invoke its completion callback, notifying it of
3201 // PAC script download completion. 3206 // PAC script download completion.
3202 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 3207 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
3203 3208
3204 // Now that the PAC script is downloaded, the request will have been sent to 3209 // Now that the PAC script is downloaded, the request will have been sent to
3205 // the proxy resolver. 3210 // the proxy resolver.
3206 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), 3211 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1),
3207 factory->pending_requests()[0]->script_data()->utf16()); 3212 factory->pending_requests()[0]->script_data()->utf16());
3208 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 3213 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
3209 3214
3210 ASSERT_EQ(1u, resolver.pending_requests().size()); 3215 ASSERT_EQ(1u, resolver.pending_requests().size());
3211 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); 3216 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url());
3212 3217
3213 // Complete the pending request. 3218 // Complete the pending request.
3214 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); 3219 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80");
3215 resolver.pending_requests()[0]->CompleteNow(OK); 3220 resolver.pending_requests()[0]->CompleteNow(OK);
3216 3221
3217 // Wait for completion callback, and verify that the request ran as expected. 3222 // Wait for completion callback, and verify that the request ran as expected.
3218 EXPECT_EQ(OK, callback1.WaitForResult()); 3223 EXPECT_THAT(callback1.WaitForResult(), IsOk());
3219 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 3224 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
3220 3225
3221 // At this point we have initialized the proxy service using a PAC script. 3226 // At this point we have initialized the proxy service using a PAC script.
3222 // 3227 //
3223 // A background task to periodically re-check the PAC script for validity will 3228 // A background task to periodically re-check the PAC script for validity will
3224 // have been started. We will now wait for the next download attempt to start. 3229 // have been started. We will now wait for the next download attempt to start.
3225 // 3230 //
3226 // Note that we shouldn't have to wait long here, since our test enables a 3231 // Note that we shouldn't have to wait long here, since our test enables a
3227 // special unit-test mode. 3232 // special unit-test mode.
3228 fetcher->WaitUntilFetch(); 3233 fetcher->WaitUntilFetch();
(...skipping 12 matching lines...) Expand all
3241 3246
3242 // At this point the ProxyService should have re-configured itself to use 3247 // At this point the ProxyService should have re-configured itself to use
3243 // DIRECT connections rather than the given proxy resolver. 3248 // DIRECT connections rather than the given proxy resolver.
3244 3249
3245 // Start a second request. 3250 // Start a second request.
3246 ProxyInfo info2; 3251 ProxyInfo info2;
3247 TestCompletionCallback callback2; 3252 TestCompletionCallback callback2;
3248 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, 3253 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL,
3249 &info2, callback2.callback(), nullptr, nullptr, 3254 &info2, callback2.callback(), nullptr, nullptr,
3250 BoundNetLog()); 3255 BoundNetLog());
3251 EXPECT_EQ(OK, rv); 3256 EXPECT_THAT(rv, IsOk());
3252 EXPECT_TRUE(info2.is_direct()); 3257 EXPECT_TRUE(info2.is_direct());
3253 } 3258 }
3254 3259
3255 // Tests that the code which decides at what times to poll the PAC 3260 // Tests that the code which decides at what times to poll the PAC
3256 // script follows the expected policy. 3261 // script follows the expected policy.
3257 TEST_F(ProxyServiceTest, PACScriptPollingPolicy) { 3262 TEST_F(ProxyServiceTest, PACScriptPollingPolicy) {
3258 // Retrieve the internal polling policy implementation used by ProxyService. 3263 // Retrieve the internal polling policy implementation used by ProxyService.
3259 std::unique_ptr<ProxyService::PacPollPolicy> policy = 3264 std::unique_ptr<ProxyService::PacPollPolicy> policy =
3260 ProxyService::CreateDefaultPacPollPolicy(); 3265 ProxyService::CreateDefaultPacPollPolicy();
3261 3266
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
3335 service.SetProxyScriptFetchers( 3340 service.SetProxyScriptFetchers(
3336 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 3341 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
3337 3342
3338 // Start 1 request. 3343 // Start 1 request.
3339 3344
3340 ProxyInfo info1; 3345 ProxyInfo info1;
3341 TestCompletionCallback callback1; 3346 TestCompletionCallback callback1;
3342 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), 3347 int rv = service.ResolveProxy(GURL("http://request1"), std::string(),
3343 LOAD_NORMAL, &info1, callback1.callback(), 3348 LOAD_NORMAL, &info1, callback1.callback(),
3344 nullptr, nullptr, BoundNetLog()); 3349 nullptr, nullptr, BoundNetLog());
3345 EXPECT_EQ(ERR_IO_PENDING, rv); 3350 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
3346 3351
3347 // The first request should have triggered initial download of PAC script. 3352 // The first request should have triggered initial download of PAC script.
3348 EXPECT_TRUE(fetcher->has_pending_request()); 3353 EXPECT_TRUE(fetcher->has_pending_request());
3349 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 3354 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
3350 3355
3351 // Nothing has been sent to the factory yet. 3356 // Nothing has been sent to the factory yet.
3352 EXPECT_TRUE(factory->pending_requests().empty()); 3357 EXPECT_TRUE(factory->pending_requests().empty());
3353 3358
3354 // At this point the ProxyService should be waiting for the 3359 // At this point the ProxyService should be waiting for the
3355 // ProxyScriptFetcher to invoke its completion callback, notifying it of 3360 // ProxyScriptFetcher to invoke its completion callback, notifying it of
3356 // PAC script download completion. 3361 // PAC script download completion.
3357 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 3362 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
3358 3363
3359 // Now that the PAC script is downloaded, the request will have been sent to 3364 // Now that the PAC script is downloaded, the request will have been sent to
3360 // the proxy resolver. 3365 // the proxy resolver.
3361 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), 3366 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1),
3362 factory->pending_requests()[0]->script_data()->utf16()); 3367 factory->pending_requests()[0]->script_data()->utf16());
3363 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 3368 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
3364 3369
3365 ASSERT_EQ(1u, resolver.pending_requests().size()); 3370 ASSERT_EQ(1u, resolver.pending_requests().size());
3366 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); 3371 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url());
3367 3372
3368 // Complete the pending request. 3373 // Complete the pending request.
3369 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); 3374 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80");
3370 resolver.pending_requests()[0]->CompleteNow(OK); 3375 resolver.pending_requests()[0]->CompleteNow(OK);
3371 3376
3372 // Wait for completion callback, and verify that the request ran as expected. 3377 // Wait for completion callback, and verify that the request ran as expected.
3373 EXPECT_EQ(OK, callback1.WaitForResult()); 3378 EXPECT_THAT(callback1.WaitForResult(), IsOk());
3374 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 3379 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
3375 3380
3376 // At this point we have initialized the proxy service using a PAC script. 3381 // At this point we have initialized the proxy service using a PAC script.
3377 // Our PAC poller is set to update ONLY in response to network activity, 3382 // Our PAC poller is set to update ONLY in response to network activity,
3378 // (i.e. another call to ResolveProxy()). 3383 // (i.e. another call to ResolveProxy()).
3379 3384
3380 ASSERT_FALSE(fetcher->has_pending_request()); 3385 ASSERT_FALSE(fetcher->has_pending_request());
3381 ASSERT_TRUE(factory->pending_requests().empty()); 3386 ASSERT_TRUE(factory->pending_requests().empty());
3382 ASSERT_TRUE(resolver.pending_requests().empty()); 3387 ASSERT_TRUE(resolver.pending_requests().empty());
3383 3388
3384 // Start a second request. 3389 // Start a second request.
3385 ProxyInfo info2; 3390 ProxyInfo info2;
3386 TestCompletionCallback callback2; 3391 TestCompletionCallback callback2;
3387 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, 3392 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL,
3388 &info2, callback2.callback(), nullptr, nullptr, 3393 &info2, callback2.callback(), nullptr, nullptr,
3389 BoundNetLog()); 3394 BoundNetLog());
3390 EXPECT_EQ(ERR_IO_PENDING, rv); 3395 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
3391 3396
3392 // This request should have sent work to the resolver; complete it. 3397 // This request should have sent work to the resolver; complete it.
3393 ASSERT_EQ(1u, resolver.pending_requests().size()); 3398 ASSERT_EQ(1u, resolver.pending_requests().size());
3394 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); 3399 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url());
3395 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); 3400 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80");
3396 resolver.pending_requests()[0]->CompleteNow(OK); 3401 resolver.pending_requests()[0]->CompleteNow(OK);
3397 3402
3398 EXPECT_EQ(OK, callback2.WaitForResult()); 3403 EXPECT_THAT(callback2.WaitForResult(), IsOk());
3399 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 3404 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
3400 3405
3401 // In response to getting that resolve request, the poller should have 3406 // In response to getting that resolve request, the poller should have
3402 // started the next poll, and made it as far as to request the download. 3407 // started the next poll, and made it as far as to request the download.
3403 3408
3404 EXPECT_TRUE(fetcher->has_pending_request()); 3409 EXPECT_TRUE(fetcher->has_pending_request());
3405 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 3410 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
3406 3411
3407 // This time we will fail the download, to simulate a PAC script change. 3412 // This time we will fail the download, to simulate a PAC script change.
3408 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); 3413 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string());
3409 3414
3410 // Drain the message loop, so ProxyService is notified of the change 3415 // Drain the message loop, so ProxyService is notified of the change
3411 // and has a chance to re-configure itself. 3416 // and has a chance to re-configure itself.
3412 base::RunLoop().RunUntilIdle(); 3417 base::RunLoop().RunUntilIdle();
3413 3418
3414 // Start a third request -- this time we expect to get a direct connection 3419 // Start a third request -- this time we expect to get a direct connection
3415 // since the PAC script poller experienced a failure. 3420 // since the PAC script poller experienced a failure.
3416 ProxyInfo info3; 3421 ProxyInfo info3;
3417 TestCompletionCallback callback3; 3422 TestCompletionCallback callback3;
3418 rv = service.ResolveProxy(GURL("http://request3"), std::string(), LOAD_NORMAL, 3423 rv = service.ResolveProxy(GURL("http://request3"), std::string(), LOAD_NORMAL,
3419 &info3, callback3.callback(), nullptr, nullptr, 3424 &info3, callback3.callback(), nullptr, nullptr,
3420 BoundNetLog()); 3425 BoundNetLog());
3421 EXPECT_EQ(OK, rv); 3426 EXPECT_THAT(rv, IsOk());
3422 EXPECT_TRUE(info3.is_direct()); 3427 EXPECT_TRUE(info3.is_direct());
3423 } 3428 }
3424 3429
3425 // Test that the synchronous resolution fails when a PAC script is active. 3430 // Test that the synchronous resolution fails when a PAC script is active.
3426 TEST_F(ProxyServiceTest, SynchronousWithPAC) { 3431 TEST_F(ProxyServiceTest, SynchronousWithPAC) {
3427 MockProxyConfigService* config_service = 3432 MockProxyConfigService* config_service =
3428 new MockProxyConfigService("http://foopy/proxy.pac"); 3433 new MockProxyConfigService("http://foopy/proxy.pac");
3429 3434
3430 MockAsyncProxyResolverFactory* factory = 3435 MockAsyncProxyResolverFactory* factory =
3431 new MockAsyncProxyResolverFactory(false); 3436 new MockAsyncProxyResolverFactory(false);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
3492 3497
3493 // Do an initial request to initialize the service (configure the PAC 3498 // Do an initial request to initialize the service (configure the PAC
3494 // script). 3499 // script).
3495 GURL url("http://example.com"); 3500 GURL url("http://example.com");
3496 3501
3497 ProxyInfo info; 3502 ProxyInfo info;
3498 TestCompletionCallback callback; 3503 TestCompletionCallback callback;
3499 int rv = service_->ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 3504 int rv = service_->ResolveProxy(url, std::string(), LOAD_NORMAL, &info,
3500 callback.callback(), nullptr, nullptr, 3505 callback.callback(), nullptr, nullptr,
3501 BoundNetLog()); 3506 BoundNetLog());
3502 EXPECT_EQ(ERR_IO_PENDING, rv); 3507 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
3503 3508
3504 // First step is to download the PAC script. 3509 // First step is to download the PAC script.
3505 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 3510 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
3506 factory->pending_requests()[0]->script_data()->url()); 3511 factory->pending_requests()[0]->script_data()->url());
3507 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 3512 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
3508 3513
3509 EXPECT_EQ(1u, resolver.pending_requests().size()); 3514 EXPECT_EQ(1u, resolver.pending_requests().size());
3510 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 3515 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
3511 3516
3512 // Complete the request. 3517 // Complete the request.
3513 resolver.pending_requests()[0]->results()->UsePacString("DIRECT"); 3518 resolver.pending_requests()[0]->results()->UsePacString("DIRECT");
3514 resolver.pending_requests()[0]->CompleteNow(OK); 3519 resolver.pending_requests()[0]->CompleteNow(OK);
3515 EXPECT_EQ(OK, callback.WaitForResult()); 3520 EXPECT_THAT(callback.WaitForResult(), IsOk());
3516 EXPECT_TRUE(info.is_direct()); 3521 EXPECT_TRUE(info.is_direct());
3517 } 3522 }
3518 3523
3519 // Changes the URL sanitization policy for the underlying ProxyService. This 3524 // Changes the URL sanitization policy for the underlying ProxyService. This
3520 // will affect subsequent calls to SanitizeUrl. 3525 // will affect subsequent calls to SanitizeUrl.
3521 void SetSanitizeUrlPolicy(ProxyService::SanitizeUrlPolicy policy) { 3526 void SetSanitizeUrlPolicy(ProxyService::SanitizeUrlPolicy policy) {
3522 service_->set_sanitize_url_policy(policy); 3527 service_->set_sanitize_url_policy(policy);
3523 } 3528 }
3524 3529
3525 // Makes a proxy resolution request through the ProxyService, and returns the 3530 // Makes a proxy resolution request through the ProxyService, and returns the
3526 // URL that was submitted to the Proxy Resolver. 3531 // URL that was submitted to the Proxy Resolver.
3527 GURL SanitizeUrl(const GURL& raw_url) { 3532 GURL SanitizeUrl(const GURL& raw_url) {
3528 // Issue a request and see what URL is sent to the proxy resolver. 3533 // Issue a request and see what URL is sent to the proxy resolver.
3529 ProxyInfo info; 3534 ProxyInfo info;
3530 TestCompletionCallback callback; 3535 TestCompletionCallback callback;
3531 int rv = service_->ResolveProxy(raw_url, std::string(), LOAD_NORMAL, &info, 3536 int rv = service_->ResolveProxy(raw_url, std::string(), LOAD_NORMAL, &info,
3532 callback.callback(), nullptr, nullptr, 3537 callback.callback(), nullptr, nullptr,
3533 BoundNetLog()); 3538 BoundNetLog());
3534 EXPECT_EQ(ERR_IO_PENDING, rv); 3539 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
3535 3540
3536 EXPECT_EQ(1u, resolver.pending_requests().size()); 3541 EXPECT_EQ(1u, resolver.pending_requests().size());
3537 3542
3538 GURL sanitized_url = resolver.pending_requests()[0]->url(); 3543 GURL sanitized_url = resolver.pending_requests()[0]->url();
3539 3544
3540 // Complete the request. 3545 // Complete the request.
3541 resolver.pending_requests()[0]->results()->UsePacString("DIRECT"); 3546 resolver.pending_requests()[0]->results()->UsePacString("DIRECT");
3542 resolver.pending_requests()[0]->CompleteNow(OK); 3547 resolver.pending_requests()[0]->CompleteNow(OK);
3543 EXPECT_EQ(OK, callback.WaitForResult()); 3548 EXPECT_THAT(callback.WaitForResult(), IsOk());
3544 EXPECT_TRUE(info.is_direct()); 3549 EXPECT_TRUE(info.is_direct());
3545 3550
3546 return sanitized_url; 3551 return sanitized_url;
3547 } 3552 }
3548 3553
3549 // Changes the ProxyService's URL sanitization policy and then sanitizes 3554 // Changes the ProxyService's URL sanitization policy and then sanitizes
3550 // |raw_url|. 3555 // |raw_url|.
3551 GURL SanitizeUrl(const GURL& raw_url, 3556 GURL SanitizeUrl(const GURL& raw_url,
3552 ProxyService::SanitizeUrlPolicy policy) { 3557 ProxyService::SanitizeUrlPolicy policy) {
3553 service_->set_sanitize_url_policy(policy); 3558 service_->set_sanitize_url_policy(policy);
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
3689 GURL(test.sanitized_url_unstripped), 3694 GURL(test.sanitized_url_unstripped),
3690 helper.SanitizeUrl(raw_url, ProxyService::SanitizeUrlPolicy::UNSAFE)); 3695 helper.SanitizeUrl(raw_url, ProxyService::SanitizeUrlPolicy::UNSAFE));
3691 3696
3692 EXPECT_EQ( 3697 EXPECT_EQ(
3693 GURL(test.sanitized_url), 3698 GURL(test.sanitized_url),
3694 helper.SanitizeUrl(raw_url, ProxyService::SanitizeUrlPolicy::SAFE)); 3699 helper.SanitizeUrl(raw_url, ProxyService::SanitizeUrlPolicy::SAFE));
3695 } 3700 }
3696 } 3701 }
3697 3702
3698 } // namespace net 3703 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/proxy_service_mojo_unittest.cc ('k') | net/quic/bidirectional_stream_quic_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698