| 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 536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 547 if (result == MOJO_RESULT_SHOULD_WAIT) { | 547 if (result == MOJO_RESULT_SHOULD_WAIT) { |
| 548 base::RunLoop().RunUntilIdle(); | 548 base::RunLoop().RunUntilIdle(); |
| 549 continue; | 549 continue; |
| 550 } | 550 } |
| 551 contents.append(buffer, read_size); | 551 contents.append(buffer, read_size); |
| 552 } | 552 } |
| 553 EXPECT_EQ("AB", contents); | 553 EXPECT_EQ("AB", contents); |
| 554 } | 554 } |
| 555 | 555 |
| 556 TEST_F(MojoAsyncResourceHandlerTest, | 556 TEST_F(MojoAsyncResourceHandlerTest, |
| 557 OnWillReadAndOnReadCompletedWithInsufficientInitialCapacity) { | |
| 558 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); | |
| 559 | |
| 560 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | |
| 561 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); | |
| 562 // The buffer size that the mime sniffer requires implicitly. | |
| 563 ASSERT_GE(mock_loader_->io_buffer_size(), | |
| 564 kSizeMimeSnifferRequiresForFirstOnWillRead); | |
| 565 | |
| 566 const std::string data("abcdefgh"); | |
| 567 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, | |
| 568 mock_loader_->OnReadCompleted(data)); | |
| 569 | |
| 570 url_loader_client_.RunUntilResponseBodyArrived(); | |
| 571 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | |
| 572 | |
| 573 std::string contents; | |
| 574 while (contents.size() < data.size()) { | |
| 575 // This is needed for Resume to be called. | |
| 576 base::RunLoop().RunUntilIdle(); | |
| 577 char buffer[16]; | |
| 578 uint32_t read_size = sizeof(buffer); | |
| 579 MojoResult result = | |
| 580 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, | |
| 581 &read_size, MOJO_READ_DATA_FLAG_NONE); | |
| 582 if (result == MOJO_RESULT_SHOULD_WAIT) | |
| 583 continue; | |
| 584 ASSERT_EQ(MOJO_RESULT_OK, result); | |
| 585 contents.append(buffer, read_size); | |
| 586 } | |
| 587 EXPECT_EQ(data, contents); | |
| 588 EXPECT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->status()); | |
| 589 } | |
| 590 | |
| 591 TEST_F(MojoAsyncResourceHandlerTest, | |
| 592 IOBufferFromOnWillReadShouldRemainValidEvenIfHandlerIsGone) { | 557 IOBufferFromOnWillReadShouldRemainValidEvenIfHandlerIsGone) { |
| 593 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 558 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 594 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); | 559 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
| 595 // The io_buffer size that the mime sniffer requires implicitly. | 560 // The io_buffer size that the mime sniffer requires implicitly. |
| 596 ASSERT_GE(mock_loader_->io_buffer_size(), | 561 ASSERT_GE(mock_loader_->io_buffer_size(), |
| 597 kSizeMimeSnifferRequiresForFirstOnWillRead); | 562 kSizeMimeSnifferRequiresForFirstOnWillRead); |
| 598 | 563 |
| 599 handler_ = nullptr; | 564 handler_ = nullptr; |
| 600 url_loader_client_.Unbind(); | 565 url_loader_client_.Unbind(); |
| 601 base::RunLoop().RunUntilIdle(); | 566 base::RunLoop().RunUntilIdle(); |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 876 mock_loader_->OnResponseCompleted( | 841 mock_loader_->OnResponseCompleted( |
| 877 net::URLRequestStatus::FromError(net::OK))); | 842 net::URLRequestStatus::FromError(net::OK))); |
| 878 | 843 |
| 879 url_loader_client_.RunUntilComplete(); | 844 url_loader_client_.RunUntilComplete(); |
| 880 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 845 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 881 | 846 |
| 882 handler_.reset(); | 847 handler_.reset(); |
| 883 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 848 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
| 884 } | 849 } |
| 885 | 850 |
| 886 TEST_F(MojoAsyncResourceHandlerTest, | |
| 887 EndWriteFailsOnWillReadWithInsufficientInitialCapacity) { | |
| 888 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); | |
| 889 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | |
| 890 handler_->set_end_write_expectation(MOJO_RESULT_UNKNOWN); | |
| 891 ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead()); | |
| 892 } | |
| 893 | |
| 894 TEST_F(MojoAsyncResourceHandlerTest, EndWriteFailsOnReadCompleted) { | 851 TEST_F(MojoAsyncResourceHandlerTest, EndWriteFailsOnReadCompleted) { |
| 895 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 852 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 896 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); | 853 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
| 897 | 854 |
| 898 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 855 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
| 899 ASSERT_EQ(MockResourceLoader::Status::CANCELED, | 856 ASSERT_EQ(MockResourceLoader::Status::CANCELED, |
| 900 mock_loader_->OnReadCompleted( | 857 mock_loader_->OnReadCompleted( |
| 901 std::string(mock_loader_->io_buffer_size(), 'w'))); | 858 std::string(mock_loader_->io_buffer_size(), 'w'))); |
| 902 } | 859 } |
| 903 | 860 |
| 904 TEST_F(MojoAsyncResourceHandlerTest, | |
| 905 EndWriteFailsOnReadCompletedWithInsufficientInitialCapacity) { | |
| 906 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); | |
| 907 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | |
| 908 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); | |
| 909 | |
| 910 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); | |
| 911 ASSERT_EQ(MockResourceLoader::Status::CANCELED, | |
| 912 mock_loader_->OnReadCompleted( | |
| 913 std::string(mock_loader_->io_buffer_size(), 'w'))); | |
| 914 } | |
| 915 | |
| 916 TEST_F(MojoAsyncResourceHandlerTest, | |
| 917 EndWriteFailsOnResumeWithInsufficientInitialCapacity) { | |
| 918 MojoAsyncResourceHandler::SetAllocationSizeForTesting(8); | |
| 919 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | |
| 920 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); | |
| 921 | |
| 922 while (true) { | |
| 923 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( | |
| 924 std::string(mock_loader_->io_buffer_size(), 'A')); | |
| 925 if (result == MockResourceLoader::Status::CALLBACK_PENDING) | |
| 926 break; | |
| 927 ASSERT_EQ(MockResourceLoader::Status::IDLE, result); | |
| 928 | |
| 929 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); | |
| 930 } | |
| 931 | |
| 932 url_loader_client_.RunUntilResponseBodyArrived(); | |
| 933 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | |
| 934 | |
| 935 while (true) { | |
| 936 char buf[16]; | |
| 937 uint32_t read_size = sizeof(buf); | |
| 938 MojoResult result = | |
| 939 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | |
| 940 MOJO_READ_DATA_FLAG_NONE); | |
| 941 if (result == MOJO_RESULT_SHOULD_WAIT) | |
| 942 break; | |
| 943 ASSERT_EQ(MOJO_RESULT_OK, result); | |
| 944 } | |
| 945 | |
| 946 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); | |
| 947 mock_loader_->WaitUntilIdleOrCanceled(); | |
| 948 EXPECT_FALSE(url_loader_client_.has_received_completion()); | |
| 949 EXPECT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->status()); | |
| 950 EXPECT_EQ(net::ERR_INSUFFICIENT_RESOURCES, mock_loader_->error_code()); | |
| 951 } | |
| 952 | |
| 953 TEST_F(MojoAsyncResourceHandlerUploadTest, UploadProgressHandling) { | 861 TEST_F(MojoAsyncResourceHandlerUploadTest, UploadProgressHandling) { |
| 954 ASSERT_TRUE(CallOnWillStart()); | 862 ASSERT_TRUE(CallOnWillStart()); |
| 955 | 863 |
| 956 // Expect no report for no progress. | 864 // Expect no report for no progress. |
| 957 set_upload_progress(net::UploadProgress(0, 1000)); | 865 set_upload_progress(net::UploadProgress(0, 1000)); |
| 958 handler_->PollUploadProgress(); | 866 handler_->PollUploadProgress(); |
| 959 EXPECT_FALSE(url_loader_client_.has_received_upload_progress()); | 867 EXPECT_FALSE(url_loader_client_.has_received_upload_progress()); |
| 960 EXPECT_EQ(0, url_loader_client_.current_upload_position()); | 868 EXPECT_EQ(0, url_loader_client_.current_upload_position()); |
| 961 EXPECT_EQ(0, url_loader_client_.total_upload_size()); | 869 EXPECT_EQ(0, url_loader_client_.total_upload_size()); |
| 962 | 870 |
| (...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1354 } | 1262 } |
| 1355 } | 1263 } |
| 1356 EXPECT_EQ("B", body); | 1264 EXPECT_EQ("B", body); |
| 1357 } | 1265 } |
| 1358 | 1266 |
| 1359 INSTANTIATE_TEST_CASE_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 1267 INSTANTIATE_TEST_CASE_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1360 MojoAsyncResourceHandlerWithAllocationSizeTest, | 1268 MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1361 ::testing::Values(8, 32 * 2014)); | 1269 ::testing::Values(8, 32 * 2014)); |
| 1362 } // namespace | 1270 } // namespace |
| 1363 } // namespace content | 1271 } // namespace content |
| OLD | NEW |