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

Side by Side Diff: net/http/http_stream_factory_impl_job_controller_unittest.cc

Issue 2895613002: Return Request as unique_ptr from JobController::Start(). (Closed)
Patch Set: Created 3 years, 7 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) 2016 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2016 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/http/http_stream_factory_impl_job_controller.h" 5 #include "net/http/http_stream_factory_impl_job_controller.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 base::WrapUnique(new FailingProxyResolverFactory), nullptr)); 307 base::WrapUnique(new FailingProxyResolverFactory), nullptr));
308 HttpRequestInfo request_info; 308 HttpRequestInfo request_info;
309 request_info.method = "GET"; 309 request_info.method = "GET";
310 request_info.url = GURL("http://www.google.com"); 310 request_info.url = GURL("http://www.google.com");
311 311
312 Initialize(request_info); 312 Initialize(request_info);
313 313
314 EXPECT_CALL(request_delegate_, 314 EXPECT_CALL(request_delegate_,
315 OnStreamFailed(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, _)) 315 OnStreamFailed(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, _))
316 .Times(1); 316 .Times(1);
317 request_.reset( 317 request_ =
318 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 318 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
319 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 319 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
320 320
321 EXPECT_FALSE(job_controller_->main_job()); 321 EXPECT_FALSE(job_controller_->main_job());
322 EXPECT_FALSE(job_controller_->alternative_job()); 322 EXPECT_FALSE(job_controller_->alternative_job());
323 323
324 // Make sure calling GetLoadState() when before job creation does not crash. 324 // Make sure calling GetLoadState() when before job creation does not crash.
325 // Regression test for crbug.com/723920. 325 // Regression test for crbug.com/723920.
326 EXPECT_EQ(LOAD_STATE_IDLE, job_controller_->GetLoadState()); 326 EXPECT_EQ(LOAD_STATE_IDLE, job_controller_->GetLoadState());
327 327
328 base::RunLoop().RunUntilIdle(); 328 base::RunLoop().RunUntilIdle();
329 request_.reset(); 329 request_.reset();
330 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); 330 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_));
331 } 331 }
332 332
333 TEST_F(HttpStreamFactoryImplJobControllerTest, ProxyResolutionFailsAsync) { 333 TEST_F(HttpStreamFactoryImplJobControllerTest, ProxyResolutionFailsAsync) {
334 ProxyConfig proxy_config; 334 ProxyConfig proxy_config;
335 proxy_config.set_pac_url(GURL("http://fooproxyurl")); 335 proxy_config.set_pac_url(GURL("http://fooproxyurl"));
336 proxy_config.set_pac_mandatory(true); 336 proxy_config.set_pac_mandatory(true);
337 MockAsyncProxyResolverFactory* proxy_resolver_factory = 337 MockAsyncProxyResolverFactory* proxy_resolver_factory =
338 new MockAsyncProxyResolverFactory(false); 338 new MockAsyncProxyResolverFactory(false);
339 MockAsyncProxyResolver resolver; 339 MockAsyncProxyResolver resolver;
340 session_deps_.proxy_service.reset( 340 session_deps_.proxy_service.reset(
341 new ProxyService(base::MakeUnique<ProxyConfigServiceFixed>(proxy_config), 341 new ProxyService(base::MakeUnique<ProxyConfigServiceFixed>(proxy_config),
342 base::WrapUnique(proxy_resolver_factory), nullptr)); 342 base::WrapUnique(proxy_resolver_factory), nullptr));
343 HttpRequestInfo request_info; 343 HttpRequestInfo request_info;
344 request_info.method = "GET"; 344 request_info.method = "GET";
345 request_info.url = GURL("http://www.google.com"); 345 request_info.url = GURL("http://www.google.com");
346 346
347 Initialize(request_info); 347 Initialize(request_info);
348 348
349 request_.reset( 349 request_ =
350 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 350 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
351 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 351 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
352 352
353 EXPECT_FALSE(job_controller_->main_job()); 353 EXPECT_FALSE(job_controller_->main_job());
354 EXPECT_FALSE(job_controller_->alternative_job()); 354 EXPECT_FALSE(job_controller_->alternative_job());
355 355
356 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, 356 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL,
357 job_controller_->GetLoadState()); 357 job_controller_->GetLoadState());
358 358
359 EXPECT_CALL(request_delegate_, 359 EXPECT_CALL(request_delegate_,
360 OnStreamFailed(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, _)) 360 OnStreamFailed(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, _))
361 .Times(1); 361 .Times(1);
362 proxy_resolver_factory->pending_requests()[0]->CompleteNowWithForwarder( 362 proxy_resolver_factory->pending_requests()[0]->CompleteNowWithForwarder(
363 ERR_FAILED, &resolver); 363 ERR_FAILED, &resolver);
364 base::RunLoop().RunUntilIdle(); 364 base::RunLoop().RunUntilIdle();
365 request_.reset(); 365 request_.reset();
366 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); 366 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_));
367 } 367 }
368 368
369 TEST_F(HttpStreamFactoryImplJobControllerTest, NoSupportedProxies) { 369 TEST_F(HttpStreamFactoryImplJobControllerTest, NoSupportedProxies) {
370 session_deps_.proxy_service = 370 session_deps_.proxy_service =
371 ProxyService::CreateFixedFromPacResult("QUIC myproxy.org:443"); 371 ProxyService::CreateFixedFromPacResult("QUIC myproxy.org:443");
372 session_deps_.enable_quic = false; 372 session_deps_.enable_quic = false;
373 HttpRequestInfo request_info; 373 HttpRequestInfo request_info;
374 request_info.method = "GET"; 374 request_info.method = "GET";
375 request_info.url = GURL("http://www.google.com"); 375 request_info.url = GURL("http://www.google.com");
376 376
377 Initialize(request_info); 377 Initialize(request_info);
378 378
379 EXPECT_CALL(request_delegate_, OnStreamFailed(ERR_NO_SUPPORTED_PROXIES, _)) 379 EXPECT_CALL(request_delegate_, OnStreamFailed(ERR_NO_SUPPORTED_PROXIES, _))
380 .Times(1); 380 .Times(1);
381 request_.reset( 381 request_ =
382 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 382 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
383 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 383 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
384 384
385 EXPECT_FALSE(job_controller_->main_job()); 385 EXPECT_FALSE(job_controller_->main_job());
386 EXPECT_FALSE(job_controller_->alternative_job()); 386 EXPECT_FALSE(job_controller_->alternative_job());
387 387
388 base::RunLoop().RunUntilIdle(); 388 base::RunLoop().RunUntilIdle();
389 request_.reset(); 389 request_.reset();
390 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); 390 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_));
391 } 391 }
392 392
393 class JobControllerReconsiderProxyAfterErrorTest 393 class JobControllerReconsiderProxyAfterErrorTest
(...skipping 12 matching lines...) Expand all
406 } 406 }
407 407
408 std::unique_ptr<HttpStreamRequest> CreateJobController( 408 std::unique_ptr<HttpStreamRequest> CreateJobController(
409 const HttpRequestInfo& request_info) { 409 const HttpRequestInfo& request_info) {
410 HttpStreamFactoryImpl::JobController* job_controller = 410 HttpStreamFactoryImpl::JobController* job_controller =
411 new HttpStreamFactoryImpl::JobController( 411 new HttpStreamFactoryImpl::JobController(
412 factory_, &request_delegate_, session_.get(), &default_job_factory_, 412 factory_, &request_delegate_, session_.get(), &default_job_factory_,
413 request_info, is_preconnect_, enable_ip_based_pooling_, 413 request_info, is_preconnect_, enable_ip_based_pooling_,
414 enable_alternative_services_, SSLConfig(), SSLConfig()); 414 enable_alternative_services_, SSLConfig(), SSLConfig());
415 HttpStreamFactoryImplPeer::AddJobController(factory_, job_controller); 415 HttpStreamFactoryImplPeer::AddJobController(factory_, job_controller);
416 return base::WrapUnique(job_controller->Start( 416 return job_controller->Start(
417 &request_delegate_, nullptr, NetLogWithSource(), 417 &request_delegate_, nullptr, NetLogWithSource(),
418 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 418 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
419 } 419 }
420 420
421 private: 421 private:
422 // Use real Jobs so that Job::Resume() is not mocked out. When main job is 422 // Use real Jobs so that Job::Resume() is not mocked out. When main job is
423 // resumed it will use mock socket data. 423 // resumed it will use mock socket data.
424 HttpStreamFactoryImpl::JobFactory default_job_factory_; 424 HttpStreamFactoryImpl::JobFactory default_job_factory_;
425 }; 425 };
426 426
427 INSTANTIATE_TEST_CASE_P( 427 INSTANTIATE_TEST_CASE_P(
428 /* no prefix */, 428 /* no prefix */,
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 OnStreamFailedWithNoAlternativeJob) { 545 OnStreamFailedWithNoAlternativeJob) {
546 tcp_data_ = base::MakeUnique<SequencedSocketData>(nullptr, 0, nullptr, 0); 546 tcp_data_ = base::MakeUnique<SequencedSocketData>(nullptr, 0, nullptr, 0);
547 tcp_data_->set_connect_data(MockConnect(ASYNC, ERR_FAILED)); 547 tcp_data_->set_connect_data(MockConnect(ASYNC, ERR_FAILED));
548 548
549 HttpRequestInfo request_info; 549 HttpRequestInfo request_info;
550 request_info.method = "GET"; 550 request_info.method = "GET";
551 request_info.url = GURL("http://www.google.com"); 551 request_info.url = GURL("http://www.google.com");
552 552
553 Initialize(request_info); 553 Initialize(request_info);
554 554
555 request_.reset( 555 request_ =
556 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 556 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
557 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 557 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
558 558
559 EXPECT_TRUE(job_controller_->main_job()); 559 EXPECT_TRUE(job_controller_->main_job());
560 EXPECT_FALSE(job_controller_->alternative_job()); 560 EXPECT_FALSE(job_controller_->alternative_job());
561 561
562 // There's no other alternative job. Thus when stream failed, it should 562 // There's no other alternative job. Thus when stream failed, it should
563 // notify Request of the stream failure. 563 // notify Request of the stream failure.
564 EXPECT_CALL(request_delegate_, OnStreamFailed(ERR_FAILED, _)).Times(1); 564 EXPECT_CALL(request_delegate_, OnStreamFailed(ERR_FAILED, _)).Times(1);
565 base::RunLoop().RunUntilIdle(); 565 base::RunLoop().RunUntilIdle();
566 } 566 }
567 567
568 TEST_F(HttpStreamFactoryImplJobControllerTest, 568 TEST_F(HttpStreamFactoryImplJobControllerTest,
569 OnStreamReadyWithNoAlternativeJob) { 569 OnStreamReadyWithNoAlternativeJob) {
570 tcp_data_ = base::MakeUnique<SequencedSocketData>(nullptr, 0, nullptr, 0); 570 tcp_data_ = base::MakeUnique<SequencedSocketData>(nullptr, 0, nullptr, 0);
571 tcp_data_->set_connect_data(MockConnect(ASYNC, OK)); 571 tcp_data_->set_connect_data(MockConnect(ASYNC, OK));
572 572
573 HttpRequestInfo request_info; 573 HttpRequestInfo request_info;
574 request_info.method = "GET"; 574 request_info.method = "GET";
575 request_info.url = GURL("http://www.google.com"); 575 request_info.url = GURL("http://www.google.com");
576 576
577 Initialize(request_info); 577 Initialize(request_info);
578 578
579 request_.reset( 579 request_ =
580 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 580 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
581 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 581 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
582 582
583 // There's no other alternative job. Thus when a stream is ready, it should 583 // There's no other alternative job. Thus when a stream is ready, it should
584 // notify Request. 584 // notify Request.
585 EXPECT_TRUE(job_controller_->main_job()); 585 EXPECT_TRUE(job_controller_->main_job());
586 586
587 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) 587 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _))
588 .WillOnce(Invoke(DeleteHttpStreamPointer)); 588 .WillOnce(Invoke(DeleteHttpStreamPointer));
589 base::RunLoop().RunUntilIdle(); 589 base::RunLoop().RunUntilIdle();
590 } 590 }
591 591
(...skipping 10 matching lines...) Expand all
602 tcp_data_->set_connect_data(MockConnect(ASYNC, OK)); 602 tcp_data_->set_connect_data(MockConnect(ASYNC, OK));
603 HttpRequestInfo request_info; 603 HttpRequestInfo request_info;
604 request_info.method = "GET"; 604 request_info.method = "GET";
605 request_info.url = GURL("https://www.google.com"); 605 request_info.url = GURL("https://www.google.com");
606 606
607 Initialize(request_info); 607 Initialize(request_info);
608 url::SchemeHostPort server(request_info.url); 608 url::SchemeHostPort server(request_info.url);
609 AlternativeService alternative_service(kProtoQUIC, server.host(), 443); 609 AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
610 SetAlternativeService(request_info, alternative_service); 610 SetAlternativeService(request_info, alternative_service);
611 611
612 request_.reset( 612 request_ =
613 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 613 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
614 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 614 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
615 EXPECT_TRUE(job_controller_->main_job()); 615 EXPECT_TRUE(job_controller_->main_job());
616 EXPECT_TRUE(job_controller_->alternative_job()); 616 EXPECT_TRUE(job_controller_->alternative_job());
617 617
618 // Reset the Request will cancel all the Jobs since there's no Job determined 618 // Reset the Request will cancel all the Jobs since there's no Job determined
619 // to serve Request yet and JobController will notify the factory to delete 619 // to serve Request yet and JobController will notify the factory to delete
620 // itself upon completion. 620 // itself upon completion.
621 request_.reset(); 621 request_.reset();
622 VerifyBrokenAlternateProtocolMapping(request_info, false); 622 VerifyBrokenAlternateProtocolMapping(request_info, false);
623 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); 623 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_));
624 } 624 }
625 625
626 TEST_F(HttpStreamFactoryImplJobControllerTest, OnStreamFailedForBothJobs) { 626 TEST_F(HttpStreamFactoryImplJobControllerTest, OnStreamFailedForBothJobs) {
627 quic_data_ = base::MakeUnique<test::MockQuicData>(); 627 quic_data_ = base::MakeUnique<test::MockQuicData>();
628 quic_data_->AddConnect(ASYNC, ERR_FAILED); 628 quic_data_->AddConnect(ASYNC, ERR_FAILED);
629 tcp_data_ = base::MakeUnique<SequencedSocketData>(nullptr, 0, nullptr, 0); 629 tcp_data_ = base::MakeUnique<SequencedSocketData>(nullptr, 0, nullptr, 0);
630 tcp_data_->set_connect_data(MockConnect(ASYNC, ERR_FAILED)); 630 tcp_data_->set_connect_data(MockConnect(ASYNC, ERR_FAILED));
631 631
632 HttpRequestInfo request_info; 632 HttpRequestInfo request_info;
633 request_info.method = "GET"; 633 request_info.method = "GET";
634 request_info.url = GURL("https://www.google.com"); 634 request_info.url = GURL("https://www.google.com");
635 635
636 Initialize(request_info); 636 Initialize(request_info);
637 url::SchemeHostPort server(request_info.url); 637 url::SchemeHostPort server(request_info.url);
638 AlternativeService alternative_service(kProtoQUIC, server.host(), 443); 638 AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
639 SetAlternativeService(request_info, alternative_service); 639 SetAlternativeService(request_info, alternative_service);
640 640
641 request_.reset( 641 request_ =
642 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 642 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
643 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 643 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
644 EXPECT_TRUE(job_controller_->main_job()); 644 EXPECT_TRUE(job_controller_->main_job());
645 EXPECT_TRUE(job_controller_->alternative_job()); 645 EXPECT_TRUE(job_controller_->alternative_job());
646 646
647 // The failure of second Job should be reported to Request as there's no more 647 // The failure of second Job should be reported to Request as there's no more
648 // pending Job to serve the Request. 648 // pending Job to serve the Request.
649 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(1); 649 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(1);
650 base::RunLoop().RunUntilIdle(); 650 base::RunLoop().RunUntilIdle();
651 VerifyBrokenAlternateProtocolMapping(request_info, false); 651 VerifyBrokenAlternateProtocolMapping(request_info, false);
652 request_.reset(); 652 request_.reset();
653 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); 653 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_));
(...skipping 13 matching lines...) Expand all
667 667
668 HttpRequestInfo request_info; 668 HttpRequestInfo request_info;
669 request_info.method = "GET"; 669 request_info.method = "GET";
670 request_info.url = GURL("https://www.google.com"); 670 request_info.url = GURL("https://www.google.com");
671 671
672 Initialize(request_info); 672 Initialize(request_info);
673 url::SchemeHostPort server(request_info.url); 673 url::SchemeHostPort server(request_info.url);
674 AlternativeService alternative_service(kProtoQUIC, server.host(), 443); 674 AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
675 SetAlternativeService(request_info, alternative_service); 675 SetAlternativeService(request_info, alternative_service);
676 676
677 request_.reset( 677 request_ =
678 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 678 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
679 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 679 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
680 EXPECT_TRUE(job_controller_->main_job()); 680 EXPECT_TRUE(job_controller_->main_job());
681 EXPECT_TRUE(job_controller_->alternative_job()); 681 EXPECT_TRUE(job_controller_->alternative_job());
682 682
683 // Main job succeeds, starts serving Request and it should report status 683 // Main job succeeds, starts serving Request and it should report status
684 // to Request. The alternative job will mark the main job complete and gets 684 // to Request. The alternative job will mark the main job complete and gets
685 // orphaned. 685 // orphaned.
686 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) 686 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _))
687 .WillOnce(Invoke(DeleteHttpStreamPointer)); 687 .WillOnce(Invoke(DeleteHttpStreamPointer));
688 // JobController shouldn't report the status of second job as request 688 // JobController shouldn't report the status of second job as request
689 // is already successfully served. 689 // is already successfully served.
(...skipping 18 matching lines...) Expand all
708 708
709 HttpRequestInfo request_info; 709 HttpRequestInfo request_info;
710 request_info.method = "GET"; 710 request_info.method = "GET";
711 request_info.url = GURL("https://www.google.com"); 711 request_info.url = GURL("https://www.google.com");
712 712
713 Initialize(request_info); 713 Initialize(request_info);
714 714
715 url::SchemeHostPort server(request_info.url); 715 url::SchemeHostPort server(request_info.url);
716 AlternativeService alternative_service(kProtoQUIC, server.host(), 443); 716 AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
717 SetAlternativeService(request_info, alternative_service); 717 SetAlternativeService(request_info, alternative_service);
718 request_.reset( 718 request_ =
719 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 719 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
720 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 720 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
721 EXPECT_TRUE(job_controller_->main_job()); 721 EXPECT_TRUE(job_controller_->main_job());
722 EXPECT_TRUE(job_controller_->alternative_job()); 722 EXPECT_TRUE(job_controller_->alternative_job());
723 EXPECT_TRUE(JobControllerPeer::main_job_is_blocked(job_controller_)); 723 EXPECT_TRUE(JobControllerPeer::main_job_is_blocked(job_controller_));
724 724
725 // |alternative_job| succeeds and should report status to |request_delegate_|. 725 // |alternative_job| succeeds and should report status to |request_delegate_|.
726 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) 726 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _))
727 .WillOnce(Invoke(DeleteHttpStreamPointer)); 727 .WillOnce(Invoke(DeleteHttpStreamPointer));
728 728
729 base::RunLoop().RunUntilIdle(); 729 base::RunLoop().RunUntilIdle();
730 730
(...skipping 21 matching lines...) Expand all
752 request_info.method = "GET"; 752 request_info.method = "GET";
753 request_info.url = 753 request_info.url =
754 GURL(base::StringPrintf("https://%s:%u", origin_host, origin_port)); 754 GURL(base::StringPrintf("https://%s:%u", origin_host, origin_port));
755 Initialize(request_info); 755 Initialize(request_info);
756 756
757 url::SchemeHostPort server(request_info.url); 757 url::SchemeHostPort server(request_info.url);
758 AlternativeService alternative_service(kProtoHTTP2, alternative_host, 758 AlternativeService alternative_service(kProtoHTTP2, alternative_host,
759 alternative_port); 759 alternative_port);
760 SetAlternativeService(request_info, alternative_service); 760 SetAlternativeService(request_info, alternative_service);
761 761
762 request_.reset( 762 request_ =
763 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 763 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
764 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 764 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
765 765
766 HostPortPair main_host_port_pair = 766 HostPortPair main_host_port_pair =
767 HttpStreamFactoryImplJobPeer::GetSpdySessionKey( 767 HttpStreamFactoryImplJobPeer::GetSpdySessionKey(
768 job_controller_->main_job()) 768 job_controller_->main_job())
769 .host_port_pair(); 769 .host_port_pair();
770 EXPECT_EQ(origin_host, main_host_port_pair.host()); 770 EXPECT_EQ(origin_host, main_host_port_pair.host());
771 EXPECT_EQ(origin_port, main_host_port_pair.port()); 771 EXPECT_EQ(origin_port, main_host_port_pair.port());
772 772
773 HostPortPair alternative_host_port_pair = 773 HostPortPair alternative_host_port_pair =
774 HttpStreamFactoryImplJobPeer::GetSpdySessionKey( 774 HttpStreamFactoryImplJobPeer::GetSpdySessionKey(
(...skipping 21 matching lines...) Expand all
796 HttpRequestInfo request_info; 796 HttpRequestInfo request_info;
797 request_info.method = "GET"; 797 request_info.method = "GET";
798 request_info.url = GURL("https://www.google.com"); 798 request_info.url = GURL("https://www.google.com");
799 799
800 Initialize(request_info); 800 Initialize(request_info);
801 801
802 url::SchemeHostPort server(request_info.url); 802 url::SchemeHostPort server(request_info.url);
803 AlternativeService alternative_service(kProtoQUIC, server.host(), 443); 803 AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
804 SetAlternativeService(request_info, alternative_service); 804 SetAlternativeService(request_info, alternative_service);
805 805
806 request_.reset( 806 request_ =
807 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 807 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
808 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 808 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
809 EXPECT_TRUE(job_controller_->main_job()); 809 EXPECT_TRUE(job_controller_->main_job());
810 EXPECT_TRUE(job_controller_->alternative_job()); 810 EXPECT_TRUE(job_controller_->alternative_job());
811 // main job should not be blocked because alt job returned ERR_IO_PENDING. 811 // main job should not be blocked because alt job returned ERR_IO_PENDING.
812 EXPECT_FALSE(JobControllerPeer::main_job_is_blocked(job_controller_)); 812 EXPECT_FALSE(JobControllerPeer::main_job_is_blocked(job_controller_));
813 813
814 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) 814 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _))
815 .WillOnce(Invoke(DeleteHttpStreamPointer)); 815 .WillOnce(Invoke(DeleteHttpStreamPointer));
816 816
817 // Complete main job now. 817 // Complete main job now.
818 base::RunLoop().RunUntilIdle(); 818 base::RunLoop().RunUntilIdle();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
852 852
853 Initialize(request_info); 853 Initialize(request_info);
854 854
855 url::SchemeHostPort server(request_info.url); 855 url::SchemeHostPort server(request_info.url);
856 AlternativeService alternative_service(kProtoQUIC, server.host(), 443); 856 AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
857 SetAlternativeService(request_info, alternative_service); 857 SetAlternativeService(request_info, alternative_service);
858 858
859 // |main_job| fails but should not report status to Request. 859 // |main_job| fails but should not report status to Request.
860 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); 860 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
861 861
862 request_.reset( 862 request_ =
863 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 863 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
864 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 864 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
865 EXPECT_TRUE(job_controller_->main_job()); 865 EXPECT_TRUE(job_controller_->main_job());
866 EXPECT_TRUE(job_controller_->alternative_job()); 866 EXPECT_TRUE(job_controller_->alternative_job());
867 867
868 base::RunLoop().RunUntilIdle(); 868 base::RunLoop().RunUntilIdle();
869 869
870 // Make |alternative_job| succeed. 870 // Make |alternative_job| succeed.
871 HttpStream* http_stream = 871 HttpStream* http_stream =
872 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false); 872 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false);
873 873
874 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream)) 874 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream))
(...skipping 22 matching lines...) Expand all
897 HttpRequestInfo request_info; 897 HttpRequestInfo request_info;
898 request_info.method = "GET"; 898 request_info.method = "GET";
899 request_info.url = GURL("https://www.google.com"); 899 request_info.url = GURL("https://www.google.com");
900 900
901 Initialize(request_info); 901 Initialize(request_info);
902 902
903 url::SchemeHostPort server(request_info.url); 903 url::SchemeHostPort server(request_info.url);
904 AlternativeService alternative_service(kProtoQUIC, server.host(), 443); 904 AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
905 SetAlternativeService(request_info, alternative_service); 905 SetAlternativeService(request_info, alternative_service);
906 906
907 request_.reset( 907 request_ =
908 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 908 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
909 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 909 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
910 EXPECT_TRUE(job_controller_->main_job()); 910 EXPECT_TRUE(job_controller_->main_job());
911 EXPECT_TRUE(job_controller_->alternative_job()); 911 EXPECT_TRUE(job_controller_->alternative_job());
912 912
913 // |alternative_job| fails but should not report status to Request. 913 // |alternative_job| fails but should not report status to Request.
914 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); 914 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
915 // |main_job| succeeds and should report status to Request. 915 // |main_job| succeeds and should report status to Request.
916 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) 916 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _))
917 .WillOnce(Invoke(DeleteHttpStreamPointer)); 917 .WillOnce(Invoke(DeleteHttpStreamPointer));
918 918
919 base::RunLoop().RunUntilIdle(); 919 base::RunLoop().RunUntilIdle();
(...skipping 21 matching lines...) Expand all
941 941
942 HttpRequestInfo request_info; 942 HttpRequestInfo request_info;
943 request_info.method = "GET"; 943 request_info.method = "GET";
944 request_info.url = GURL("https://www.google.com"); 944 request_info.url = GURL("https://www.google.com");
945 Initialize(request_info); 945 Initialize(request_info);
946 946
947 url::SchemeHostPort server(request_info.url); 947 url::SchemeHostPort server(request_info.url);
948 AlternativeService alternative_service(kProtoQUIC, server.host(), 443); 948 AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
949 SetAlternativeService(request_info, alternative_service); 949 SetAlternativeService(request_info, alternative_service);
950 950
951 request_.reset( 951 request_ =
952 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 952 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
953 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 953 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
954 EXPECT_TRUE(job_controller_->main_job()); 954 EXPECT_TRUE(job_controller_->main_job());
955 EXPECT_TRUE(job_controller_->alternative_job()); 955 EXPECT_TRUE(job_controller_->alternative_job());
956 956
957 // |alternative_job| fails but should not report status to Request. 957 // |alternative_job| fails but should not report status to Request.
958 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); 958 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
959 // |main_job| succeeds and should report status to Request. 959 // |main_job| succeeds and should report status to Request.
960 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) 960 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _))
961 .WillOnce(Invoke(DeleteHttpStreamPointer)); 961 .WillOnce(Invoke(DeleteHttpStreamPointer));
962 base::RunLoop().RunUntilIdle(); 962 base::RunLoop().RunUntilIdle();
963 963
(...skipping 19 matching lines...) Expand all
983 983
984 HttpRequestInfo request_info; 984 HttpRequestInfo request_info;
985 request_info.method = "GET"; 985 request_info.method = "GET";
986 request_info.url = GURL("https://www.google.com"); 986 request_info.url = GURL("https://www.google.com");
987 987
988 Initialize(request_info); 988 Initialize(request_info);
989 url::SchemeHostPort server(request_info.url); 989 url::SchemeHostPort server(request_info.url);
990 AlternativeService alternative_service(kProtoQUIC, server.host(), 443); 990 AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
991 SetAlternativeService(request_info, alternative_service); 991 SetAlternativeService(request_info, alternative_service);
992 992
993 request_.reset( 993 request_ =
994 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 994 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
995 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 995 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
996 EXPECT_TRUE(job_controller_->main_job()); 996 EXPECT_TRUE(job_controller_->main_job());
997 EXPECT_TRUE(job_controller_->alternative_job()); 997 EXPECT_TRUE(job_controller_->alternative_job());
998 998
999 // |main_job| fails but should not report status to Request. 999 // |main_job| fails but should not report status to Request.
1000 // The alternative job will mark the main job complete. 1000 // The alternative job will mark the main job complete.
1001 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); 1001 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
1002 1002
1003 base::RunLoop().RunUntilIdle(); 1003 base::RunLoop().RunUntilIdle();
1004 1004
1005 // Controller should use alternative job to get load state. 1005 // Controller should use alternative job to get load state.
(...skipping 25 matching lines...) Expand all
1031 1031
1032 HttpRequestInfo request_info; 1032 HttpRequestInfo request_info;
1033 request_info.method = "GET"; 1033 request_info.method = "GET";
1034 request_info.url = GURL("https://www.google.com"); 1034 request_info.url = GURL("https://www.google.com");
1035 1035
1036 Initialize(request_info); 1036 Initialize(request_info);
1037 url::SchemeHostPort server(request_info.url); 1037 url::SchemeHostPort server(request_info.url);
1038 AlternativeService alternative_service(kProtoQUIC, server.host(), 443); 1038 AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
1039 SetAlternativeService(request_info, alternative_service); 1039 SetAlternativeService(request_info, alternative_service);
1040 1040
1041 request_.reset( 1041 request_ =
1042 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 1042 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
1043 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 1043 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
1044 EXPECT_TRUE(job_controller_->main_job()); 1044 EXPECT_TRUE(job_controller_->main_job());
1045 EXPECT_TRUE(job_controller_->alternative_job()); 1045 EXPECT_TRUE(job_controller_->alternative_job());
1046 1046
1047 // Alt job is stalled and main job should complete successfully. 1047 // Alt job is stalled and main job should complete successfully.
1048 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) 1048 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _))
1049 .WillOnce(Invoke(DeleteHttpStreamPointer)); 1049 .WillOnce(Invoke(DeleteHttpStreamPointer));
1050 1050
1051 base::RunLoop().RunUntilIdle(); 1051 base::RunLoop().RunUntilIdle();
1052 } 1052 }
1053 1053
1054 TEST_F(HttpStreamFactoryImplJobControllerTest, InvalidPortForQuic) { 1054 TEST_F(HttpStreamFactoryImplJobControllerTest, InvalidPortForQuic) {
1055 HttpRequestInfo request_info; 1055 HttpRequestInfo request_info;
1056 request_info.method = "GET"; 1056 request_info.method = "GET";
1057 request_info.url = GURL("https://www.google.com"); 1057 request_info.url = GURL("https://www.google.com");
1058 1058
1059 // Using a restricted port 101 for QUIC should fail and the alternative job 1059 // Using a restricted port 101 for QUIC should fail and the alternative job
1060 // should post OnStreamFailedCall on the controller to resume the main job. 1060 // should post OnStreamFailedCall on the controller to resume the main job.
1061 Initialize(request_info); 1061 Initialize(request_info);
1062 1062
1063 url::SchemeHostPort server(request_info.url); 1063 url::SchemeHostPort server(request_info.url);
1064 AlternativeService alternative_service(kProtoQUIC, server.host(), 101); 1064 AlternativeService alternative_service(kProtoQUIC, server.host(), 101);
1065 SetAlternativeService(request_info, alternative_service); 1065 SetAlternativeService(request_info, alternative_service);
1066 1066
1067 request_.reset( 1067 request_ =
1068 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 1068 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
1069 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 1069 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
1070 1070
1071 EXPECT_TRUE(job_factory_.main_job()->is_waiting()); 1071 EXPECT_TRUE(job_factory_.main_job()->is_waiting());
1072 1072
1073 // Wait until OnStreamFailedCallback is executed on the alternative job. 1073 // Wait until OnStreamFailedCallback is executed on the alternative job.
1074 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1); 1074 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1);
1075 base::RunLoop().RunUntilIdle(); 1075 base::RunLoop().RunUntilIdle();
1076 } 1076 }
1077 1077
1078 TEST_F(HttpStreamFactoryImplJobControllerTest, DelayedTCP) { 1078 TEST_F(HttpStreamFactoryImplJobControllerTest, DelayedTCP) {
1079 base::ScopedMockTimeMessageLoopTaskRunner test_task_runner; 1079 base::ScopedMockTimeMessageLoopTaskRunner test_task_runner;
(...skipping 13 matching lines...) Expand all
1093 quic_stream_factory->set_require_confirmation(false); 1093 quic_stream_factory->set_require_confirmation(false);
1094 ServerNetworkStats stats1; 1094 ServerNetworkStats stats1;
1095 stats1.srtt = base::TimeDelta::FromMicroseconds(10); 1095 stats1.srtt = base::TimeDelta::FromMicroseconds(10);
1096 session_->http_server_properties()->SetServerNetworkStats( 1096 session_->http_server_properties()->SetServerNetworkStats(
1097 url::SchemeHostPort(GURL("https://www.google.com")), stats1); 1097 url::SchemeHostPort(GURL("https://www.google.com")), stats1);
1098 1098
1099 url::SchemeHostPort server(request_info.url); 1099 url::SchemeHostPort server(request_info.url);
1100 AlternativeService alternative_service(kProtoQUIC, server.host(), 443); 1100 AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
1101 SetAlternativeService(request_info, alternative_service); 1101 SetAlternativeService(request_info, alternative_service);
1102 1102
1103 request_.reset( 1103 request_ =
1104 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 1104 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
1105 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 1105 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
1106 EXPECT_TRUE(job_controller_->main_job()); 1106 EXPECT_TRUE(job_controller_->main_job());
1107 EXPECT_TRUE(job_controller_->alternative_job()); 1107 EXPECT_TRUE(job_controller_->alternative_job());
1108 EXPECT_TRUE(job_controller_->main_job()->is_waiting()); 1108 EXPECT_TRUE(job_controller_->main_job()->is_waiting());
1109 1109
1110 // The alternative job stalls as host resolution hangs when creating the QUIC 1110 // The alternative job stalls as host resolution hangs when creating the QUIC
1111 // request and controller should resume the main job after delay. 1111 // request and controller should resume the main job after delay.
1112 EXPECT_TRUE(test_task_runner->HasPendingTask()); 1112 EXPECT_TRUE(test_task_runner->HasPendingTask());
1113 EXPECT_EQ(1u, test_task_runner->GetPendingTaskCount()); 1113 EXPECT_EQ(1u, test_task_runner->GetPendingTaskCount());
1114 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1); 1114 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1);
1115 test_task_runner->FastForwardBy(base::TimeDelta::FromMicroseconds(15)); 1115 test_task_runner->FastForwardBy(base::TimeDelta::FromMicroseconds(15));
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1160 ServerNetworkStats stats1; 1160 ServerNetworkStats stats1;
1161 stats1.srtt = base::TimeDelta::FromSeconds(100); 1161 stats1.srtt = base::TimeDelta::FromSeconds(100);
1162 session_->http_server_properties()->SetServerNetworkStats( 1162 session_->http_server_properties()->SetServerNetworkStats(
1163 url::SchemeHostPort(GURL("https://www.google.com")), stats1); 1163 url::SchemeHostPort(GURL("https://www.google.com")), stats1);
1164 1164
1165 // Set a SPDY alternative service for the server. 1165 // Set a SPDY alternative service for the server.
1166 url::SchemeHostPort server(request_info.url); 1166 url::SchemeHostPort server(request_info.url);
1167 AlternativeService alternative_service(kProtoQUIC, server.host(), 443); 1167 AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
1168 SetAlternativeService(request_info, alternative_service); 1168 SetAlternativeService(request_info, alternative_service);
1169 1169
1170 request_.reset( 1170 request_ =
1171 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 1171 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
1172 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 1172 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
1173 EXPECT_TRUE(job_controller_->main_job()); 1173 EXPECT_TRUE(job_controller_->main_job());
1174 EXPECT_TRUE(job_controller_->alternative_job()); 1174 EXPECT_TRUE(job_controller_->alternative_job());
1175 EXPECT_TRUE(job_controller_->main_job()->is_waiting()); 1175 EXPECT_TRUE(job_controller_->main_job()->is_waiting());
1176 1176
1177 // The alternative job stalls as host resolution hangs when creating the QUIC 1177 // The alternative job stalls as host resolution hangs when creating the QUIC
1178 // request and controller should resume the main job after delay. 1178 // request and controller should resume the main job after delay.
1179 EXPECT_TRUE(test_task_runner->HasPendingTask()); 1179 EXPECT_TRUE(test_task_runner->HasPendingTask());
1180 EXPECT_EQ(1u, test_task_runner->GetPendingTaskCount()); 1180 EXPECT_EQ(1u, test_task_runner->GetPendingTaskCount());
1181 1181
1182 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1); 1182 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1219 url::SchemeHostPort(GURL("https://www.google.com")), stats1); 1219 url::SchemeHostPort(GURL("https://www.google.com")), stats1);
1220 1220
1221 // Set a SPDY alternative service for the server. 1221 // Set a SPDY alternative service for the server.
1222 url::SchemeHostPort server(request_info.url); 1222 url::SchemeHostPort server(request_info.url);
1223 AlternativeService alternative_service(kProtoQUIC, server.host(), 443); 1223 AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
1224 SetAlternativeService(request_info, alternative_service); 1224 SetAlternativeService(request_info, alternative_service);
1225 1225
1226 // The alternative job stalls as host resolution hangs when creating the QUIC 1226 // The alternative job stalls as host resolution hangs when creating the QUIC
1227 // request and controller should resume the main job with delay. 1227 // request and controller should resume the main job with delay.
1228 // OnStreamFailed should resume the main job immediately. 1228 // OnStreamFailed should resume the main job immediately.
1229 request_.reset( 1229 request_ =
1230 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 1230 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
1231 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 1231 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
1232 EXPECT_TRUE(job_controller_->main_job()); 1232 EXPECT_TRUE(job_controller_->main_job());
1233 EXPECT_TRUE(job_controller_->alternative_job()); 1233 EXPECT_TRUE(job_controller_->alternative_job());
1234 EXPECT_TRUE(job_controller_->main_job()->is_waiting()); 1234 EXPECT_TRUE(job_controller_->main_job()->is_waiting());
1235 1235
1236 EXPECT_TRUE(test_task_runner->HasPendingTask()); 1236 EXPECT_TRUE(test_task_runner->HasPendingTask());
1237 EXPECT_EQ(1u, test_task_runner->GetPendingTaskCount()); 1237 EXPECT_EQ(1u, test_task_runner->GetPendingTaskCount());
1238 1238
1239 // |alternative_job| fails but should not report status to Request. 1239 // |alternative_job| fails but should not report status to Request.
1240 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); 1240 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0);
1241 // Now unblock Resolver to fail the alternate job. 1241 // Now unblock Resolver to fail the alternate job.
(...skipping 22 matching lines...) Expand all
1264 // Using hanging resolver will cause the alternative job to hang indefinitely. 1264 // Using hanging resolver will cause the alternative job to hang indefinitely.
1265 HangingResolver* resolver = new HangingResolver(); 1265 HangingResolver* resolver = new HangingResolver();
1266 session_deps_.host_resolver.reset(resolver); 1266 session_deps_.host_resolver.reset(resolver);
1267 1267
1268 HttpRequestInfo request_info; 1268 HttpRequestInfo request_info;
1269 request_info.method = "GET"; 1269 request_info.method = "GET";
1270 request_info.url = GURL("https://mail.example.org/"); 1270 request_info.url = GURL("https://mail.example.org/");
1271 Initialize(request_info); 1271 Initialize(request_info);
1272 EXPECT_TRUE(test_proxy_delegate()->alternative_proxy_server().is_quic()); 1272 EXPECT_TRUE(test_proxy_delegate()->alternative_proxy_server().is_quic());
1273 1273
1274 request_.reset( 1274 request_ =
1275 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 1275 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
1276 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 1276 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
1277 EXPECT_TRUE(job_controller_->main_job()); 1277 EXPECT_TRUE(job_controller_->main_job());
1278 EXPECT_FALSE(job_controller_->main_job()->is_waiting()); 1278 EXPECT_FALSE(job_controller_->main_job()->is_waiting());
1279 EXPECT_FALSE(job_controller_->alternative_job()); 1279 EXPECT_FALSE(job_controller_->alternative_job());
1280 1280
1281 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(0); 1281 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(0);
1282 base::RunLoop().RunUntilIdle(); 1282 base::RunLoop().RunUntilIdle();
1283 EXPECT_EQ(0, test_proxy_delegate()->get_alternative_proxy_invocations()); 1283 EXPECT_EQ(0, test_proxy_delegate()->get_alternative_proxy_invocations());
1284 } 1284 }
1285 1285
1286 // Verifies that the alternative proxy server job is not created if the main job 1286 // Verifies that the alternative proxy server job is not created if the main job
1287 // does not fetch the resource through a proxy. 1287 // does not fetch the resource through a proxy.
1288 TEST_F(HttpStreamFactoryImplJobControllerTest, HttpURLWithNoProxy) { 1288 TEST_F(HttpStreamFactoryImplJobControllerTest, HttpURLWithNoProxy) {
1289 // Using hanging resolver will cause the alternative job to hang indefinitely. 1289 // Using hanging resolver will cause the alternative job to hang indefinitely.
1290 HangingResolver* resolver = new HangingResolver(); 1290 HangingResolver* resolver = new HangingResolver();
1291 session_deps_.host_resolver.reset(resolver); 1291 session_deps_.host_resolver.reset(resolver);
1292 1292
1293 HttpRequestInfo request_info; 1293 HttpRequestInfo request_info;
1294 request_info.method = "GET"; 1294 request_info.method = "GET";
1295 request_info.url = GURL("http://mail.example.org/"); 1295 request_info.url = GURL("http://mail.example.org/");
1296 1296
1297 Initialize(request_info); 1297 Initialize(request_info);
1298 EXPECT_TRUE(test_proxy_delegate()->alternative_proxy_server().is_quic()); 1298 EXPECT_TRUE(test_proxy_delegate()->alternative_proxy_server().is_quic());
1299 1299
1300 request_.reset( 1300 request_ =
1301 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 1301 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
1302 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 1302 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
1303 EXPECT_TRUE(job_controller_->main_job()); 1303 EXPECT_TRUE(job_controller_->main_job());
1304 EXPECT_FALSE(job_controller_->main_job()->is_waiting()); 1304 EXPECT_FALSE(job_controller_->main_job()->is_waiting());
1305 EXPECT_FALSE(job_controller_->alternative_job()); 1305 EXPECT_FALSE(job_controller_->alternative_job());
1306 1306
1307 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(0); 1307 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(0);
1308 base::RunLoop().RunUntilIdle(); 1308 base::RunLoop().RunUntilIdle();
1309 1309
1310 EXPECT_EQ(0, test_proxy_delegate()->get_alternative_proxy_invocations()); 1310 EXPECT_EQ(0, test_proxy_delegate()->get_alternative_proxy_invocations());
1311 } 1311 }
1312 1312
(...skipping 19 matching lines...) Expand all
1332 EXPECT_TRUE(test_proxy_delegate()->alternative_proxy_server().is_quic()); 1332 EXPECT_TRUE(test_proxy_delegate()->alternative_proxy_server().is_quic());
1333 1333
1334 // Enable delayed TCP and set time delay for waiting job. 1334 // Enable delayed TCP and set time delay for waiting job.
1335 QuicStreamFactory* quic_stream_factory = session_->quic_stream_factory(); 1335 QuicStreamFactory* quic_stream_factory = session_->quic_stream_factory();
1336 quic_stream_factory->set_require_confirmation(false); 1336 quic_stream_factory->set_require_confirmation(false);
1337 ServerNetworkStats stats1; 1337 ServerNetworkStats stats1;
1338 stats1.srtt = base::TimeDelta::FromMicroseconds(10); 1338 stats1.srtt = base::TimeDelta::FromMicroseconds(10);
1339 session_->http_server_properties()->SetServerNetworkStats( 1339 session_->http_server_properties()->SetServerNetworkStats(
1340 url::SchemeHostPort(GURL("https://myproxy.org")), stats1); 1340 url::SchemeHostPort(GURL("https://myproxy.org")), stats1);
1341 1341
1342 request_.reset( 1342 request_ =
1343 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 1343 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
1344 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 1344 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
1345 EXPECT_TRUE(job_controller_->main_job()); 1345 EXPECT_TRUE(job_controller_->main_job());
1346 EXPECT_TRUE(job_controller_->main_job()->is_waiting()); 1346 EXPECT_TRUE(job_controller_->main_job()->is_waiting());
1347 EXPECT_TRUE(job_controller_->alternative_job()); 1347 EXPECT_TRUE(job_controller_->alternative_job());
1348 // The main job is unblocked but is resumed one message loop iteration later. 1348 // The main job is unblocked but is resumed one message loop iteration later.
1349 EXPECT_FALSE(JobControllerPeer::main_job_is_blocked(job_controller_)); 1349 EXPECT_FALSE(JobControllerPeer::main_job_is_blocked(job_controller_));
1350 EXPECT_FALSE(JobControllerPeer::main_job_is_resumed(job_controller_)); 1350 EXPECT_FALSE(JobControllerPeer::main_job_is_resumed(job_controller_));
1351 EXPECT_EQ(1u, test_task_runner->GetPendingTaskCount()); 1351 EXPECT_EQ(1u, test_task_runner->GetPendingTaskCount());
1352 1352
1353 // Move forward the delay and verify the main job is resumed. 1353 // Move forward the delay and verify the main job is resumed.
1354 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1); 1354 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1388 EXPECT_TRUE(test_proxy_delegate()->alternative_proxy_server().is_quic()); 1388 EXPECT_TRUE(test_proxy_delegate()->alternative_proxy_server().is_quic());
1389 1389
1390 // Enable delayed TCP and set time delay for waiting job. 1390 // Enable delayed TCP and set time delay for waiting job.
1391 QuicStreamFactory* quic_stream_factory = session_->quic_stream_factory(); 1391 QuicStreamFactory* quic_stream_factory = session_->quic_stream_factory();
1392 quic_stream_factory->set_require_confirmation(false); 1392 quic_stream_factory->set_require_confirmation(false);
1393 ServerNetworkStats stats1; 1393 ServerNetworkStats stats1;
1394 stats1.srtt = base::TimeDelta::FromMicroseconds(300 * 1000); 1394 stats1.srtt = base::TimeDelta::FromMicroseconds(300 * 1000);
1395 session_->http_server_properties()->SetServerNetworkStats( 1395 session_->http_server_properties()->SetServerNetworkStats(
1396 url::SchemeHostPort(GURL("https://myproxy.org")), stats1); 1396 url::SchemeHostPort(GURL("https://myproxy.org")), stats1);
1397 1397
1398 request_.reset( 1398 request_ =
1399 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 1399 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
1400 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 1400 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
1401 EXPECT_TRUE(job_controller_->main_job()); 1401 EXPECT_TRUE(job_controller_->main_job());
1402 EXPECT_TRUE(job_controller_->alternative_job()); 1402 EXPECT_TRUE(job_controller_->alternative_job());
1403 1403
1404 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) 1404 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _))
1405 .WillOnce(Invoke(DeleteHttpStreamPointer)); 1405 .WillOnce(Invoke(DeleteHttpStreamPointer));
1406 1406
1407 base::RunLoop().RunUntilIdle(); 1407 base::RunLoop().RunUntilIdle();
1408 1408
1409 EXPECT_FALSE(job_controller_->alternative_job()); 1409 EXPECT_FALSE(job_controller_->alternative_job());
1410 EXPECT_TRUE(job_controller_->main_job()); 1410 EXPECT_TRUE(job_controller_->main_job());
(...skipping 21 matching lines...) Expand all
1432 1432
1433 UseAlternativeProxy(); 1433 UseAlternativeProxy();
1434 1434
1435 HttpRequestInfo request_info; 1435 HttpRequestInfo request_info;
1436 request_info.method = "GET"; 1436 request_info.method = "GET";
1437 request_info.url = GURL("http://www.google.com"); 1437 request_info.url = GURL("http://www.google.com");
1438 Initialize(request_info); 1438 Initialize(request_info);
1439 1439
1440 url::SchemeHostPort server(request_info.url); 1440 url::SchemeHostPort server(request_info.url);
1441 1441
1442 request_.reset( 1442 request_ =
1443 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 1443 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
1444 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 1444 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
1445 EXPECT_TRUE(job_controller_->main_job()); 1445 EXPECT_TRUE(job_controller_->main_job());
1446 EXPECT_TRUE(job_controller_->alternative_job()); 1446 EXPECT_TRUE(job_controller_->alternative_job());
1447 1447
1448 // Main job succeeds, starts serving Request and it should report status 1448 // Main job succeeds, starts serving Request and it should report status
1449 // to Request. The alternative job will mark the main job complete and gets 1449 // to Request. The alternative job will mark the main job complete and gets
1450 // orphaned. 1450 // orphaned.
1451 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) 1451 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _))
1452 .WillOnce(Invoke(DeleteHttpStreamPointer)); 1452 .WillOnce(Invoke(DeleteHttpStreamPointer));
1453 1453
1454 base::RunLoop().RunUntilIdle(); 1454 base::RunLoop().RunUntilIdle();
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1532 DisableIPBasedPooling(); 1532 DisableIPBasedPooling();
1533 if (!enable_alternative_services) 1533 if (!enable_alternative_services)
1534 DisableAlternativeServices(); 1534 DisableAlternativeServices();
1535 1535
1536 Initialize(request_info); 1536 Initialize(request_info);
1537 1537
1538 url::SchemeHostPort server(request_info.url); 1538 url::SchemeHostPort server(request_info.url);
1539 AlternativeService alternative_service(kProtoQUIC, server.host(), 443); 1539 AlternativeService alternative_service(kProtoQUIC, server.host(), 443);
1540 SetAlternativeService(request_info, alternative_service); 1540 SetAlternativeService(request_info, alternative_service);
1541 1541
1542 request_.reset( 1542 request_ =
1543 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(), 1543 job_controller_->Start(&request_delegate_, nullptr, NetLogWithSource(),
1544 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY)); 1544 HttpStreamRequest::HTTP_STREAM, DEFAULT_PRIORITY);
1545 EXPECT_TRUE(job_controller_->main_job()); 1545 EXPECT_TRUE(job_controller_->main_job());
1546 if (enable_alternative_services) { 1546 if (enable_alternative_services) {
1547 EXPECT_TRUE(job_controller_->alternative_job()); 1547 EXPECT_TRUE(job_controller_->alternative_job());
1548 } else { 1548 } else {
1549 EXPECT_FALSE(job_controller_->alternative_job()); 1549 EXPECT_FALSE(job_controller_->alternative_job());
1550 } 1550 }
1551 1551
1552 // |main_job| succeeds and should report status to Request. 1552 // |main_job| succeeds and should report status to Request.
1553 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)) 1553 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _))
1554 .WillOnce(Invoke(DeleteHttpStreamPointer)); 1554 .WillOnce(Invoke(DeleteHttpStreamPointer));
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1621 Preconnect(kNumPreconects); 1621 Preconnect(kNumPreconects);
1622 // If experiment is enabled, only 1 stream is requested. 1622 // If experiment is enabled, only 1 stream is requested.
1623 EXPECT_EQ( 1623 EXPECT_EQ(
1624 (int)actual_num_connects, 1624 (int)actual_num_connects,
1625 HttpStreamFactoryImplJobPeer::GetNumStreams(job_controller_->main_job())); 1625 HttpStreamFactoryImplJobPeer::GetNumStreams(job_controller_->main_job()));
1626 base::RunLoop().RunUntilIdle(); 1626 base::RunLoop().RunUntilIdle();
1627 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); 1627 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_));
1628 } 1628 }
1629 1629
1630 } // namespace net 1630 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698