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 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
526 | 526 |
527 url_loader_client_.RunUntilCachedMetadataReceived(); | 527 url_loader_client_.RunUntilCachedMetadataReceived(); |
528 EXPECT_EQ("hello", url_loader_client_.cached_metadata()); | 528 EXPECT_EQ("hello", url_loader_client_.cached_metadata()); |
529 | 529 |
530 EXPECT_FALSE(url_loader_client_.has_received_upload_progress()); | 530 EXPECT_FALSE(url_loader_client_.has_received_upload_progress()); |
531 } | 531 } |
532 | 532 |
533 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndInFlightRequests) { | 533 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndInFlightRequests) { |
534 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 534 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
535 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 535 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
536 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 536 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
537 EXPECT_EQ(1, rdh_.num_in_flight_requests_for_testing()); | 537 EXPECT_EQ(1, rdh_.num_in_flight_requests_for_testing()); |
538 handler_ = nullptr; | 538 handler_ = nullptr; |
539 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 539 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
540 } | 540 } |
541 | 541 |
542 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadWithInsufficientResource) { | 542 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadWithInsufficientResource) { |
543 rdh_.set_max_num_in_flight_requests_per_process(0); | 543 rdh_.set_max_num_in_flight_requests_per_process(0); |
544 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 544 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
545 | 545 |
546 ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead(-1)); | 546 ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead()); |
547 // TODO(mmenke): Make this fail with net::ERR_INSUFFICIENT_RESOURCES. | 547 // TODO(mmenke): Make this fail with net::ERR_INSUFFICIENT_RESOURCES. |
548 EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code()); | 548 EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code()); |
549 EXPECT_EQ(1, rdh_.num_in_flight_requests_for_testing()); | 549 EXPECT_EQ(1, rdh_.num_in_flight_requests_for_testing()); |
550 handler_ = nullptr; | 550 handler_ = nullptr; |
551 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 551 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
552 } | 552 } |
553 | 553 |
554 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndOnReadCompleted) { | 554 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndOnReadCompleted) { |
555 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 555 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
556 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 556 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
557 // The buffer size that the mime sniffer requires implicitly. | 557 // The buffer size that the mime sniffer requires implicitly. |
558 ASSERT_GE(mock_loader_->io_buffer_size(), | 558 ASSERT_GE(mock_loader_->io_buffer_size(), |
559 kSizeMimeSnifferRequiresForFirstOnWillRead); | 559 kSizeMimeSnifferRequiresForFirstOnWillRead); |
560 | 560 |
561 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 561 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
562 mock_loader_->OnReadCompleted("AB")); | 562 mock_loader_->OnReadCompleted("AB")); |
563 | 563 |
564 url_loader_client_.RunUntilResponseBodyArrived(); | 564 url_loader_client_.RunUntilResponseBodyArrived(); |
565 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 565 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
566 | 566 |
(...skipping 11 matching lines...) Expand all Loading... |
578 contents.append(buffer, read_size); | 578 contents.append(buffer, read_size); |
579 } | 579 } |
580 EXPECT_EQ("AB", contents); | 580 EXPECT_EQ("AB", contents); |
581 } | 581 } |
582 | 582 |
583 TEST_F(MojoAsyncResourceHandlerTest, | 583 TEST_F(MojoAsyncResourceHandlerTest, |
584 OnWillReadAndOnReadCompletedWithInsufficientInitialCapacity) { | 584 OnWillReadAndOnReadCompletedWithInsufficientInitialCapacity) { |
585 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); | 585 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); |
586 | 586 |
587 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 587 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
588 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 588 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
589 // The buffer size that the mime sniffer requires implicitly. | 589 // The buffer size that the mime sniffer requires implicitly. |
590 ASSERT_GE(mock_loader_->io_buffer_size(), | 590 ASSERT_GE(mock_loader_->io_buffer_size(), |
591 kSizeMimeSnifferRequiresForFirstOnWillRead); | 591 kSizeMimeSnifferRequiresForFirstOnWillRead); |
592 | 592 |
593 const std::string data("abcdefgh"); | 593 const std::string data("abcdefgh"); |
594 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, | 594 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, |
595 mock_loader_->OnReadCompleted(data)); | 595 mock_loader_->OnReadCompleted(data)); |
596 | 596 |
597 url_loader_client_.RunUntilResponseBodyArrived(); | 597 url_loader_client_.RunUntilResponseBodyArrived(); |
598 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 598 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
(...skipping 13 matching lines...) Expand all Loading... |
612 contents.append(buffer, read_size); | 612 contents.append(buffer, read_size); |
613 } | 613 } |
614 EXPECT_EQ(data, contents); | 614 EXPECT_EQ(data, contents); |
615 EXPECT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, | 615 EXPECT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, |
616 mock_loader_->status()); | 616 mock_loader_->status()); |
617 } | 617 } |
618 | 618 |
619 TEST_F(MojoAsyncResourceHandlerTest, | 619 TEST_F(MojoAsyncResourceHandlerTest, |
620 IOBufferFromOnWillReadShouldRemainValidEvenIfHandlerIsGone) { | 620 IOBufferFromOnWillReadShouldRemainValidEvenIfHandlerIsGone) { |
621 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 621 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
622 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 622 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
623 // The io_buffer size that the mime sniffer requires implicitly. | 623 // The io_buffer size that the mime sniffer requires implicitly. |
624 ASSERT_GE(mock_loader_->io_buffer_size(), | 624 ASSERT_GE(mock_loader_->io_buffer_size(), |
625 kSizeMimeSnifferRequiresForFirstOnWillRead); | 625 kSizeMimeSnifferRequiresForFirstOnWillRead); |
626 | 626 |
627 handler_ = nullptr; | 627 handler_ = nullptr; |
628 url_loader_client_.Unbind(); | 628 url_loader_client_.Unbind(); |
629 base::RunLoop().RunUntilIdle(); | 629 base::RunLoop().RunUntilIdle(); |
630 | 630 |
631 // Hopefully ASAN checks this operation's validity. | 631 // Hopefully ASAN checks this operation's validity. |
632 mock_loader_->io_buffer()->data()[0] = 'A'; | 632 mock_loader_->io_buffer()->data()[0] = 'A'; |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
712 | 712 |
713 url_loader_client_.RunUntilComplete(); | 713 url_loader_client_.RunUntilComplete(); |
714 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 714 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
715 EXPECT_EQ(net::ERR_TIMED_OUT, | 715 EXPECT_EQ(net::ERR_TIMED_OUT, |
716 url_loader_client_.completion_status().error_code); | 716 url_loader_client_.completion_status().error_code); |
717 } | 717 } |
718 | 718 |
719 TEST_F(MojoAsyncResourceHandlerTest, ResponseCompletionShouldCloseDataPipe) { | 719 TEST_F(MojoAsyncResourceHandlerTest, ResponseCompletionShouldCloseDataPipe) { |
720 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 720 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
721 | 721 |
722 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 722 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
723 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 723 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
724 mock_loader_->OnReadCompleted("AB")); | 724 mock_loader_->OnReadCompleted("AB")); |
725 url_loader_client_.RunUntilResponseBodyArrived(); | 725 url_loader_client_.RunUntilResponseBodyArrived(); |
726 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 726 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
727 | 727 |
728 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 728 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
729 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 729 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
730 mock_loader_->OnResponseCompleted(status)); | 730 mock_loader_->OnResponseCompleted(status)); |
731 | 731 |
732 url_loader_client_.RunUntilComplete(); | 732 url_loader_client_.RunUntilComplete(); |
733 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 733 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
734 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 734 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
735 | 735 |
736 while (true) { | 736 while (true) { |
737 char buffer[16]; | 737 char buffer[16]; |
738 uint32_t read_size = sizeof(buffer); | 738 uint32_t read_size = sizeof(buffer); |
739 MojoResult result = | 739 MojoResult result = |
740 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, | 740 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, |
741 &read_size, MOJO_READ_DATA_FLAG_NONE); | 741 &read_size, MOJO_READ_DATA_FLAG_NONE); |
742 if (result == MOJO_RESULT_FAILED_PRECONDITION) | 742 if (result == MOJO_RESULT_FAILED_PRECONDITION) |
743 break; | 743 break; |
744 ASSERT_TRUE(result == MOJO_RESULT_SHOULD_WAIT || result == MOJO_RESULT_OK); | 744 ASSERT_TRUE(result == MOJO_RESULT_SHOULD_WAIT || result == MOJO_RESULT_OK); |
745 } | 745 } |
746 } | 746 } |
747 | 747 |
748 TEST_F(MojoAsyncResourceHandlerTest, OutOfBandCancelDuringBodyTransmission) { | 748 TEST_F(MojoAsyncResourceHandlerTest, OutOfBandCancelDuringBodyTransmission) { |
749 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 749 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
750 | 750 |
751 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 751 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
752 std::string data(mock_loader_->io_buffer_size(), 'a'); | 752 std::string data(mock_loader_->io_buffer_size(), 'a'); |
753 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, | 753 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, |
754 mock_loader_->OnReadCompleted(data)); | 754 mock_loader_->OnReadCompleted(data)); |
755 url_loader_client_.RunUntilResponseBodyArrived(); | 755 url_loader_client_.RunUntilResponseBodyArrived(); |
756 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 756 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
757 | 757 |
758 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); | 758 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); |
759 ASSERT_EQ( | 759 ASSERT_EQ( |
760 MockResourceLoader::Status::IDLE, | 760 MockResourceLoader::Status::IDLE, |
761 mock_loader_->OnResponseCompletedFromExternalOutOfBandCancel(status)); | 761 mock_loader_->OnResponseCompletedFromExternalOutOfBandCancel(status)); |
(...skipping 17 matching lines...) Expand all Loading... |
779 } | 779 } |
780 EXPECT_EQ(MOJO_RESULT_OK, result); | 780 EXPECT_EQ(MOJO_RESULT_OK, result); |
781 actual.append(buf, read_size); | 781 actual.append(buf, read_size); |
782 } | 782 } |
783 EXPECT_EQ(data, actual); | 783 EXPECT_EQ(data, actual); |
784 } | 784 } |
785 | 785 |
786 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteFailsOnWillRead) { | 786 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteFailsOnWillRead) { |
787 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); | 787 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); |
788 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 788 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
789 ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead(-1)); | 789 ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead()); |
790 } | 790 } |
791 | 791 |
792 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteReturnsShouldWaitOnWillRead) { | 792 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteReturnsShouldWaitOnWillRead) { |
793 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 793 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
794 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 794 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
795 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 795 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
796 } | 796 } |
797 | 797 |
798 TEST_F(MojoAsyncResourceHandlerTest, | 798 TEST_F(MojoAsyncResourceHandlerTest, |
799 BeginWriteReturnsShouldWaitOnWillReadAndThenReturnsOK) { | 799 BeginWriteReturnsShouldWaitOnWillReadAndThenReturnsOK) { |
800 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 800 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
801 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 801 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
802 size_t written = 0; | 802 size_t written = 0; |
803 while (true) { | 803 while (true) { |
804 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 804 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
805 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( | 805 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( |
806 std::string(mock_loader_->io_buffer_size(), 'X')); | 806 std::string(mock_loader_->io_buffer_size(), 'X')); |
807 written += mock_loader_->io_buffer_size(); | 807 written += mock_loader_->io_buffer_size(); |
808 if (result == MockResourceLoader::Status::CALLBACK_PENDING) | 808 if (result == MockResourceLoader::Status::CALLBACK_PENDING) |
809 break; | 809 break; |
810 ASSERT_EQ(MockResourceLoader::Status::IDLE, result); | 810 ASSERT_EQ(MockResourceLoader::Status::IDLE, result); |
811 } | 811 } |
812 | 812 |
813 url_loader_client_.RunUntilResponseBodyArrived(); | 813 url_loader_client_.RunUntilResponseBodyArrived(); |
814 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 814 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
(...skipping 15 matching lines...) Expand all Loading... |
830 | 830 |
831 EXPECT_EQ(std::string(written, 'X'), actual); | 831 EXPECT_EQ(std::string(written, 'X'), actual); |
832 EXPECT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->status()); | 832 EXPECT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->status()); |
833 } | 833 } |
834 | 834 |
835 TEST_F(MojoAsyncResourceHandlerTest, | 835 TEST_F(MojoAsyncResourceHandlerTest, |
836 EndWriteFailsOnWillReadWithInsufficientInitialCapacity) { | 836 EndWriteFailsOnWillReadWithInsufficientInitialCapacity) { |
837 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); | 837 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); |
838 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 838 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
839 handler_->set_end_write_expectation(MOJO_RESULT_UNKNOWN); | 839 handler_->set_end_write_expectation(MOJO_RESULT_UNKNOWN); |
840 ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead(-1)); | 840 ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead()); |
841 } | 841 } |
842 | 842 |
843 TEST_F(MojoAsyncResourceHandlerTest, EndWriteFailsOnReadCompleted) { | 843 TEST_F(MojoAsyncResourceHandlerTest, EndWriteFailsOnReadCompleted) { |
844 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 844 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
845 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 845 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
846 | 846 |
847 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 847 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
848 ASSERT_EQ(MockResourceLoader::Status::CANCELED, | 848 ASSERT_EQ(MockResourceLoader::Status::CANCELED, |
849 mock_loader_->OnReadCompleted( | 849 mock_loader_->OnReadCompleted( |
850 std::string(mock_loader_->io_buffer_size(), 'w'))); | 850 std::string(mock_loader_->io_buffer_size(), 'w'))); |
851 } | 851 } |
852 | 852 |
853 TEST_F(MojoAsyncResourceHandlerTest, | 853 TEST_F(MojoAsyncResourceHandlerTest, |
854 EndWriteFailsOnReadCompletedWithInsufficientInitialCapacity) { | 854 EndWriteFailsOnReadCompletedWithInsufficientInitialCapacity) { |
855 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); | 855 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); |
856 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 856 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
857 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 857 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
858 | 858 |
859 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 859 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
860 ASSERT_EQ(MockResourceLoader::Status::CANCELED, | 860 ASSERT_EQ(MockResourceLoader::Status::CANCELED, |
861 mock_loader_->OnReadCompleted( | 861 mock_loader_->OnReadCompleted( |
862 std::string(mock_loader_->io_buffer_size(), 'w'))); | 862 std::string(mock_loader_->io_buffer_size(), 'w'))); |
863 } | 863 } |
864 | 864 |
865 TEST_F(MojoAsyncResourceHandlerTest, | 865 TEST_F(MojoAsyncResourceHandlerTest, |
866 EndWriteFailsOnResumeWithInsufficientInitialCapacity) { | 866 EndWriteFailsOnResumeWithInsufficientInitialCapacity) { |
867 MojoAsyncResourceHandler::SetAllocationSizeForTesting(8); | 867 MojoAsyncResourceHandler::SetAllocationSizeForTesting(8); |
868 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 868 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
869 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 869 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
870 | 870 |
871 while (true) { | 871 while (true) { |
872 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( | 872 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( |
873 std::string(mock_loader_->io_buffer_size(), 'A')); | 873 std::string(mock_loader_->io_buffer_size(), 'A')); |
874 if (result == MockResourceLoader::Status::CALLBACK_PENDING) | 874 if (result == MockResourceLoader::Status::CALLBACK_PENDING) |
875 break; | 875 break; |
876 ASSERT_EQ(MockResourceLoader::Status::IDLE, result); | 876 ASSERT_EQ(MockResourceLoader::Status::IDLE, result); |
877 | 877 |
878 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 878 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
879 } | 879 } |
880 | 880 |
881 url_loader_client_.RunUntilResponseBodyArrived(); | 881 url_loader_client_.RunUntilResponseBodyArrived(); |
882 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 882 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
883 | 883 |
884 while (true) { | 884 while (true) { |
885 char buf[16]; | 885 char buf[16]; |
886 uint32_t read_size = sizeof(buf); | 886 uint32_t read_size = sizeof(buf); |
887 MojoResult result = | 887 MojoResult result = |
888 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 888 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
962 EXPECT_EQ(net::LOWEST, request_->priority()); | 962 EXPECT_EQ(net::LOWEST, request_->priority()); |
963 | 963 |
964 handler_->SetPriority(net::RequestPriority::HIGHEST, kIntraPriority); | 964 handler_->SetPriority(net::RequestPriority::HIGHEST, kIntraPriority); |
965 | 965 |
966 EXPECT_EQ(net::HIGHEST, request_->priority()); | 966 EXPECT_EQ(net::HIGHEST, request_->priority()); |
967 } | 967 } |
968 | 968 |
969 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 969 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
970 OnWillReadWithLongContents) { | 970 OnWillReadWithLongContents) { |
971 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 971 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
972 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 972 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
973 std::string expected; | 973 std::string expected; |
974 for (int i = 0; i < 3 * mock_loader_->io_buffer_size() + 2; ++i) | 974 for (int i = 0; i < 3 * mock_loader_->io_buffer_size() + 2; ++i) |
975 expected += ('A' + i % 26); | 975 expected += ('A' + i % 26); |
976 | 976 |
977 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnReadCompleted(0)); | 977 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnReadCompleted(0)); |
978 | 978 |
979 size_t written = 0; | 979 size_t written = 0; |
980 std::string actual; | 980 std::string actual; |
981 while (actual.size() < expected.size()) { | 981 while (actual.size() < expected.size()) { |
982 while (written < expected.size() && | 982 while (written < expected.size() && |
983 mock_loader_->status() == MockResourceLoader::Status::IDLE) { | 983 mock_loader_->status() == MockResourceLoader::Status::IDLE) { |
984 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 984 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
985 const size_t to_be_written = | 985 const size_t to_be_written = |
986 std::min(static_cast<size_t>(mock_loader_->io_buffer_size()), | 986 std::min(static_cast<size_t>(mock_loader_->io_buffer_size()), |
987 expected.size() - written); | 987 expected.size() - written); |
988 | 988 |
989 // Request should be resumed or paused. | 989 // Request should be resumed or paused. |
990 ASSERT_NE(MockResourceLoader::Status::CANCELED, | 990 ASSERT_NE(MockResourceLoader::Status::CANCELED, |
991 mock_loader_->OnReadCompleted( | 991 mock_loader_->OnReadCompleted( |
992 expected.substr(written, to_be_written))); | 992 expected.substr(written, to_be_written))); |
993 | 993 |
994 written += to_be_written; | 994 written += to_be_written; |
(...skipping 16 matching lines...) Expand all Loading... |
1011 // Give mojo a chance pass data back and forth, and to request more data | 1011 // Give mojo a chance pass data back and forth, and to request more data |
1012 // from the handler. | 1012 // from the handler. |
1013 base::RunLoop().RunUntilIdle(); | 1013 base::RunLoop().RunUntilIdle(); |
1014 } | 1014 } |
1015 EXPECT_EQ(expected, actual); | 1015 EXPECT_EQ(expected, actual); |
1016 } | 1016 } |
1017 | 1017 |
1018 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 1018 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
1019 BeginWriteFailsOnReadCompleted) { | 1019 BeginWriteFailsOnReadCompleted) { |
1020 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 1020 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
1021 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 1021 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
1022 | 1022 |
1023 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); | 1023 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); |
1024 ASSERT_EQ(MockResourceLoader::Status::CANCELED, | 1024 ASSERT_EQ(MockResourceLoader::Status::CANCELED, |
1025 mock_loader_->OnReadCompleted( | 1025 mock_loader_->OnReadCompleted( |
1026 std::string(mock_loader_->io_buffer_size(), 'A'))); | 1026 std::string(mock_loader_->io_buffer_size(), 'A'))); |
1027 } | 1027 } |
1028 | 1028 |
1029 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 1029 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
1030 BeginWriteReturnsShouldWaitOnReadCompleted) { | 1030 BeginWriteReturnsShouldWaitOnReadCompleted) { |
1031 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 1031 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
1032 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 1032 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
1033 | 1033 |
1034 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 1034 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
1035 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, | 1035 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, |
1036 mock_loader_->OnReadCompleted( | 1036 mock_loader_->OnReadCompleted( |
1037 std::string(mock_loader_->io_buffer_size(), 'A'))); | 1037 std::string(mock_loader_->io_buffer_size(), 'A'))); |
1038 } | 1038 } |
1039 | 1039 |
1040 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 1040 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
1041 BeginWriteFailsOnResume) { | 1041 BeginWriteFailsOnResume) { |
1042 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 1042 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
1043 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 1043 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
1044 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnReadCompleted(0)); | 1044 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnReadCompleted(0)); |
1045 | 1045 |
1046 while (true) { | 1046 while (true) { |
1047 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 1047 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
1048 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( | 1048 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( |
1049 std::string(mock_loader_->io_buffer_size(), 'A')); | 1049 std::string(mock_loader_->io_buffer_size(), 'A')); |
1050 if (result == MockResourceLoader::Status::CALLBACK_PENDING) | 1050 if (result == MockResourceLoader::Status::CALLBACK_PENDING) |
1051 break; | 1051 break; |
1052 ASSERT_EQ(MockResourceLoader::Status::IDLE, result); | 1052 ASSERT_EQ(MockResourceLoader::Status::IDLE, result); |
1053 } | 1053 } |
1054 url_loader_client_.RunUntilResponseBodyArrived(); | 1054 url_loader_client_.RunUntilResponseBodyArrived(); |
1055 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 1055 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
1056 | 1056 |
1057 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); | 1057 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); |
1058 | 1058 |
1059 while (mock_loader_->status() != MockResourceLoader::Status::CANCELED) { | 1059 while (mock_loader_->status() != MockResourceLoader::Status::CANCELED) { |
1060 char buf[256]; | 1060 char buf[256]; |
1061 uint32_t read_size = sizeof(buf); | 1061 uint32_t read_size = sizeof(buf); |
1062 MojoResult result = | 1062 MojoResult result = |
1063 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 1063 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
1064 MOJO_READ_DATA_FLAG_NONE); | 1064 MOJO_READ_DATA_FLAG_NONE); |
1065 ASSERT_TRUE(result == MOJO_RESULT_OK || result == MOJO_RESULT_SHOULD_WAIT); | 1065 ASSERT_TRUE(result == MOJO_RESULT_OK || result == MOJO_RESULT_SHOULD_WAIT); |
1066 base::RunLoop().RunUntilIdle(); | 1066 base::RunLoop().RunUntilIdle(); |
1067 } | 1067 } |
1068 | 1068 |
1069 EXPECT_FALSE(url_loader_client_.has_received_completion()); | 1069 EXPECT_FALSE(url_loader_client_.has_received_completion()); |
1070 EXPECT_EQ(net::ERR_FAILED, mock_loader_->error_code()); | 1070 EXPECT_EQ(net::ERR_FAILED, mock_loader_->error_code()); |
1071 } | 1071 } |
1072 | 1072 |
1073 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, CancelWhileWaiting) { | 1073 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, CancelWhileWaiting) { |
1074 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 1074 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
1075 | 1075 |
1076 while (true) { | 1076 while (true) { |
1077 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 1077 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
1078 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( | 1078 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( |
1079 std::string(mock_loader_->io_buffer_size(), 'A')); | 1079 std::string(mock_loader_->io_buffer_size(), 'A')); |
1080 if (result == MockResourceLoader::Status::CALLBACK_PENDING) | 1080 if (result == MockResourceLoader::Status::CALLBACK_PENDING) |
1081 break; | 1081 break; |
1082 ASSERT_EQ(MockResourceLoader::Status::IDLE, result); | 1082 ASSERT_EQ(MockResourceLoader::Status::IDLE, result); |
1083 } | 1083 } |
1084 | 1084 |
1085 url_loader_client_.RunUntilResponseBodyArrived(); | 1085 url_loader_client_.RunUntilResponseBodyArrived(); |
1086 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 1086 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
1087 | 1087 |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1190 | 1190 |
1191 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 1191 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
1192 mock_loader_->OnWillStart(request_->url())); | 1192 mock_loader_->OnWillStart(request_->url())); |
1193 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 1193 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
1194 mock_loader_->OnResponseStarted( | 1194 mock_loader_->OnResponseStarted( |
1195 make_scoped_refptr(new ResourceResponse()))); | 1195 make_scoped_refptr(new ResourceResponse()))); |
1196 | 1196 |
1197 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1197 ASSERT_FALSE(url_loader_client_.has_received_response()); |
1198 url_loader_client_.RunUntilResponseReceived(); | 1198 url_loader_client_.RunUntilResponseReceived(); |
1199 | 1199 |
1200 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 1200 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
1201 | 1201 |
1202 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); | 1202 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); |
1203 | 1203 |
1204 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 1204 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
1205 mock_loader_->OnReadCompleted("A")); | 1205 mock_loader_->OnReadCompleted("A")); |
1206 url_loader_client_.RunUntilResponseBodyArrived(); | 1206 url_loader_client_.RunUntilResponseBodyArrived(); |
1207 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 1207 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
1208 | 1208 |
1209 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 1209 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
1210 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 1210 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
(...skipping 24 matching lines...) Expand all Loading... |
1235 | 1235 |
1236 // MimeResourceHandler calls delegated ResourceHandler's methods in this order. | 1236 // MimeResourceHandler calls delegated ResourceHandler's methods in this order. |
1237 TEST_P( | 1237 TEST_P( |
1238 MojoAsyncResourceHandlerWithAllocationSizeTest, | 1238 MojoAsyncResourceHandlerWithAllocationSizeTest, |
1239 OnWillStartThenOnWillReadThenOnResponseStartedThenOnReadCompletedThenOnRespo
nseCompleted) { | 1239 OnWillStartThenOnWillReadThenOnResponseStartedThenOnReadCompletedThenOnRespo
nseCompleted) { |
1240 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 1240 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
1241 | 1241 |
1242 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 1242 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
1243 mock_loader_->OnWillStart(request_->url())); | 1243 mock_loader_->OnWillStart(request_->url())); |
1244 | 1244 |
1245 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 1245 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
1246 | 1246 |
1247 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 1247 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
1248 mock_loader_->OnResponseStarted( | 1248 mock_loader_->OnResponseStarted( |
1249 make_scoped_refptr(new ResourceResponse()))); | 1249 make_scoped_refptr(new ResourceResponse()))); |
1250 | 1250 |
1251 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1251 ASSERT_FALSE(url_loader_client_.has_received_response()); |
1252 url_loader_client_.RunUntilResponseReceived(); | 1252 url_loader_client_.RunUntilResponseReceived(); |
1253 | 1253 |
1254 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 1254 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
1255 mock_loader_->OnReadCompleted("B")); | 1255 mock_loader_->OnReadCompleted("B")); |
(...skipping 27 matching lines...) Expand all Loading... |
1283 } | 1283 } |
1284 } | 1284 } |
1285 EXPECT_EQ("B", body); | 1285 EXPECT_EQ("B", body); |
1286 } | 1286 } |
1287 | 1287 |
1288 INSTANTIATE_TEST_CASE_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 1288 INSTANTIATE_TEST_CASE_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
1289 MojoAsyncResourceHandlerWithAllocationSizeTest, | 1289 MojoAsyncResourceHandlerWithAllocationSizeTest, |
1290 ::testing::Values(8, 32 * 2014)); | 1290 ::testing::Values(8, 32 * 2014)); |
1291 } // namespace | 1291 } // namespace |
1292 } // namespace content | 1292 } // namespace content |
OLD | NEW |