OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "content/browser/loader/mojo_async_resource_handler.h" | 5 #include "content/browser/loader/mojo_async_resource_handler.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 450 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
451 } | 451 } |
452 | 452 |
453 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndOnReadCompleted) { | 453 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndOnReadCompleted) { |
454 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 454 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
455 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 455 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
456 // The buffer size that the mime sniffer requires implicitly. | 456 // The buffer size that the mime sniffer requires implicitly. |
457 ASSERT_GE(mock_loader_->io_buffer_size(), | 457 ASSERT_GE(mock_loader_->io_buffer_size(), |
458 kSizeMimeSnifferRequiresForFirstOnWillRead); | 458 kSizeMimeSnifferRequiresForFirstOnWillRead); |
459 | 459 |
| 460 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 461 mock_loader_->OnReadCompleted("AB")); |
| 462 |
460 url_loader_client_.RunUntilResponseBodyArrived(); | 463 url_loader_client_.RunUntilResponseBodyArrived(); |
461 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 464 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
462 | 465 |
463 ASSERT_EQ(MockResourceLoader::Status::IDLE, | |
464 mock_loader_->OnReadCompleted("AB")); | |
465 | |
466 std::string contents; | 466 std::string contents; |
467 while (contents.size() < 2) { | 467 while (contents.size() < 2) { |
468 char buffer[16]; | 468 char buffer[16]; |
469 uint32_t read_size = sizeof(buffer); | 469 uint32_t read_size = sizeof(buffer); |
470 MojoResult result = | 470 MojoResult result = |
471 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, | 471 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, |
472 &read_size, MOJO_READ_DATA_FLAG_NONE); | 472 &read_size, MOJO_READ_DATA_FLAG_NONE); |
473 if (result == MOJO_RESULT_SHOULD_WAIT) { | 473 if (result == MOJO_RESULT_SHOULD_WAIT) { |
474 base::RunLoop().RunUntilIdle(); | 474 base::RunLoop().RunUntilIdle(); |
475 continue; | 475 continue; |
476 } | 476 } |
477 contents.append(buffer, read_size); | 477 contents.append(buffer, read_size); |
478 } | 478 } |
479 EXPECT_EQ("AB", contents); | 479 EXPECT_EQ("AB", contents); |
480 } | 480 } |
481 | 481 |
482 TEST_F(MojoAsyncResourceHandlerTest, | 482 TEST_F(MojoAsyncResourceHandlerTest, |
483 OnWillReadAndOnReadCompletedWithInsufficientInitialCapacity) { | 483 OnWillReadAndOnReadCompletedWithInsufficientInitialCapacity) { |
484 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); | 484 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); |
485 | 485 |
486 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 486 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
487 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 487 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
488 // The buffer size that the mime sniffer requires implicitly. | 488 // The buffer size that the mime sniffer requires implicitly. |
489 ASSERT_GE(mock_loader_->io_buffer_size(), | 489 ASSERT_GE(mock_loader_->io_buffer_size(), |
490 kSizeMimeSnifferRequiresForFirstOnWillRead); | 490 kSizeMimeSnifferRequiresForFirstOnWillRead); |
491 | 491 |
492 url_loader_client_.RunUntilResponseBodyArrived(); | |
493 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | |
494 | |
495 const std::string data("abcdefgh"); | 492 const std::string data("abcdefgh"); |
496 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, | 493 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, |
497 mock_loader_->OnReadCompleted(data)); | 494 mock_loader_->OnReadCompleted(data)); |
498 | 495 |
| 496 url_loader_client_.RunUntilResponseBodyArrived(); |
| 497 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 498 |
499 std::string contents; | 499 std::string contents; |
500 while (contents.size() < data.size()) { | 500 while (contents.size() < data.size()) { |
501 // This is needed for Resume to be called. | 501 // This is needed for Resume to be called. |
502 base::RunLoop().RunUntilIdle(); | 502 base::RunLoop().RunUntilIdle(); |
503 char buffer[16]; | 503 char buffer[16]; |
504 uint32_t read_size = sizeof(buffer); | 504 uint32_t read_size = sizeof(buffer); |
505 MojoResult result = | 505 MojoResult result = |
506 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, | 506 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, |
507 &read_size, MOJO_READ_DATA_FLAG_NONE); | 507 &read_size, MOJO_READ_DATA_FLAG_NONE); |
508 if (result == MOJO_RESULT_SHOULD_WAIT) | 508 if (result == MOJO_RESULT_SHOULD_WAIT) |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
612 url_loader_client_.RunUntilComplete(); | 612 url_loader_client_.RunUntilComplete(); |
613 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 613 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
614 EXPECT_EQ(net::ERR_TIMED_OUT, | 614 EXPECT_EQ(net::ERR_TIMED_OUT, |
615 url_loader_client_.completion_status().error_code); | 615 url_loader_client_.completion_status().error_code); |
616 } | 616 } |
617 | 617 |
618 TEST_F(MojoAsyncResourceHandlerTest, ResponseCompletionShouldCloseDataPipe) { | 618 TEST_F(MojoAsyncResourceHandlerTest, ResponseCompletionShouldCloseDataPipe) { |
619 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 619 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
620 | 620 |
621 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 621 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 622 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 623 mock_loader_->OnReadCompleted("AB")); |
622 url_loader_client_.RunUntilResponseBodyArrived(); | 624 url_loader_client_.RunUntilResponseBodyArrived(); |
623 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 625 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
624 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnReadCompleted(0)); | |
625 | 626 |
626 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 627 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
627 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 628 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
628 mock_loader_->OnResponseCompleted(status)); | 629 mock_loader_->OnResponseCompleted(status)); |
629 | 630 |
630 url_loader_client_.RunUntilComplete(); | 631 url_loader_client_.RunUntilComplete(); |
631 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 632 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
632 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 633 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
633 | 634 |
634 while (true) { | 635 while (true) { |
635 char buffer[16]; | 636 char buffer[16]; |
636 uint32_t read_size = sizeof(buffer); | 637 uint32_t read_size = sizeof(buffer); |
637 MojoResult result = | 638 MojoResult result = |
638 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, | 639 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, |
639 &read_size, MOJO_READ_DATA_FLAG_NONE); | 640 &read_size, MOJO_READ_DATA_FLAG_NONE); |
640 if (result == MOJO_RESULT_FAILED_PRECONDITION) | 641 if (result == MOJO_RESULT_FAILED_PRECONDITION) |
641 break; | 642 break; |
642 ASSERT_EQ(result, MOJO_RESULT_SHOULD_WAIT); | 643 ASSERT_TRUE(result == MOJO_RESULT_SHOULD_WAIT || result == MOJO_RESULT_OK); |
643 } | 644 } |
644 } | 645 } |
645 | 646 |
646 TEST_F(MojoAsyncResourceHandlerTest, OutOfBandCancelDuringBodyTransmission) { | 647 TEST_F(MojoAsyncResourceHandlerTest, OutOfBandCancelDuringBodyTransmission) { |
647 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 648 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
648 | 649 |
649 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 650 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
650 url_loader_client_.RunUntilResponseBodyArrived(); | |
651 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | |
652 std::string data(mock_loader_->io_buffer_size(), 'a'); | 651 std::string data(mock_loader_->io_buffer_size(), 'a'); |
653 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, | 652 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, |
654 mock_loader_->OnReadCompleted(data)); | 653 mock_loader_->OnReadCompleted(data)); |
| 654 url_loader_client_.RunUntilResponseBodyArrived(); |
| 655 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
655 | 656 |
656 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); | 657 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); |
657 ASSERT_EQ( | 658 ASSERT_EQ( |
658 MockResourceLoader::Status::IDLE, | 659 MockResourceLoader::Status::IDLE, |
659 mock_loader_->OnResponseCompletedFromExternalOutOfBandCancel(status)); | 660 mock_loader_->OnResponseCompletedFromExternalOutOfBandCancel(status)); |
660 | 661 |
661 url_loader_client_.RunUntilComplete(); | 662 url_loader_client_.RunUntilComplete(); |
662 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 663 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
663 EXPECT_EQ(net::ERR_FAILED, url_loader_client_.completion_status().error_code); | 664 EXPECT_EQ(net::ERR_FAILED, url_loader_client_.completion_status().error_code); |
664 | 665 |
665 std::string actual; | 666 std::string actual; |
666 while (true) { | 667 while (true) { |
667 char buf[16]; | 668 char buf[16]; |
668 uint32_t read_size = sizeof(buf); | 669 uint32_t read_size = sizeof(buf); |
669 MojoResult result = | 670 MojoResult result = |
670 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 671 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
671 MOJO_READ_DATA_FLAG_NONE); | 672 MOJO_READ_DATA_FLAG_NONE); |
672 if (result == MOJO_RESULT_FAILED_PRECONDITION) | 673 if (result == MOJO_RESULT_FAILED_PRECONDITION) |
673 break; | 674 break; |
674 if (result == MOJO_RESULT_SHOULD_WAIT) { | 675 if (result == MOJO_RESULT_SHOULD_WAIT) { |
675 base::RunLoop().RunUntilIdle(); | 676 base::RunLoop().RunUntilIdle(); |
676 continue; | 677 continue; |
677 } | 678 } |
678 EXPECT_EQ(MOJO_RESULT_OK, result); | 679 EXPECT_EQ(MOJO_RESULT_OK, result); |
679 actual.append(buf, read_size); | 680 actual.append(buf, read_size); |
680 } | 681 } |
681 EXPECT_EQ(data, actual); | 682 EXPECT_EQ(data, actual); |
682 } | 683 } |
683 | 684 |
684 // In this case, an error is notified after OnWillRead, before OnReadCompleted. | |
685 TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission2) { | |
686 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | |
687 | |
688 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | |
689 url_loader_client_.RunUntilResponseBodyArrived(); | |
690 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | |
691 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); | |
692 ASSERT_EQ(MockResourceLoader::Status::IDLE, | |
693 mock_loader_->OnResponseCompleted(status)); | |
694 | |
695 url_loader_client_.RunUntilComplete(); | |
696 EXPECT_TRUE(url_loader_client_.has_received_completion()); | |
697 EXPECT_EQ(net::ERR_FAILED, url_loader_client_.completion_status().error_code); | |
698 | |
699 while (true) { | |
700 char buf[16]; | |
701 uint32_t read_size = sizeof(buf); | |
702 MojoResult result = | |
703 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | |
704 MOJO_READ_DATA_FLAG_NONE); | |
705 if (result == MOJO_RESULT_FAILED_PRECONDITION) | |
706 break; | |
707 ASSERT_EQ(MOJO_RESULT_SHOULD_WAIT, result); | |
708 base::RunLoop().RunUntilIdle(); | |
709 } | |
710 } | |
711 | |
712 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteFailsOnWillRead) { | 685 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteFailsOnWillRead) { |
713 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); | 686 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); |
714 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 687 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
715 ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead(-1)); | 688 ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead(-1)); |
716 } | 689 } |
717 | 690 |
718 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteReturnsShouldWaitOnWillRead) { | 691 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteReturnsShouldWaitOnWillRead) { |
719 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 692 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
720 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 693 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
721 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 694 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
786 ASSERT_EQ(MockResourceLoader::Status::CANCELED, | 759 ASSERT_EQ(MockResourceLoader::Status::CANCELED, |
787 mock_loader_->OnReadCompleted( | 760 mock_loader_->OnReadCompleted( |
788 std::string(mock_loader_->io_buffer_size(), 'w'))); | 761 std::string(mock_loader_->io_buffer_size(), 'w'))); |
789 } | 762 } |
790 | 763 |
791 TEST_F(MojoAsyncResourceHandlerTest, | 764 TEST_F(MojoAsyncResourceHandlerTest, |
792 EndWriteFailsOnResumeWithInsufficientInitialCapacity) { | 765 EndWriteFailsOnResumeWithInsufficientInitialCapacity) { |
793 MojoAsyncResourceHandler::SetAllocationSizeForTesting(8); | 766 MojoAsyncResourceHandler::SetAllocationSizeForTesting(8); |
794 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 767 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
795 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 768 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
796 url_loader_client_.RunUntilResponseBodyArrived(); | |
797 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | |
798 | 769 |
799 while (true) { | 770 while (true) { |
800 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( | 771 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( |
801 std::string(mock_loader_->io_buffer_size(), 'A')); | 772 std::string(mock_loader_->io_buffer_size(), 'A')); |
802 if (result == MockResourceLoader::Status::CALLBACK_PENDING) | 773 if (result == MockResourceLoader::Status::CALLBACK_PENDING) |
803 break; | 774 break; |
804 ASSERT_EQ(MockResourceLoader::Status::IDLE, result); | 775 ASSERT_EQ(MockResourceLoader::Status::IDLE, result); |
805 | 776 |
806 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 777 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
807 } | 778 } |
808 | 779 |
| 780 url_loader_client_.RunUntilResponseBodyArrived(); |
| 781 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 782 |
809 while (true) { | 783 while (true) { |
810 char buf[16]; | 784 char buf[16]; |
811 uint32_t read_size = sizeof(buf); | 785 uint32_t read_size = sizeof(buf); |
812 MojoResult result = | 786 MojoResult result = |
813 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 787 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
814 MOJO_READ_DATA_FLAG_NONE); | 788 MOJO_READ_DATA_FLAG_NONE); |
815 if (result == MOJO_RESULT_SHOULD_WAIT) | 789 if (result == MOJO_RESULT_SHOULD_WAIT) |
816 break; | 790 break; |
817 ASSERT_EQ(MOJO_RESULT_OK, result); | 791 ASSERT_EQ(MOJO_RESULT_OK, result); |
818 } | 792 } |
819 | 793 |
820 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 794 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
821 mock_loader_->WaitUntilIdleOrCanceled(); | 795 mock_loader_->WaitUntilIdleOrCanceled(); |
822 EXPECT_FALSE(url_loader_client_.has_received_completion()); | 796 EXPECT_FALSE(url_loader_client_.has_received_completion()); |
823 EXPECT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->status()); | 797 EXPECT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->status()); |
824 EXPECT_EQ(net::ERR_FAILED, mock_loader_->error_code()); | 798 EXPECT_EQ(net::ERR_FAILED, mock_loader_->error_code()); |
825 } | 799 } |
826 | 800 |
827 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 801 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
828 OnWillReadWithLongContents) { | 802 OnWillReadWithLongContents) { |
829 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 803 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
830 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 804 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
831 std::string expected; | 805 std::string expected; |
832 for (int i = 0; i < 3 * mock_loader_->io_buffer_size() + 2; ++i) | 806 for (int i = 0; i < 3 * mock_loader_->io_buffer_size() + 2; ++i) |
833 expected += ('A' + i % 26); | 807 expected += ('A' + i % 26); |
834 | 808 |
835 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnReadCompleted(0)); | 809 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnReadCompleted(0)); |
836 | 810 |
837 url_loader_client_.RunUntilResponseBodyArrived(); | |
838 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | |
839 | |
840 size_t written = 0; | 811 size_t written = 0; |
841 std::string actual; | 812 std::string actual; |
842 while (actual.size() < expected.size()) { | 813 while (actual.size() < expected.size()) { |
843 while (written < expected.size() && | 814 while (written < expected.size() && |
844 mock_loader_->status() == MockResourceLoader::Status::IDLE) { | 815 mock_loader_->status() == MockResourceLoader::Status::IDLE) { |
845 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 816 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
846 const size_t to_be_written = | 817 const size_t to_be_written = |
847 std::min(static_cast<size_t>(mock_loader_->io_buffer_size()), | 818 std::min(static_cast<size_t>(mock_loader_->io_buffer_size()), |
848 expected.size() - written); | 819 expected.size() - written); |
849 | 820 |
850 // Request should be resumed or paused. | 821 // Request should be resumed or paused. |
851 ASSERT_NE(MockResourceLoader::Status::CANCELED, | 822 ASSERT_NE(MockResourceLoader::Status::CANCELED, |
852 mock_loader_->OnReadCompleted( | 823 mock_loader_->OnReadCompleted( |
853 expected.substr(written, to_be_written))); | 824 expected.substr(written, to_be_written))); |
854 | 825 |
855 written += to_be_written; | 826 written += to_be_written; |
856 } | 827 } |
| 828 if (!url_loader_client_.response_body().is_valid()) { |
| 829 url_loader_client_.RunUntilResponseBodyArrived(); |
| 830 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 831 } |
857 | 832 |
858 char buf[16]; | 833 char buf[16]; |
859 uint32_t read_size = sizeof(buf); | 834 uint32_t read_size = sizeof(buf); |
860 MojoResult result = | 835 MojoResult result = |
861 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 836 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
862 MOJO_READ_DATA_FLAG_NONE); | 837 MOJO_READ_DATA_FLAG_NONE); |
863 if (result != MOJO_RESULT_SHOULD_WAIT) { | 838 if (result != MOJO_RESULT_SHOULD_WAIT) { |
864 ASSERT_EQ(MOJO_RESULT_OK, result); | 839 ASSERT_EQ(MOJO_RESULT_OK, result); |
865 actual.append(buf, read_size); | 840 actual.append(buf, read_size); |
866 } | 841 } |
(...skipping 25 matching lines...) Expand all Loading... |
892 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, | 867 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, |
893 mock_loader_->OnReadCompleted( | 868 mock_loader_->OnReadCompleted( |
894 std::string(mock_loader_->io_buffer_size(), 'A'))); | 869 std::string(mock_loader_->io_buffer_size(), 'A'))); |
895 } | 870 } |
896 | 871 |
897 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 872 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
898 BeginWriteFailsOnResume) { | 873 BeginWriteFailsOnResume) { |
899 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 874 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
900 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 875 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
901 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnReadCompleted(0)); | 876 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnReadCompleted(0)); |
902 url_loader_client_.RunUntilResponseBodyArrived(); | |
903 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | |
904 | 877 |
905 while (true) { | 878 while (true) { |
906 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 879 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
907 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( | 880 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( |
908 std::string(mock_loader_->io_buffer_size(), 'A')); | 881 std::string(mock_loader_->io_buffer_size(), 'A')); |
909 if (result == MockResourceLoader::Status::CALLBACK_PENDING) | 882 if (result == MockResourceLoader::Status::CALLBACK_PENDING) |
910 break; | 883 break; |
911 ASSERT_EQ(MockResourceLoader::Status::IDLE, result); | 884 ASSERT_EQ(MockResourceLoader::Status::IDLE, result); |
912 } | 885 } |
| 886 url_loader_client_.RunUntilResponseBodyArrived(); |
| 887 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 888 |
913 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); | 889 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); |
914 | 890 |
915 while (mock_loader_->status() != MockResourceLoader::Status::CANCELED) { | 891 while (mock_loader_->status() != MockResourceLoader::Status::CANCELED) { |
916 char buf[256]; | 892 char buf[256]; |
917 uint32_t read_size = sizeof(buf); | 893 uint32_t read_size = sizeof(buf); |
918 MojoResult result = | 894 MojoResult result = |
919 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 895 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
920 MOJO_READ_DATA_FLAG_NONE); | 896 MOJO_READ_DATA_FLAG_NONE); |
921 ASSERT_TRUE(result == MOJO_RESULT_OK || result == MOJO_RESULT_SHOULD_WAIT); | 897 ASSERT_TRUE(result == MOJO_RESULT_OK || result == MOJO_RESULT_SHOULD_WAIT); |
922 base::RunLoop().RunUntilIdle(); | 898 base::RunLoop().RunUntilIdle(); |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1049 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 1025 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
1050 mock_loader_->OnResponseStarted( | 1026 mock_loader_->OnResponseStarted( |
1051 make_scoped_refptr(new ResourceResponse()))); | 1027 make_scoped_refptr(new ResourceResponse()))); |
1052 | 1028 |
1053 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1029 ASSERT_FALSE(url_loader_client_.has_received_response()); |
1054 url_loader_client_.RunUntilResponseReceived(); | 1030 url_loader_client_.RunUntilResponseReceived(); |
1055 | 1031 |
1056 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 1032 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
1057 | 1033 |
1058 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); | 1034 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); |
| 1035 |
| 1036 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 1037 mock_loader_->OnReadCompleted("A")); |
1059 url_loader_client_.RunUntilResponseBodyArrived(); | 1038 url_loader_client_.RunUntilResponseBodyArrived(); |
1060 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 1039 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
1061 | 1040 |
1062 ASSERT_EQ(MockResourceLoader::Status::IDLE, | |
1063 mock_loader_->OnReadCompleted("A")); | |
1064 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 1041 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
1065 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 1042 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
1066 mock_loader_->OnResponseCompleted(status)); | 1043 mock_loader_->OnResponseCompleted(status)); |
1067 | 1044 |
1068 ASSERT_FALSE(url_loader_client_.has_received_completion()); | 1045 ASSERT_FALSE(url_loader_client_.has_received_completion()); |
1069 url_loader_client_.RunUntilComplete(); | 1046 url_loader_client_.RunUntilComplete(); |
1070 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 1047 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
1071 | 1048 |
1072 std::string body; | 1049 std::string body; |
1073 while (true) { | 1050 while (true) { |
(...skipping 18 matching lines...) Expand all Loading... |
1092 TEST_P( | 1069 TEST_P( |
1093 MojoAsyncResourceHandlerWithAllocationSizeTest, | 1070 MojoAsyncResourceHandlerWithAllocationSizeTest, |
1094 OnWillStartThenOnWillReadThenOnResponseStartedThenOnReadCompletedThenOnRespo
nseCompleted) { | 1071 OnWillStartThenOnWillReadThenOnResponseStartedThenOnReadCompletedThenOnRespo
nseCompleted) { |
1095 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 1072 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
1096 | 1073 |
1097 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 1074 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
1098 mock_loader_->OnWillStart(request_->url())); | 1075 mock_loader_->OnWillStart(request_->url())); |
1099 | 1076 |
1100 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 1077 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
1101 | 1078 |
1102 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); | |
1103 url_loader_client_.RunUntilResponseBodyArrived(); | |
1104 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | |
1105 | |
1106 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 1079 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
1107 mock_loader_->OnResponseStarted( | 1080 mock_loader_->OnResponseStarted( |
1108 make_scoped_refptr(new ResourceResponse()))); | 1081 make_scoped_refptr(new ResourceResponse()))); |
1109 | 1082 |
1110 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1083 ASSERT_FALSE(url_loader_client_.has_received_response()); |
1111 url_loader_client_.RunUntilResponseReceived(); | 1084 url_loader_client_.RunUntilResponseReceived(); |
1112 | 1085 |
1113 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 1086 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
1114 mock_loader_->OnReadCompleted("B")); | 1087 mock_loader_->OnReadCompleted("B")); |
| 1088 |
| 1089 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); |
| 1090 url_loader_client_.RunUntilResponseBodyArrived(); |
| 1091 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 1092 |
1115 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 1093 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
1116 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 1094 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
1117 mock_loader_->OnResponseCompleted(status)); | 1095 mock_loader_->OnResponseCompleted(status)); |
1118 | 1096 |
1119 ASSERT_FALSE(url_loader_client_.has_received_completion()); | 1097 ASSERT_FALSE(url_loader_client_.has_received_completion()); |
1120 url_loader_client_.RunUntilComplete(); | 1098 url_loader_client_.RunUntilComplete(); |
1121 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 1099 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
1122 | 1100 |
1123 std::string body; | 1101 std::string body; |
1124 while (true) { | 1102 while (true) { |
(...skipping 12 matching lines...) Expand all Loading... |
1137 } | 1115 } |
1138 } | 1116 } |
1139 EXPECT_EQ("B", body); | 1117 EXPECT_EQ("B", body); |
1140 } | 1118 } |
1141 | 1119 |
1142 INSTANTIATE_TEST_CASE_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 1120 INSTANTIATE_TEST_CASE_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
1143 MojoAsyncResourceHandlerWithAllocationSizeTest, | 1121 MojoAsyncResourceHandlerWithAllocationSizeTest, |
1144 ::testing::Values(8, 32 * 2014)); | 1122 ::testing::Values(8, 32 * 2014)); |
1145 } // namespace | 1123 } // namespace |
1146 } // namespace content | 1124 } // namespace content |
OLD | NEW |