Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(65)

Side by Side Diff: content/browser/loader/mojo_async_resource_handler_unittest.cc

Issue 2476163003: Refactor ResourceHandler API. (Closed)
Patch Set: Minor cleanups, one real fix Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « content/browser/loader/mojo_async_resource_handler.cc ('k') | content/browser/loader/navigation_resource_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698