Chromium Code Reviews| 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) { | |
|
mmenke
2017/01/18 16:26:12
Why did you remove this test?
yhirano
2017/01/19 03:25:50
This test doesn't have an OnReadCompleted call. Wi
| |
| 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 |