| 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 |