| 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 | 10 |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 int num_on_response_started_calls_expectation_ = 0; | 171 int num_on_response_started_calls_expectation_ = 0; |
| 172 | 172 |
| 173 DISALLOW_COPY_AND_ASSIGN(TestResourceDispatcherHostDelegate); | 173 DISALLOW_COPY_AND_ASSIGN(TestResourceDispatcherHostDelegate); |
| 174 }; | 174 }; |
| 175 | 175 |
| 176 class TestResourceController : public ResourceController { | 176 class TestResourceController : public ResourceController { |
| 177 public: | 177 public: |
| 178 TestResourceController() {} | 178 TestResourceController() {} |
| 179 ~TestResourceController() override {} | 179 ~TestResourceController() override {} |
| 180 | 180 |
| 181 void Cancel() override { ADD_FAILURE() << "Cancel should not be called."; } | 181 void Cancel() override { CancelWithError(net::ERR_ABORTED); } |
| 182 | 182 |
| 183 void CancelAndIgnore() override { | 183 void CancelAndIgnore() override { |
| 184 ADD_FAILURE() << "CancelAndIgnore should not be called."; | 184 ADD_FAILURE() << "CancelAndIgnore should not be called."; |
| 185 } | 185 } |
| 186 | 186 |
| 187 void CancelWithError(int error_code) override { | 187 void CancelWithError(int error_code) override { |
| 188 // While cancelling more than once is legal, none of these tests should do | 188 // While cancelling more than once is legal, none of these tests should do |
| 189 // it. | 189 // it. |
| 190 EXPECT_FALSE(is_cancel_with_error_called_); | 190 EXPECT_FALSE(is_cancel_with_error_called_); |
| 191 | 191 |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 | 364 |
| 365 virtual ~MojoAsyncResourceHandlerTestBase() { | 365 virtual ~MojoAsyncResourceHandlerTestBase() { |
| 366 net::URLRequestFilter::GetInstance()->ClearHandlers(); | 366 net::URLRequestFilter::GetInstance()->ClearHandlers(); |
| 367 MojoAsyncResourceHandler::SetAllocationSizeForTesting( | 367 MojoAsyncResourceHandler::SetAllocationSizeForTesting( |
| 368 MojoAsyncResourceHandler::kDefaultAllocationSize); | 368 MojoAsyncResourceHandler::kDefaultAllocationSize); |
| 369 base::RunLoop().RunUntilIdle(); | 369 base::RunLoop().RunUntilIdle(); |
| 370 } | 370 } |
| 371 | 371 |
| 372 // Returns false if something bad happens. | 372 // Returns false if something bad happens. |
| 373 bool CallOnWillStart() { | 373 bool CallOnWillStart() { |
| 374 bool defer = false; | 374 bool defer_or_cancel = false; |
| 375 if (!handler_->OnWillStart(request_->url(), &defer)) { | 375 handler_->OnWillStart(request_->url(), &defer_or_cancel); |
| 376 ADD_FAILURE() << "OnWillStart returns false."; | 376 if (resource_controller_.is_cancel_with_error_called()) { |
| 377 ADD_FAILURE() << "OnWillStart canceled the request."; |
| 377 return false; | 378 return false; |
| 378 } | 379 } |
| 379 if (defer) { | 380 if (defer_or_cancel) { |
| 380 ADD_FAILURE() << "OnWillStart sets |defer| true."; | 381 ADD_FAILURE() << "OnResponseStarted set |defer_or_cancel| to true."; |
| 381 return false; | 382 return false; |
| 382 } | 383 } |
| 383 return true; | 384 return true; |
| 384 } | 385 } |
| 385 | 386 |
| 386 // Returns false if something bad happens. | 387 // Returns false if something bad happens. |
| 387 bool CallOnWillStartAndOnResponseStarted() { | 388 bool CallOnWillStartAndOnResponseStarted() { |
| 388 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 389 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
| 389 if (!CallOnWillStart()) | 390 if (!CallOnWillStart()) |
| 390 return false; | 391 return false; |
| 391 | 392 |
| 392 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 393 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
| 393 bool defer = false; | 394 bool defer_or_cancel = false; |
| 394 if (!handler_->OnResponseStarted(response.get(), &defer)) { | 395 handler_->OnResponseStarted(response.get(), &defer_or_cancel); |
| 395 ADD_FAILURE() << "OnResponseStarted returns false."; | 396 if (resource_controller_.is_cancel_with_error_called()) { |
| 397 ADD_FAILURE() << "OnResponseStarted canceled the request."; |
| 396 return false; | 398 return false; |
| 397 } | 399 } |
| 398 if (defer) { | 400 if (defer_or_cancel) { |
| 399 ADD_FAILURE() << "OnResponseStarted sets |defer| true."; | 401 ADD_FAILURE() << "OnResponseStarted set |defer_or_cancel| to true."; |
| 400 return false; | 402 return false; |
| 401 } | 403 } |
| 402 if (url_loader_client_.has_received_response()) { | 404 if (url_loader_client_.has_received_response()) { |
| 403 ADD_FAILURE() << "URLLoaderClient unexpectedly gets a response."; | 405 ADD_FAILURE() << "URLLoaderClient unexpectedly received a response."; |
| 404 return false; | 406 return false; |
| 405 } | 407 } |
| 406 url_loader_client_.RunUntilResponseReceived(); | 408 url_loader_client_.RunUntilResponseReceived(); |
| 407 return true; | 409 return true; |
| 408 } | 410 } |
| 409 | 411 |
| 410 TestBrowserThreadBundle thread_bundle_; | 412 TestBrowserThreadBundle thread_bundle_; |
| 411 TestResourceDispatcherHostDelegate rdh_delegate_; | 413 TestResourceDispatcherHostDelegate rdh_delegate_; |
| 412 ResourceDispatcherHostImpl rdh_; | 414 ResourceDispatcherHostImpl rdh_; |
| 413 mojom::URLLoaderFactoryPtr url_loader_factory_; | 415 mojom::URLLoaderFactoryPtr url_loader_factory_; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 437 } | 439 } |
| 438 }; | 440 }; |
| 439 | 441 |
| 440 TEST_F(MojoAsyncResourceHandlerTest, InFlightRequests) { | 442 TEST_F(MojoAsyncResourceHandlerTest, InFlightRequests) { |
| 441 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 443 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
| 442 handler_ = nullptr; | 444 handler_ = nullptr; |
| 443 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 445 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
| 444 } | 446 } |
| 445 | 447 |
| 446 TEST_F(MojoAsyncResourceHandlerTest, OnWillStart) { | 448 TEST_F(MojoAsyncResourceHandlerTest, OnWillStart) { |
| 447 bool defer = false; | 449 bool defer_or_cancel = false; |
| 448 EXPECT_TRUE(handler_->OnWillStart(request_->url(), &defer)); | 450 handler_->OnWillStart(request_->url(), &defer_or_cancel); |
| 449 EXPECT_FALSE(defer); | 451 EXPECT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 452 EXPECT_FALSE(defer_or_cancel); |
| 450 } | 453 } |
| 451 | 454 |
| 452 TEST_F(MojoAsyncResourceHandlerTest, OnResponseStarted) { | 455 TEST_F(MojoAsyncResourceHandlerTest, OnResponseStarted) { |
| 453 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 456 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
| 454 ASSERT_TRUE(CallOnWillStart()); | 457 ASSERT_TRUE(CallOnWillStart()); |
| 455 | 458 |
| 456 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 459 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
| 457 response->head.content_length = 99; | 460 response->head.content_length = 99; |
| 458 response->head.request_start = | 461 response->head.request_start = |
| 459 base::TimeTicks::UnixEpoch() + base::TimeDelta::FromDays(14); | 462 base::TimeTicks::UnixEpoch() + base::TimeDelta::FromDays(14); |
| 460 response->head.response_start = | 463 response->head.response_start = |
| 461 base::TimeTicks::UnixEpoch() + base::TimeDelta::FromDays(28); | 464 base::TimeTicks::UnixEpoch() + base::TimeDelta::FromDays(28); |
| 462 | 465 |
| 463 bool defer = false; | 466 bool defer_or_cancel = false; |
| 464 | 467 |
| 465 EXPECT_EQ(0, rdh_delegate_.num_on_response_started_calls()); | 468 EXPECT_EQ(0, rdh_delegate_.num_on_response_started_calls()); |
| 466 base::TimeTicks now1 = base::TimeTicks::Now(); | 469 base::TimeTicks now1 = base::TimeTicks::Now(); |
| 467 ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer)); | 470 handler_->OnResponseStarted(response.get(), &defer_or_cancel); |
| 468 base::TimeTicks now2 = base::TimeTicks::Now(); | 471 base::TimeTicks now2 = base::TimeTicks::Now(); |
| 469 | 472 |
| 470 EXPECT_FALSE(defer); | 473 EXPECT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 474 EXPECT_FALSE(defer_or_cancel); |
| 471 EXPECT_EQ(request_->creation_time(), response->head.request_start); | 475 EXPECT_EQ(request_->creation_time(), response->head.request_start); |
| 472 EXPECT_LE(now1, response->head.response_start); | 476 EXPECT_LE(now1, response->head.response_start); |
| 473 EXPECT_LE(response->head.response_start, now2); | 477 EXPECT_LE(response->head.response_start, now2); |
| 474 EXPECT_EQ(1, rdh_delegate_.num_on_response_started_calls()); | 478 EXPECT_EQ(1, rdh_delegate_.num_on_response_started_calls()); |
| 475 | 479 |
| 476 url_loader_client_.RunUntilResponseReceived(); | 480 url_loader_client_.RunUntilResponseReceived(); |
| 477 EXPECT_EQ(response->head.request_start, | 481 EXPECT_EQ(response->head.request_start, |
| 478 url_loader_client_.response_head().request_start); | 482 url_loader_client_.response_head().request_start); |
| 479 EXPECT_EQ(response->head.response_start, | 483 EXPECT_EQ(response->head.response_start, |
| 480 url_loader_client_.response_head().response_start); | 484 url_loader_client_.response_head().response_start); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 502 EXPECT_FALSE(io_buffer); | 506 EXPECT_FALSE(io_buffer); |
| 503 EXPECT_EQ(0, io_buffer_size); | 507 EXPECT_EQ(0, io_buffer_size); |
| 504 EXPECT_EQ(1, rdh_.num_in_flight_requests_for_testing()); | 508 EXPECT_EQ(1, rdh_.num_in_flight_requests_for_testing()); |
| 505 EXPECT_TRUE(resource_controller_.is_cancel_with_error_called()); | 509 EXPECT_TRUE(resource_controller_.is_cancel_with_error_called()); |
| 506 EXPECT_EQ(net::ERR_INSUFFICIENT_RESOURCES, resource_controller_.error()); | 510 EXPECT_EQ(net::ERR_INSUFFICIENT_RESOURCES, resource_controller_.error()); |
| 507 handler_ = nullptr; | 511 handler_ = nullptr; |
| 508 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 512 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
| 509 } | 513 } |
| 510 | 514 |
| 511 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndOnReadCompleted) { | 515 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndOnReadCompleted) { |
| 512 bool defer = false; | 516 bool defer_or_cancel = false; |
| 513 scoped_refptr<net::IOBuffer> io_buffer; | 517 scoped_refptr<net::IOBuffer> io_buffer; |
| 514 int io_buffer_size = 0; | 518 int io_buffer_size = 0; |
| 515 | 519 |
| 516 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 520 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 517 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 521 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 518 ASSERT_TRUE(io_buffer); | 522 ASSERT_TRUE(io_buffer); |
| 519 // The buffer size that the mime sniffer requires implicitly. | 523 // The buffer size that the mime sniffer requires implicitly. |
| 520 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); | 524 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); |
| 521 | 525 |
| 522 url_loader_client_.RunUntilResponseBodyArrived(); | 526 url_loader_client_.RunUntilResponseBodyArrived(); |
| 523 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 527 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 524 | 528 |
| 525 io_buffer->data()[0] = 'A'; | 529 io_buffer->data()[0] = 'A'; |
| 526 io_buffer->data()[1] = 'B'; | 530 io_buffer->data()[1] = 'B'; |
| 527 ASSERT_TRUE(handler_->OnReadCompleted(2, &defer)); | 531 handler_->OnReadCompleted(2, &defer_or_cancel); |
| 528 EXPECT_FALSE(defer); | 532 EXPECT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 533 EXPECT_FALSE(defer_or_cancel); |
| 529 | 534 |
| 530 std::string contents; | 535 std::string contents; |
| 531 while (contents.size() < 2) { | 536 while (contents.size() < 2) { |
| 532 char buffer[16]; | 537 char buffer[16]; |
| 533 uint32_t read_size = sizeof(buffer); | 538 uint32_t read_size = sizeof(buffer); |
| 534 MojoResult result = | 539 MojoResult result = |
| 535 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, | 540 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, |
| 536 &read_size, MOJO_READ_DATA_FLAG_NONE); | 541 &read_size, MOJO_READ_DATA_FLAG_NONE); |
| 537 if (result == MOJO_RESULT_SHOULD_WAIT) { | 542 if (result == MOJO_RESULT_SHOULD_WAIT) { |
| 538 base::RunLoop().RunUntilIdle(); | 543 base::RunLoop().RunUntilIdle(); |
| 539 continue; | 544 continue; |
| 540 } | 545 } |
| 541 contents.append(buffer, read_size); | 546 contents.append(buffer, read_size); |
| 542 } | 547 } |
| 543 EXPECT_EQ("AB", contents); | 548 EXPECT_EQ("AB", contents); |
| 544 } | 549 } |
| 545 | 550 |
| 546 TEST_F(MojoAsyncResourceHandlerTest, | 551 TEST_F(MojoAsyncResourceHandlerTest, |
| 547 OnWillReadAndOnReadCompletedWithInsufficientInitialCapacity) { | 552 OnWillReadAndOnReadCompletedWithInsufficientInitialCapacity) { |
| 548 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); | 553 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); |
| 549 | 554 |
| 550 bool defer = false; | 555 bool defer_or_cancel = false; |
| 551 scoped_refptr<net::IOBuffer> io_buffer; | 556 scoped_refptr<net::IOBuffer> io_buffer; |
| 552 int io_buffer_size = 0; | 557 int io_buffer_size = 0; |
| 553 | 558 |
| 554 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 559 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 555 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 560 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 556 ASSERT_TRUE(io_buffer); | 561 ASSERT_TRUE(io_buffer); |
| 557 // The buffer size that the mime sniffer requires implicitly. | 562 // The buffer size that the mime sniffer requires implicitly. |
| 558 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); | 563 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); |
| 559 | 564 |
| 560 url_loader_client_.RunUntilResponseBodyArrived(); | 565 url_loader_client_.RunUntilResponseBodyArrived(); |
| 561 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 566 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 562 | 567 |
| 563 const std::string data("abcdefgh"); | 568 const std::string data("abcdefgh"); |
| 564 strcpy(io_buffer->data(), data.c_str()); | 569 strcpy(io_buffer->data(), data.c_str()); |
| 565 ASSERT_TRUE(handler_->OnReadCompleted(data.size(), &defer)); | 570 handler_->OnReadCompleted(data.size(), &defer_or_cancel); |
| 566 EXPECT_TRUE(defer); | 571 EXPECT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 572 EXPECT_TRUE(defer_or_cancel); |
| 567 | 573 |
| 568 std::string contents; | 574 std::string contents; |
| 569 while (contents.size() < data.size()) { | 575 while (contents.size() < data.size()) { |
| 570 // This is needed for Resume to be called. | 576 // This is needed for Resume to be called. |
| 571 base::RunLoop().RunUntilIdle(); | 577 base::RunLoop().RunUntilIdle(); |
| 572 char buffer[16]; | 578 char buffer[16]; |
| 573 uint32_t read_size = sizeof(buffer); | 579 uint32_t read_size = sizeof(buffer); |
| 574 MojoResult result = | 580 MojoResult result = |
| 575 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, | 581 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, |
| 576 &read_size, MOJO_READ_DATA_FLAG_NONE); | 582 &read_size, MOJO_READ_DATA_FLAG_NONE); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 596 | 602 |
| 597 handler_ = nullptr; | 603 handler_ = nullptr; |
| 598 url_loader_client_.Unbind(); | 604 url_loader_client_.Unbind(); |
| 599 base::RunLoop().RunUntilIdle(); | 605 base::RunLoop().RunUntilIdle(); |
| 600 | 606 |
| 601 // Hopefully ASAN checks this operation's validity. | 607 // Hopefully ASAN checks this operation's validity. |
| 602 io_buffer->data()[0] = 'A'; | 608 io_buffer->data()[0] = 'A'; |
| 603 } | 609 } |
| 604 | 610 |
| 605 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted) { | 611 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted) { |
| 606 bool defer = false; | 612 bool defer_or_cancel = false; |
| 607 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 613 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 608 | 614 |
| 609 ResourceRequestInfoImpl::ForRequest(request_.get()) | 615 ResourceRequestInfoImpl::ForRequest(request_.get()) |
| 610 ->set_was_ignored_by_handler(false); | 616 ->set_was_ignored_by_handler(false); |
| 611 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 617 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
| 612 | 618 |
| 613 base::TimeTicks now1 = base::TimeTicks::Now(); | 619 base::TimeTicks now1 = base::TimeTicks::Now(); |
| 614 handler_->OnResponseCompleted(status, &defer); | 620 handler_->OnResponseCompleted(status, &defer_or_cancel); |
| 615 base::TimeTicks now2 = base::TimeTicks::Now(); | 621 base::TimeTicks now2 = base::TimeTicks::Now(); |
| 616 EXPECT_FALSE(defer); | 622 EXPECT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 623 EXPECT_FALSE(defer_or_cancel); |
| 617 | 624 |
| 618 url_loader_client_.RunUntilComplete(); | 625 url_loader_client_.RunUntilComplete(); |
| 619 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 626 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 620 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 627 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
| 621 EXPECT_FALSE(url_loader_client_.completion_status().was_ignored_by_handler); | 628 EXPECT_FALSE(url_loader_client_.completion_status().was_ignored_by_handler); |
| 622 EXPECT_LE(now1, url_loader_client_.completion_status().completion_time); | 629 EXPECT_LE(now1, url_loader_client_.completion_status().completion_time); |
| 623 EXPECT_LE(url_loader_client_.completion_status().completion_time, now2); | 630 EXPECT_LE(url_loader_client_.completion_status().completion_time, now2); |
| 624 EXPECT_EQ(request_->GetTotalReceivedBytes(), | 631 EXPECT_EQ(request_->GetTotalReceivedBytes(), |
| 625 url_loader_client_.completion_status().encoded_data_length); | 632 url_loader_client_.completion_status().encoded_data_length); |
| 626 } | 633 } |
| 627 | 634 |
| 628 // This test case sets different status values from OnResponseCompleted. | 635 // This test case sets different status values from OnResponseCompleted. |
| 629 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted2) { | 636 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted2) { |
| 630 rdh_.SetDelegate(nullptr); | 637 rdh_.SetDelegate(nullptr); |
| 631 bool defer = false; | 638 bool defer_or_cancel = false; |
| 632 // Don't use CallOnWillStartAndOnResponseStarted as this test case manually | 639 // Don't use CallOnWillStartAndOnResponseStarted as this test case manually |
| 633 // sets the null delegate. | 640 // sets the null delegate. |
| 634 ASSERT_TRUE(CallOnWillStart()); | 641 ASSERT_TRUE(CallOnWillStart()); |
| 635 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 642 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
| 636 ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer)); | 643 handler_->OnResponseStarted(response.get(), &defer_or_cancel); |
| 637 ASSERT_FALSE(defer); | 644 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 645 ASSERT_FALSE(defer_or_cancel); |
| 638 ASSERT_FALSE(url_loader_client_.has_received_response()); | 646 ASSERT_FALSE(url_loader_client_.has_received_response()); |
| 639 url_loader_client_.RunUntilResponseReceived(); | 647 url_loader_client_.RunUntilResponseReceived(); |
| 640 | 648 |
| 641 ResourceRequestInfoImpl::ForRequest(request_.get()) | 649 ResourceRequestInfoImpl::ForRequest(request_.get()) |
| 642 ->set_was_ignored_by_handler(true); | 650 ->set_was_ignored_by_handler(true); |
| 643 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, | 651 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, |
| 644 net::ERR_ABORTED); | 652 net::ERR_ABORTED); |
| 645 | 653 |
| 646 base::TimeTicks now1 = base::TimeTicks::Now(); | 654 base::TimeTicks now1 = base::TimeTicks::Now(); |
| 647 handler_->OnResponseCompleted(status, &defer); | 655 handler_->OnResponseCompleted(status, &defer_or_cancel); |
| 648 base::TimeTicks now2 = base::TimeTicks::Now(); | 656 base::TimeTicks now2 = base::TimeTicks::Now(); |
| 649 EXPECT_FALSE(defer); | 657 EXPECT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 658 EXPECT_FALSE(defer_or_cancel); |
| 650 | 659 |
| 651 url_loader_client_.RunUntilComplete(); | 660 url_loader_client_.RunUntilComplete(); |
| 652 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 661 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 653 EXPECT_EQ(net::ERR_ABORTED, | 662 EXPECT_EQ(net::ERR_ABORTED, |
| 654 url_loader_client_.completion_status().error_code); | 663 url_loader_client_.completion_status().error_code); |
| 655 EXPECT_TRUE(url_loader_client_.completion_status().was_ignored_by_handler); | 664 EXPECT_TRUE(url_loader_client_.completion_status().was_ignored_by_handler); |
| 656 EXPECT_LE(now1, url_loader_client_.completion_status().completion_time); | 665 EXPECT_LE(now1, url_loader_client_.completion_status().completion_time); |
| 657 EXPECT_LE(url_loader_client_.completion_status().completion_time, now2); | 666 EXPECT_LE(url_loader_client_.completion_status().completion_time, now2); |
| 658 EXPECT_EQ(request_->GetTotalReceivedBytes(), | 667 EXPECT_EQ(request_->GetTotalReceivedBytes(), |
| 659 url_loader_client_.completion_status().encoded_data_length); | 668 url_loader_client_.completion_status().encoded_data_length); |
| 660 } | 669 } |
| 661 | 670 |
| 662 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithCanceledTimedOut) { | 671 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithCanceledTimedOut) { |
| 663 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, | 672 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, |
| 664 net::ERR_TIMED_OUT); | 673 net::ERR_TIMED_OUT); |
| 665 bool defer = false; | 674 bool defer_or_cancel = false; |
| 666 | 675 |
| 667 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 676 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 668 handler_->OnResponseCompleted(status, &defer); | 677 handler_->OnResponseCompleted(status, &defer_or_cancel); |
| 669 EXPECT_FALSE(defer); | 678 EXPECT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 679 EXPECT_FALSE(defer_or_cancel); |
| 670 | 680 |
| 671 url_loader_client_.RunUntilComplete(); | 681 url_loader_client_.RunUntilComplete(); |
| 672 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 682 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 673 EXPECT_EQ(net::ERR_TIMED_OUT, | 683 EXPECT_EQ(net::ERR_TIMED_OUT, |
| 674 url_loader_client_.completion_status().error_code); | 684 url_loader_client_.completion_status().error_code); |
| 675 } | 685 } |
| 676 | 686 |
| 677 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithFailedTimedOut) { | 687 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithFailedTimedOut) { |
| 678 net::URLRequestStatus status(net::URLRequestStatus::FAILED, | 688 net::URLRequestStatus status(net::URLRequestStatus::FAILED, |
| 679 net::ERR_TIMED_OUT); | 689 net::ERR_TIMED_OUT); |
| 680 bool defer = false; | 690 bool defer_or_cancel = false; |
| 681 | 691 |
| 682 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 692 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 683 handler_->OnResponseCompleted(status, &defer); | 693 handler_->OnResponseCompleted(status, &defer_or_cancel); |
| 684 EXPECT_FALSE(defer); | 694 EXPECT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 695 EXPECT_FALSE(defer_or_cancel); |
| 685 | 696 |
| 686 url_loader_client_.RunUntilComplete(); | 697 url_loader_client_.RunUntilComplete(); |
| 687 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 698 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 688 EXPECT_EQ(net::ERR_TIMED_OUT, | 699 EXPECT_EQ(net::ERR_TIMED_OUT, |
| 689 url_loader_client_.completion_status().error_code); | 700 url_loader_client_.completion_status().error_code); |
| 690 } | 701 } |
| 691 | 702 |
| 692 TEST_F(MojoAsyncResourceHandlerTest, ResponseCompletionShouldCloseDataPipe) { | 703 TEST_F(MojoAsyncResourceHandlerTest, ResponseCompletionShouldCloseDataPipe) { |
| 693 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 704 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 694 | 705 |
| 695 scoped_refptr<net::IOBuffer> io_buffer; | 706 scoped_refptr<net::IOBuffer> io_buffer; |
| 696 int io_buffer_size = 0; | 707 int io_buffer_size = 0; |
| 697 bool defer = false; | 708 bool defer_or_cancel = false; |
| 698 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 709 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 699 url_loader_client_.RunUntilResponseBodyArrived(); | 710 url_loader_client_.RunUntilResponseBodyArrived(); |
| 700 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 711 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 701 ASSERT_TRUE(handler_->OnReadCompleted(0, &defer)); | 712 handler_->OnReadCompleted(0, &defer_or_cancel); |
| 702 EXPECT_FALSE(defer); | 713 EXPECT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 714 EXPECT_FALSE(defer_or_cancel); |
| 703 | 715 |
| 704 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 716 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
| 705 handler_->OnResponseCompleted(status, &defer); | 717 handler_->OnResponseCompleted(status, &defer_or_cancel); |
| 706 EXPECT_FALSE(defer); | 718 EXPECT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 719 EXPECT_FALSE(defer_or_cancel); |
| 707 | 720 |
| 708 url_loader_client_.RunUntilComplete(); | 721 url_loader_client_.RunUntilComplete(); |
| 709 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 722 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 710 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 723 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
| 711 | 724 |
| 712 // This is needed because |*io_buffer| may keep the data producer alive. | 725 // This is needed because |*io_buffer| may keep the data producer alive. |
| 713 io_buffer = nullptr; | 726 io_buffer = nullptr; |
| 714 | 727 |
| 715 while (true) { | 728 while (true) { |
| 716 char buffer[16]; | 729 char buffer[16]; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 727 TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission) { | 740 TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission) { |
| 728 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 741 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 729 | 742 |
| 730 scoped_refptr<net::IOBuffer> io_buffer; | 743 scoped_refptr<net::IOBuffer> io_buffer; |
| 731 int io_buffer_size = 0; | 744 int io_buffer_size = 0; |
| 732 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 745 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 733 url_loader_client_.RunUntilResponseBodyArrived(); | 746 url_loader_client_.RunUntilResponseBodyArrived(); |
| 734 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 747 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 735 ASSERT_GT(io_buffer_size, 0); | 748 ASSERT_GT(io_buffer_size, 0); |
| 736 memset(io_buffer->data(), 'a', io_buffer_size); | 749 memset(io_buffer->data(), 'a', io_buffer_size); |
| 737 bool defer = false; | 750 bool defer_or_cancel = false; |
| 738 ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 751 handler_->OnReadCompleted(io_buffer_size, &defer_or_cancel); |
| 739 // We don't care |defer|'s value here. | 752 EXPECT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 740 | 753 |
| 741 defer = false; | 754 // Don't care about |defer_or_cancel|'s value here. |
| 755 defer_or_cancel = false; |
| 742 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); | 756 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); |
| 743 handler_->OnResponseCompleted(status, &defer); | 757 handler_->OnResponseCompleted(status, &defer_or_cancel); |
| 744 EXPECT_FALSE(defer); | 758 EXPECT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 759 EXPECT_FALSE(defer_or_cancel); |
| 745 | 760 |
| 746 url_loader_client_.RunUntilComplete(); | 761 url_loader_client_.RunUntilComplete(); |
| 747 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 762 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 748 EXPECT_EQ(net::ERR_FAILED, url_loader_client_.completion_status().error_code); | 763 EXPECT_EQ(net::ERR_FAILED, url_loader_client_.completion_status().error_code); |
| 749 | 764 |
| 750 // This is needed because |*io_buffer| may keep the data producer alive. | 765 // This is needed because |*io_buffer| may keep the data producer alive. |
| 751 io_buffer = nullptr; | 766 io_buffer = nullptr; |
| 752 | 767 |
| 753 std::string actual; | 768 std::string actual; |
| 754 while (true) { | 769 while (true) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 771 | 786 |
| 772 // In this case, an error is notified after OnWillRead, before OnReadCompleted. | 787 // In this case, an error is notified after OnWillRead, before OnReadCompleted. |
| 773 TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission2) { | 788 TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission2) { |
| 774 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 789 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 775 | 790 |
| 776 scoped_refptr<net::IOBuffer> io_buffer; | 791 scoped_refptr<net::IOBuffer> io_buffer; |
| 777 int io_buffer_size = 0; | 792 int io_buffer_size = 0; |
| 778 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 793 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 779 url_loader_client_.RunUntilResponseBodyArrived(); | 794 url_loader_client_.RunUntilResponseBodyArrived(); |
| 780 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 795 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 781 bool defer = false; | 796 bool defer_or_cancel = false; |
| 782 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); | 797 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); |
| 783 handler_->OnResponseCompleted(status, &defer); | 798 handler_->OnResponseCompleted(status, &defer_or_cancel); |
| 784 EXPECT_FALSE(defer); | 799 EXPECT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 800 EXPECT_FALSE(defer_or_cancel); |
| 785 | 801 |
| 786 url_loader_client_.RunUntilComplete(); | 802 url_loader_client_.RunUntilComplete(); |
| 787 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 803 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 788 EXPECT_EQ(net::ERR_FAILED, url_loader_client_.completion_status().error_code); | 804 EXPECT_EQ(net::ERR_FAILED, url_loader_client_.completion_status().error_code); |
| 789 | 805 |
| 790 // This is needed because |*io_buffer| may keep the data producer alive. | 806 // This is needed because |*io_buffer| may keep the data producer alive. |
| 791 io_buffer = nullptr; | 807 io_buffer = nullptr; |
| 792 | 808 |
| 793 while (true) { | 809 while (true) { |
| 794 char buf[16]; | 810 char buf[16]; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 828 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 844 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 829 size_t written = 0; | 845 size_t written = 0; |
| 830 while (true) { | 846 while (true) { |
| 831 scoped_refptr<net::IOBuffer> io_buffer; | 847 scoped_refptr<net::IOBuffer> io_buffer; |
| 832 int io_buffer_size = 0; | 848 int io_buffer_size = 0; |
| 833 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 849 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 834 EXPECT_TRUE(io_buffer); | 850 EXPECT_TRUE(io_buffer); |
| 835 EXPECT_GT(io_buffer_size, 0); | 851 EXPECT_GT(io_buffer_size, 0); |
| 836 memset(io_buffer->data(), 'X', io_buffer_size); | 852 memset(io_buffer->data(), 'X', io_buffer_size); |
| 837 written += io_buffer_size; | 853 written += io_buffer_size; |
| 838 bool defer = false; | 854 bool defer_or_cancel = false; |
| 839 ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 855 handler_->OnReadCompleted(io_buffer_size, &defer_or_cancel); |
| 840 if (defer) | 856 EXPECT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 857 if (defer_or_cancel) |
| 841 break; | 858 break; |
| 842 } | 859 } |
| 843 | 860 |
| 844 url_loader_client_.RunUntilResponseBodyArrived(); | 861 url_loader_client_.RunUntilResponseBodyArrived(); |
| 845 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 862 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 846 handler_->ResetBeginWriteExpectation(); | 863 handler_->ResetBeginWriteExpectation(); |
| 847 handler_->OnWritableForTesting(); | 864 handler_->OnWritableForTesting(); |
| 848 | 865 |
| 849 std::string actual; | 866 std::string actual; |
| 850 while (actual.size() < written) { | 867 while (actual.size() < written) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 869 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 886 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 870 handler_->set_end_write_expectation(MOJO_RESULT_UNKNOWN); | 887 handler_->set_end_write_expectation(MOJO_RESULT_UNKNOWN); |
| 871 scoped_refptr<net::IOBuffer> io_buffer; | 888 scoped_refptr<net::IOBuffer> io_buffer; |
| 872 int io_buffer_size = 0; | 889 int io_buffer_size = 0; |
| 873 ASSERT_FALSE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 890 ASSERT_FALSE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 874 } | 891 } |
| 875 | 892 |
| 876 TEST_F(MojoAsyncResourceHandlerTest, EndWriteFailsOnReadCompleted) { | 893 TEST_F(MojoAsyncResourceHandlerTest, EndWriteFailsOnReadCompleted) { |
| 877 scoped_refptr<net::IOBuffer> io_buffer; | 894 scoped_refptr<net::IOBuffer> io_buffer; |
| 878 int io_buffer_size = 0; | 895 int io_buffer_size = 0; |
| 879 bool defer = false; | 896 bool defer_or_cancel = false; |
| 880 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 897 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 881 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 898 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 882 | 899 |
| 883 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 900 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
| 884 ASSERT_FALSE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 901 handler_->OnReadCompleted(io_buffer_size, &defer_or_cancel); |
| 902 EXPECT_TRUE(resource_controller_.is_cancel_with_error_called()); |
| 903 EXPECT_EQ(net::ERR_ABORTED, resource_controller_.error()); |
| 904 EXPECT_TRUE(defer_or_cancel); |
| 885 } | 905 } |
| 886 | 906 |
| 887 TEST_F(MojoAsyncResourceHandlerTest, | 907 TEST_F(MojoAsyncResourceHandlerTest, |
| 888 EndWriteFailsOnReadCompletedWithInsufficientInitialCapacity) { | 908 EndWriteFailsOnReadCompletedWithInsufficientInitialCapacity) { |
| 889 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); | 909 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); |
| 890 scoped_refptr<net::IOBuffer> io_buffer; | 910 scoped_refptr<net::IOBuffer> io_buffer; |
| 891 int io_buffer_size = 0; | 911 int io_buffer_size = 0; |
| 892 bool defer = false; | 912 bool defer_or_cancel = false; |
| 893 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 913 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 894 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 914 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 895 | 915 |
| 896 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 916 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
| 897 ASSERT_FALSE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 917 handler_->OnReadCompleted(io_buffer_size, &defer_or_cancel); |
| 918 EXPECT_TRUE(resource_controller_.is_cancel_with_error_called()); |
| 919 EXPECT_EQ(net::ERR_ABORTED, resource_controller_.error()); |
| 920 EXPECT_TRUE(defer_or_cancel); |
| 898 } | 921 } |
| 899 | 922 |
| 900 TEST_F(MojoAsyncResourceHandlerTest, | 923 TEST_F(MojoAsyncResourceHandlerTest, |
| 901 EndWriteFailsOnResumeWithInsufficientInitialCapacity) { | 924 EndWriteFailsOnResumeWithInsufficientInitialCapacity) { |
| 902 MojoAsyncResourceHandler::SetAllocationSizeForTesting(8); | 925 MojoAsyncResourceHandler::SetAllocationSizeForTesting(8); |
| 903 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 926 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 904 scoped_refptr<net::IOBuffer> io_buffer; | 927 scoped_refptr<net::IOBuffer> io_buffer; |
| 905 int io_buffer_size = 0; | 928 int io_buffer_size = 0; |
| 906 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 929 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 907 url_loader_client_.RunUntilResponseBodyArrived(); | 930 url_loader_client_.RunUntilResponseBodyArrived(); |
| 908 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 931 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 909 | 932 |
| 910 while (true) { | 933 while (true) { |
| 911 bool defer = false; | 934 bool defer_or_cancel = false; |
| 912 ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 935 handler_->OnReadCompleted(io_buffer_size, &defer_or_cancel); |
| 936 EXPECT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 913 ASSERT_GE(io_buffer_size, 0); | 937 ASSERT_GE(io_buffer_size, 0); |
| 914 if (defer) | 938 if (defer_or_cancel) |
| 915 break; | 939 break; |
| 916 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 940 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 917 } | 941 } |
| 918 | 942 |
| 919 while (true) { | 943 while (true) { |
| 920 char buf[16]; | 944 char buf[16]; |
| 921 uint32_t read_size = sizeof(buf); | 945 uint32_t read_size = sizeof(buf); |
| 922 MojoResult result = | 946 MojoResult result = |
| 923 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 947 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
| 924 MOJO_READ_DATA_FLAG_NONE); | 948 MOJO_READ_DATA_FLAG_NONE); |
| 925 if (result == MOJO_RESULT_SHOULD_WAIT) | 949 if (result == MOJO_RESULT_SHOULD_WAIT) |
| 926 break; | 950 break; |
| 927 ASSERT_EQ(MOJO_RESULT_OK, result); | 951 ASSERT_EQ(MOJO_RESULT_OK, result); |
| 928 } | 952 } |
| 929 | 953 |
| 930 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 954 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
| 931 resource_controller_.RunUntilCancelWithErrorCalled(); | 955 resource_controller_.RunUntilCancelWithErrorCalled(); |
| 932 EXPECT_FALSE(url_loader_client_.has_received_completion()); | 956 EXPECT_FALSE(url_loader_client_.has_received_completion()); |
| 933 EXPECT_TRUE(resource_controller_.is_cancel_with_error_called()); | 957 EXPECT_TRUE(resource_controller_.is_cancel_with_error_called()); |
| 934 EXPECT_EQ(net::ERR_FAILED, resource_controller_.error()); | 958 EXPECT_EQ(net::ERR_FAILED, resource_controller_.error()); |
| 935 } | 959 } |
| 936 | 960 |
| 937 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 961 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 938 OnWillReadWithLongContents) { | 962 OnWillReadWithLongContents) { |
| 939 bool defer = false; | 963 bool defer_or_cancel = false; |
| 940 scoped_refptr<net::IOBuffer> io_buffer; | 964 scoped_refptr<net::IOBuffer> io_buffer; |
| 941 int io_buffer_size = 0; | 965 int io_buffer_size = 0; |
| 942 | 966 |
| 943 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 967 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 944 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 968 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 945 ASSERT_TRUE(io_buffer); | 969 ASSERT_TRUE(io_buffer); |
| 946 // The io_buffer size that the mime sniffer requires implicitly. | 970 // The io_buffer size that the mime sniffer requires implicitly. |
| 947 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); | 971 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); |
| 948 std::string expected; | 972 std::string expected; |
| 949 for (int i = 0; i < 3 * io_buffer_size + 2; ++i) | 973 for (int i = 0; i < 3 * io_buffer_size + 2; ++i) |
| 950 expected += ('A' + i % 26); | 974 expected += ('A' + i % 26); |
| 951 | 975 |
| 952 ASSERT_TRUE(handler_->OnReadCompleted(0, &defer)); | 976 handler_->OnReadCompleted(0, &defer_or_cancel); |
| 953 ASSERT_FALSE(defer); | 977 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 978 ASSERT_FALSE(defer_or_cancel); |
| 954 | 979 |
| 955 url_loader_client_.RunUntilResponseBodyArrived(); | 980 url_loader_client_.RunUntilResponseBodyArrived(); |
| 956 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 981 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 957 | 982 |
| 958 size_t written = 0; | 983 size_t written = 0; |
| 959 std::string actual; | 984 std::string actual; |
| 960 while (actual.size() < expected.size()) { | 985 while (actual.size() < expected.size()) { |
| 961 while (written < expected.size() && !defer) { | 986 while (written < expected.size() && !defer_or_cancel) { |
| 962 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 987 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 963 const size_t to_be_written = std::min(static_cast<size_t>(io_buffer_size), | 988 const size_t to_be_written = std::min(static_cast<size_t>(io_buffer_size), |
| 964 expected.size() - written); | 989 expected.size() - written); |
| 965 memcpy(io_buffer->data(), &expected[written], to_be_written); | 990 memcpy(io_buffer->data(), &expected[written], to_be_written); |
| 966 ASSERT_TRUE(handler_->OnReadCompleted(to_be_written, &defer)); | 991 handler_->OnReadCompleted(to_be_written, &defer_or_cancel); |
| 992 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 967 written += to_be_written; | 993 written += to_be_written; |
| 968 } | 994 } |
| 969 | 995 |
| 970 char buf[16]; | 996 char buf[16]; |
| 971 uint32_t read_size = sizeof(buf); | 997 uint32_t read_size = sizeof(buf); |
| 972 MojoResult result = | 998 MojoResult result = |
| 973 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 999 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
| 974 MOJO_READ_DATA_FLAG_NONE); | 1000 MOJO_READ_DATA_FLAG_NONE); |
| 975 if (result != MOJO_RESULT_SHOULD_WAIT) { | 1001 if (result != MOJO_RESULT_SHOULD_WAIT) { |
| 976 ASSERT_EQ(MOJO_RESULT_OK, result); | 1002 ASSERT_EQ(MOJO_RESULT_OK, result); |
| 977 actual.append(buf, read_size); | 1003 actual.append(buf, read_size); |
| 978 } | 1004 } |
| 979 int resume_count = resource_controller_.num_resume_calls(); | 1005 int resume_count = resource_controller_.num_resume_calls(); |
| 980 base::RunLoop().RunUntilIdle(); | 1006 base::RunLoop().RunUntilIdle(); |
| 981 // Continue writing if controller->Resume() is called. | 1007 // Continue writing if controller->Resume() is called. |
| 982 defer = (resume_count == resource_controller_.num_resume_calls()); | 1008 defer_or_cancel = (resume_count == resource_controller_.num_resume_calls()); |
| 983 } | 1009 } |
| 984 EXPECT_EQ(expected, actual); | 1010 EXPECT_EQ(expected, actual); |
| 985 } | 1011 } |
| 986 | 1012 |
| 987 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 1013 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 988 BeginWriteFailsOnReadCompleted) { | 1014 BeginWriteFailsOnReadCompleted) { |
| 989 scoped_refptr<net::IOBuffer> io_buffer; | 1015 scoped_refptr<net::IOBuffer> io_buffer; |
| 990 int io_buffer_size = 0; | 1016 int io_buffer_size = 0; |
| 991 bool defer = false; | 1017 bool defer_or_cancel = false; |
| 992 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 1018 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 993 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 1019 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 994 | 1020 |
| 995 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); | 1021 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); |
| 996 ASSERT_FALSE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 1022 handler_->OnReadCompleted(io_buffer_size, &defer_or_cancel); |
| 1023 EXPECT_TRUE(resource_controller_.is_cancel_with_error_called()); |
| 1024 EXPECT_EQ(net::ERR_ABORTED, resource_controller_.error()); |
| 1025 EXPECT_TRUE(defer_or_cancel); |
| 997 } | 1026 } |
| 998 | 1027 |
| 999 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 1028 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1000 BeginWriteReturnsShouldWaitOnReadCompleted) { | 1029 BeginWriteReturnsShouldWaitOnReadCompleted) { |
| 1001 scoped_refptr<net::IOBuffer> io_buffer; | 1030 scoped_refptr<net::IOBuffer> io_buffer; |
| 1002 int io_buffer_size = 0; | 1031 int io_buffer_size = 0; |
| 1003 bool defer = false; | 1032 bool defer_or_cancel = false; |
| 1004 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 1033 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 1005 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 1034 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 1006 | 1035 |
| 1007 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 1036 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
| 1008 ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 1037 handler_->OnReadCompleted(io_buffer_size, &defer_or_cancel); |
| 1009 EXPECT_TRUE(defer); | 1038 EXPECT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 1039 EXPECT_TRUE(defer_or_cancel); |
| 1010 } | 1040 } |
| 1011 | 1041 |
| 1012 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 1042 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1013 BeginWriteFailsOnResume) { | 1043 BeginWriteFailsOnResume) { |
| 1014 bool defer = false; | 1044 bool defer_or_cancel = false; |
| 1015 int io_buffer_size = 0; | 1045 int io_buffer_size = 0; |
| 1016 scoped_refptr<net::IOBuffer> io_buffer; | 1046 scoped_refptr<net::IOBuffer> io_buffer; |
| 1017 | 1047 |
| 1018 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 1048 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 1019 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 1049 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 1020 ASSERT_TRUE(handler_->OnReadCompleted(0, &defer)); | 1050 handler_->OnReadCompleted(0, &defer_or_cancel); |
| 1021 ASSERT_FALSE(defer); | 1051 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 1052 ASSERT_FALSE(defer_or_cancel); |
| 1022 url_loader_client_.RunUntilResponseBodyArrived(); | 1053 url_loader_client_.RunUntilResponseBodyArrived(); |
| 1054 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 1023 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 1055 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 1024 | 1056 |
| 1025 while (!defer) { | 1057 while (!defer_or_cancel) { |
| 1026 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 1058 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 1027 ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 1059 handler_->OnReadCompleted(io_buffer_size, &defer_or_cancel); |
| 1028 } | 1060 } |
| 1029 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); | 1061 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); |
| 1030 | 1062 |
| 1031 while (!resource_controller_.is_cancel_with_error_called()) { | 1063 while (!resource_controller_.is_cancel_with_error_called()) { |
| 1032 char buf[256]; | 1064 char buf[256]; |
| 1033 uint32_t read_size = sizeof(buf); | 1065 uint32_t read_size = sizeof(buf); |
| 1034 MojoResult result = | 1066 MojoResult result = |
| 1035 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 1067 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
| 1036 MOJO_READ_DATA_FLAG_NONE); | 1068 MOJO_READ_DATA_FLAG_NONE); |
| 1037 ASSERT_TRUE(result == MOJO_RESULT_OK || result == MOJO_RESULT_SHOULD_WAIT); | 1069 ASSERT_TRUE(result == MOJO_RESULT_OK || result == MOJO_RESULT_SHOULD_WAIT); |
| 1038 base::RunLoop().RunUntilIdle(); | 1070 base::RunLoop().RunUntilIdle(); |
| 1039 } | 1071 } |
| 1040 | 1072 |
| 1041 EXPECT_FALSE(url_loader_client_.has_received_completion()); | 1073 EXPECT_FALSE(url_loader_client_.has_received_completion()); |
| 1042 EXPECT_EQ(net::ERR_FAILED, resource_controller_.error()); | 1074 EXPECT_EQ(net::ERR_FAILED, resource_controller_.error()); |
| 1043 EXPECT_EQ(0, resource_controller_.num_resume_calls()); | 1075 EXPECT_EQ(0, resource_controller_.num_resume_calls()); |
| 1044 } | 1076 } |
| 1045 | 1077 |
| 1046 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, CancelWhileWaiting) { | 1078 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, CancelWhileWaiting) { |
| 1047 bool defer = false; | 1079 bool defer_or_cancel = false; |
| 1048 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 1080 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 1049 | 1081 |
| 1050 while (!defer) { | 1082 while (!defer_or_cancel) { |
| 1051 scoped_refptr<net::IOBuffer> io_buffer; | 1083 scoped_refptr<net::IOBuffer> io_buffer; |
| 1052 int io_buffer_size = 0; | 1084 int io_buffer_size = 0; |
| 1053 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 1085 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 1054 ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 1086 handler_->OnReadCompleted(io_buffer_size, &defer_or_cancel); |
| 1087 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 1055 } | 1088 } |
| 1056 | 1089 |
| 1057 url_loader_client_.RunUntilResponseBodyArrived(); | 1090 url_loader_client_.RunUntilResponseBodyArrived(); |
| 1058 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 1091 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 1059 | 1092 |
| 1060 defer = false; | 1093 defer_or_cancel = false; |
| 1061 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, | 1094 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, |
| 1062 net::ERR_ABORTED); | 1095 net::ERR_ABORTED); |
| 1063 handler_->OnResponseCompleted(status, &defer); | 1096 handler_->OnResponseCompleted(status, &defer_or_cancel); |
| 1097 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 1064 | 1098 |
| 1065 ASSERT_FALSE(url_loader_client_.has_received_completion()); | 1099 ASSERT_FALSE(url_loader_client_.has_received_completion()); |
| 1066 url_loader_client_.RunUntilComplete(); | 1100 url_loader_client_.RunUntilComplete(); |
| 1067 EXPECT_EQ(net::ERR_ABORTED, | 1101 EXPECT_EQ(net::ERR_ABORTED, |
| 1068 url_loader_client_.completion_status().error_code); | 1102 url_loader_client_.completion_status().error_code); |
| 1069 | 1103 |
| 1070 while (true) { | 1104 while (true) { |
| 1071 char buffer[16]; | 1105 char buffer[16]; |
| 1072 uint32_t read_size = sizeof(buffer); | 1106 uint32_t read_size = sizeof(buffer); |
| 1073 MojoResult result = | 1107 MojoResult result = |
| 1074 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, | 1108 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, |
| 1075 &read_size, MOJO_READ_DATA_FLAG_NONE); | 1109 &read_size, MOJO_READ_DATA_FLAG_NONE); |
| 1076 if (result == MOJO_RESULT_FAILED_PRECONDITION) | 1110 if (result == MOJO_RESULT_FAILED_PRECONDITION) |
| 1077 break; | 1111 break; |
| 1078 base::RunLoop().RunUntilIdle(); | 1112 base::RunLoop().RunUntilIdle(); |
| 1079 DCHECK(result == MOJO_RESULT_SHOULD_WAIT || result == MOJO_RESULT_OK); | 1113 DCHECK(result == MOJO_RESULT_SHOULD_WAIT || result == MOJO_RESULT_OK); |
| 1080 } | 1114 } |
| 1081 | 1115 |
| 1082 base::RunLoop().RunUntilIdle(); | 1116 base::RunLoop().RunUntilIdle(); |
| 1083 EXPECT_EQ(0, resource_controller_.num_resume_calls()); | 1117 EXPECT_EQ(0, resource_controller_.num_resume_calls()); |
| 1084 } | 1118 } |
| 1085 | 1119 |
| 1086 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, RedirectHandling) { | 1120 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, RedirectHandling) { |
| 1087 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 1121 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
| 1088 bool defer = false; | 1122 bool defer_or_cancel = false; |
| 1089 | 1123 |
| 1090 ASSERT_TRUE(handler_->OnWillStart(request_->url(), &defer)); | 1124 handler_->OnWillStart(request_->url(), &defer_or_cancel); |
| 1091 ASSERT_FALSE(defer); | 1125 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 1126 ASSERT_FALSE(defer_or_cancel); |
| 1092 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 1127 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
| 1093 net::RedirectInfo redirect_info; | 1128 net::RedirectInfo redirect_info; |
| 1094 redirect_info.status_code = 301; | 1129 redirect_info.status_code = 301; |
| 1095 ASSERT_TRUE( | 1130 handler_->OnRequestRedirected(redirect_info, response.get(), |
| 1096 handler_->OnRequestRedirected(redirect_info, response.get(), &defer)); | 1131 &defer_or_cancel); |
| 1097 ASSERT_TRUE(defer); | 1132 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 1133 ASSERT_TRUE(defer_or_cancel); |
| 1098 | 1134 |
| 1099 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1135 ASSERT_FALSE(url_loader_client_.has_received_response()); |
| 1100 ASSERT_FALSE(url_loader_client_.has_received_redirect()); | 1136 ASSERT_FALSE(url_loader_client_.has_received_redirect()); |
| 1101 url_loader_client_.RunUntilRedirectReceived(); | 1137 url_loader_client_.RunUntilRedirectReceived(); |
| 1102 | 1138 |
| 1103 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1139 ASSERT_FALSE(url_loader_client_.has_received_response()); |
| 1104 ASSERT_TRUE(url_loader_client_.has_received_redirect()); | 1140 ASSERT_TRUE(url_loader_client_.has_received_redirect()); |
| 1105 EXPECT_EQ(301, url_loader_client_.redirect_info().status_code); | 1141 EXPECT_EQ(301, url_loader_client_.redirect_info().status_code); |
| 1106 | 1142 |
| 1107 EXPECT_EQ(0, resource_controller_.num_resume_calls()); | 1143 EXPECT_EQ(0, resource_controller_.num_resume_calls()); |
| 1108 handler_->FollowRedirect(); | 1144 handler_->FollowRedirect(); |
| 1109 EXPECT_EQ(1, resource_controller_.num_resume_calls()); | 1145 EXPECT_EQ(1, resource_controller_.num_resume_calls()); |
| 1110 | 1146 |
| 1111 url_loader_client_.ClearHasReceivedRedirect(); | 1147 url_loader_client_.ClearHasReceivedRedirect(); |
| 1112 // Redirect once more. | 1148 // Redirect once more. |
| 1113 defer = false; | 1149 defer_or_cancel = false; |
| 1114 redirect_info.status_code = 302; | 1150 redirect_info.status_code = 302; |
| 1115 ASSERT_TRUE( | 1151 handler_->OnRequestRedirected(redirect_info, response.get(), |
| 1116 handler_->OnRequestRedirected(redirect_info, response.get(), &defer)); | 1152 &defer_or_cancel); |
| 1117 ASSERT_TRUE(defer); | 1153 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 1154 ASSERT_TRUE(defer_or_cancel); |
| 1118 | 1155 |
| 1119 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1156 ASSERT_FALSE(url_loader_client_.has_received_response()); |
| 1120 ASSERT_FALSE(url_loader_client_.has_received_redirect()); | 1157 ASSERT_FALSE(url_loader_client_.has_received_redirect()); |
| 1121 url_loader_client_.RunUntilRedirectReceived(); | 1158 url_loader_client_.RunUntilRedirectReceived(); |
| 1122 | 1159 |
| 1123 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1160 ASSERT_FALSE(url_loader_client_.has_received_response()); |
| 1124 ASSERT_TRUE(url_loader_client_.has_received_redirect()); | 1161 ASSERT_TRUE(url_loader_client_.has_received_redirect()); |
| 1125 EXPECT_EQ(302, url_loader_client_.redirect_info().status_code); | 1162 EXPECT_EQ(302, url_loader_client_.redirect_info().status_code); |
| 1126 | 1163 |
| 1127 EXPECT_EQ(1, resource_controller_.num_resume_calls()); | 1164 EXPECT_EQ(1, resource_controller_.num_resume_calls()); |
| 1128 handler_->FollowRedirect(); | 1165 handler_->FollowRedirect(); |
| 1129 EXPECT_EQ(2, resource_controller_.num_resume_calls()); | 1166 EXPECT_EQ(2, resource_controller_.num_resume_calls()); |
| 1130 | 1167 |
| 1131 // Give the final response. | 1168 // Give the final response. |
| 1132 defer = false; | 1169 defer_or_cancel = false; |
| 1133 ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer)); | 1170 handler_->OnResponseStarted(response.get(), &defer_or_cancel); |
| 1134 ASSERT_FALSE(defer); | 1171 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 1172 ASSERT_FALSE(defer_or_cancel); |
| 1135 | 1173 |
| 1136 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 1174 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
| 1137 handler_->OnResponseCompleted(status, &defer); | 1175 handler_->OnResponseCompleted(status, &defer_or_cancel); |
| 1138 ASSERT_FALSE(defer); | 1176 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 1177 ASSERT_FALSE(defer_or_cancel); |
| 1139 | 1178 |
| 1140 ASSERT_FALSE(url_loader_client_.has_received_completion()); | 1179 ASSERT_FALSE(url_loader_client_.has_received_completion()); |
| 1141 url_loader_client_.RunUntilComplete(); | 1180 url_loader_client_.RunUntilComplete(); |
| 1142 | 1181 |
| 1143 ASSERT_TRUE(url_loader_client_.has_received_response()); | 1182 ASSERT_TRUE(url_loader_client_.has_received_response()); |
| 1144 ASSERT_TRUE(url_loader_client_.has_received_completion()); | 1183 ASSERT_TRUE(url_loader_client_.has_received_completion()); |
| 1145 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 1184 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
| 1146 } | 1185 } |
| 1147 | 1186 |
| 1148 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 1187 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1149 MalformedFollowRedirectRequest) { | 1188 MalformedFollowRedirectRequest) { |
| 1150 handler_->FollowRedirect(); | 1189 handler_->FollowRedirect(); |
| 1151 | 1190 |
| 1152 EXPECT_TRUE(handler_->has_received_bad_message()); | 1191 EXPECT_TRUE(handler_->has_received_bad_message()); |
| 1153 EXPECT_EQ(0, resource_controller_.num_resume_calls()); | 1192 EXPECT_EQ(0, resource_controller_.num_resume_calls()); |
| 1154 } | 1193 } |
| 1155 | 1194 |
| 1156 // Typically ResourceHandler methods are called in this order. | 1195 // Typically ResourceHandler methods are called in this order. |
| 1157 TEST_P( | 1196 TEST_P( |
| 1158 MojoAsyncResourceHandlerWithAllocationSizeTest, | 1197 MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1159 OnWillStartThenOnResponseStartedThenOnWillReadThenOnReadCompletedThenOnRespo
nseCompleted) { | 1198 OnWillStartThenOnResponseStartedThenOnWillReadThenOnReadCompletedThenOnRespo
nseCompleted) { |
| 1160 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 1199 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
| 1161 bool defer = false; | 1200 bool defer_or_cancel = false; |
| 1162 | 1201 |
| 1163 ASSERT_TRUE(handler_->OnWillStart(request_->url(), &defer)); | 1202 handler_->OnWillStart(request_->url(), &defer_or_cancel); |
| 1164 ASSERT_FALSE(defer); | 1203 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 1204 ASSERT_FALSE(defer_or_cancel); |
| 1165 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 1205 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
| 1166 ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer)); | 1206 handler_->OnResponseStarted(response.get(), &defer_or_cancel); |
| 1167 ASSERT_FALSE(defer); | 1207 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 1208 ASSERT_FALSE(defer_or_cancel); |
| 1168 | 1209 |
| 1169 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1210 ASSERT_FALSE(url_loader_client_.has_received_response()); |
| 1170 url_loader_client_.RunUntilResponseReceived(); | 1211 url_loader_client_.RunUntilResponseReceived(); |
| 1171 | 1212 |
| 1172 int io_buffer_size = 0; | 1213 int io_buffer_size = 0; |
| 1173 scoped_refptr<net::IOBuffer> io_buffer; | 1214 scoped_refptr<net::IOBuffer> io_buffer; |
| 1174 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 1215 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 1175 ASSERT_TRUE(io_buffer); | 1216 ASSERT_TRUE(io_buffer); |
| 1176 ASSERT_GT(io_buffer_size, 0); | 1217 ASSERT_GT(io_buffer_size, 0); |
| 1177 io_buffer->data()[0] = 'A'; | 1218 io_buffer->data()[0] = 'A'; |
| 1178 | 1219 |
| 1179 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); | 1220 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); |
| 1180 url_loader_client_.RunUntilResponseBodyArrived(); | 1221 url_loader_client_.RunUntilResponseBodyArrived(); |
| 1181 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 1222 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 1182 | 1223 |
| 1183 ASSERT_TRUE(handler_->OnReadCompleted(1, &defer)); | 1224 handler_->OnReadCompleted(1, &defer_or_cancel); |
| 1184 ASSERT_FALSE(defer); | 1225 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 1226 ASSERT_FALSE(defer_or_cancel); |
| 1185 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 1227 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
| 1186 handler_->OnResponseCompleted(status, &defer); | 1228 handler_->OnResponseCompleted(status, &defer_or_cancel); |
| 1187 ASSERT_FALSE(defer); | 1229 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 1230 ASSERT_FALSE(defer_or_cancel); |
| 1188 | 1231 |
| 1189 ASSERT_FALSE(url_loader_client_.has_received_completion()); | 1232 ASSERT_FALSE(url_loader_client_.has_received_completion()); |
| 1190 url_loader_client_.RunUntilComplete(); | 1233 url_loader_client_.RunUntilComplete(); |
| 1191 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 1234 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
| 1192 | 1235 |
| 1193 // This is needed because |*io_buffer| may keep the data producer alive. | 1236 // This is needed because |*io_buffer| may keep the data producer alive. |
| 1194 io_buffer = nullptr; | 1237 io_buffer = nullptr; |
| 1195 | 1238 |
| 1196 std::string body; | 1239 std::string body; |
| 1197 while (true) { | 1240 while (true) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1210 } | 1253 } |
| 1211 } | 1254 } |
| 1212 EXPECT_EQ("A", body); | 1255 EXPECT_EQ("A", body); |
| 1213 } | 1256 } |
| 1214 | 1257 |
| 1215 // MimeResourceHandler calls delegated ResourceHandler's methods in this order. | 1258 // MimeResourceHandler calls delegated ResourceHandler's methods in this order. |
| 1216 TEST_P( | 1259 TEST_P( |
| 1217 MojoAsyncResourceHandlerWithAllocationSizeTest, | 1260 MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1218 OnWillStartThenOnWillReadThenOnResponseStartedThenOnReadCompletedThenOnRespo
nseCompleted) { | 1261 OnWillStartThenOnWillReadThenOnResponseStartedThenOnReadCompletedThenOnRespo
nseCompleted) { |
| 1219 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 1262 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
| 1220 bool defer = false; | 1263 bool defer_or_cancel = false; |
| 1221 | 1264 |
| 1222 ASSERT_TRUE(handler_->OnWillStart(request_->url(), &defer)); | 1265 handler_->OnWillStart(request_->url(), &defer_or_cancel); |
| 1223 ASSERT_FALSE(defer); | 1266 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 1267 ASSERT_FALSE(defer_or_cancel); |
| 1224 | 1268 |
| 1225 int io_buffer_size = 0; | 1269 int io_buffer_size = 0; |
| 1226 scoped_refptr<net::IOBuffer> io_buffer; | 1270 scoped_refptr<net::IOBuffer> io_buffer; |
| 1227 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 1271 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 1228 ASSERT_TRUE(io_buffer); | 1272 ASSERT_TRUE(io_buffer); |
| 1229 ASSERT_GT(io_buffer_size, 0); | 1273 ASSERT_GT(io_buffer_size, 0); |
| 1230 io_buffer->data()[0] = 'B'; | 1274 io_buffer->data()[0] = 'B'; |
| 1231 | 1275 |
| 1232 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); | 1276 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); |
| 1233 url_loader_client_.RunUntilResponseBodyArrived(); | 1277 url_loader_client_.RunUntilResponseBodyArrived(); |
| 1234 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 1278 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 1235 | 1279 |
| 1236 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 1280 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
| 1237 ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer)); | 1281 handler_->OnResponseStarted(response.get(), &defer_or_cancel); |
| 1238 ASSERT_FALSE(defer); | 1282 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 1283 ASSERT_FALSE(defer_or_cancel); |
| 1239 | 1284 |
| 1240 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1285 ASSERT_FALSE(url_loader_client_.has_received_response()); |
| 1241 url_loader_client_.RunUntilResponseReceived(); | 1286 url_loader_client_.RunUntilResponseReceived(); |
| 1242 | 1287 |
| 1243 ASSERT_TRUE(handler_->OnReadCompleted(1, &defer)); | 1288 handler_->OnReadCompleted(1, &defer_or_cancel); |
| 1244 ASSERT_FALSE(defer); | 1289 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 1290 ASSERT_FALSE(defer_or_cancel); |
| 1245 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 1291 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
| 1246 handler_->OnResponseCompleted(status, &defer); | 1292 handler_->OnResponseCompleted(status, &defer_or_cancel); |
| 1247 ASSERT_FALSE(defer); | 1293 ASSERT_FALSE(resource_controller_.is_cancel_with_error_called()); |
| 1294 ASSERT_FALSE(defer_or_cancel); |
| 1248 | 1295 |
| 1249 ASSERT_FALSE(url_loader_client_.has_received_completion()); | 1296 ASSERT_FALSE(url_loader_client_.has_received_completion()); |
| 1250 url_loader_client_.RunUntilComplete(); | 1297 url_loader_client_.RunUntilComplete(); |
| 1251 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 1298 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
| 1252 | 1299 |
| 1253 // This is needed because |*io_buffer| may keep the data producer alive. | 1300 // This is needed because |*io_buffer| may keep the data producer alive. |
| 1254 io_buffer = nullptr; | 1301 io_buffer = nullptr; |
| 1255 | 1302 |
| 1256 std::string body; | 1303 std::string body; |
| 1257 while (true) { | 1304 while (true) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1270 } | 1317 } |
| 1271 } | 1318 } |
| 1272 EXPECT_EQ("B", body); | 1319 EXPECT_EQ("B", body); |
| 1273 } | 1320 } |
| 1274 | 1321 |
| 1275 INSTANTIATE_TEST_CASE_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 1322 INSTANTIATE_TEST_CASE_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1276 MojoAsyncResourceHandlerWithAllocationSizeTest, | 1323 MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1277 ::testing::Values(8, 32 * 2014)); | 1324 ::testing::Values(8, 32 * 2014)); |
| 1278 } // namespace | 1325 } // namespace |
| 1279 } // namespace content | 1326 } // namespace content |
| OLD | NEW |