Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/loader/mojo_async_resource_handler.h" | 5 #include "content/browser/loader/mojo_async_resource_handler.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 37 #include "mojo/public/c/system/types.h" | 37 #include "mojo/public/c/system/types.h" |
| 38 #include "mojo/public/cpp/bindings/strong_binding.h" | 38 #include "mojo/public/cpp/bindings/strong_binding.h" |
| 39 #include "mojo/public/cpp/system/data_pipe.h" | 39 #include "mojo/public/cpp/system/data_pipe.h" |
| 40 #include "net/base/auth.h" | 40 #include "net/base/auth.h" |
| 41 #include "net/base/net_errors.h" | 41 #include "net/base/net_errors.h" |
| 42 #include "net/http/http_response_headers.h" | 42 #include "net/http/http_response_headers.h" |
| 43 #include "net/http/http_response_info.h" | 43 #include "net/http/http_response_info.h" |
| 44 #include "net/http/http_status_code.h" | 44 #include "net/http/http_status_code.h" |
| 45 #include "net/http/http_util.h" | 45 #include "net/http/http_util.h" |
| 46 #include "net/ssl/client_cert_store.h" | 46 #include "net/ssl/client_cert_store.h" |
| 47 #include "net/test/url_request/url_request_mock_data_job.h" | |
| 47 #include "net/url_request/url_request.h" | 48 #include "net/url_request/url_request.h" |
| 48 #include "net/url_request/url_request_context.h" | 49 #include "net/url_request/url_request_context.h" |
| 49 #include "net/url_request/url_request_status.h" | 50 #include "net/url_request/url_request_status.h" |
| 50 #include "net/url_request/url_request_test_util.h" | 51 #include "net/url_request/url_request_test_util.h" |
| 51 #include "testing/gtest/include/gtest/gtest.h" | 52 #include "testing/gtest/include/gtest/gtest.h" |
| 52 #include "ui/base/page_transition_types.h" | 53 #include "ui/base/page_transition_types.h" |
| 53 | 54 |
| 54 namespace content { | 55 namespace content { |
| 55 namespace { | 56 namespace { |
| 56 | 57 |
| 57 constexpr int kSizeMimeSnifferRequiresForFirstOnWillRead = 2048; | 58 constexpr int kSizeMimeSnifferRequiresForFirstOnWillRead = 2048; |
| 58 | 59 |
| 60 class FakeUploadDataStream : public net::UploadDataStream { | |
| 61 public: | |
| 62 FakeUploadDataStream(int64_t position, int64_t size) | |
| 63 : UploadDataStream(false, 0), position_(position), size_(size) {} | |
| 64 | |
| 65 void set_position(int64_t position) { position_ = position; } | |
| 66 int InitInternal(const net::NetLogWithSource& net_log) override { | |
| 67 NOTREACHED(); | |
| 68 return 0; | |
| 69 } | |
| 70 int ReadInternal(net::IOBuffer* buf, int buf_len) override { | |
| 71 NOTREACHED(); | |
| 72 return 0; | |
| 73 } | |
| 74 void ResetInternal() override { NOTREACHED(); } | |
| 75 | |
| 76 net::UploadProgress GetUploadProgress() const override { | |
| 77 return net::UploadProgress(position_, size_); | |
| 78 } | |
| 79 | |
| 80 private: | |
| 81 int64_t position_; | |
| 82 int64_t size_; | |
| 83 | |
| 84 DISALLOW_COPY_AND_ASSIGN(FakeUploadDataStream); | |
| 85 }; | |
| 86 | |
| 59 class TestResourceDispatcherHostDelegate final | 87 class TestResourceDispatcherHostDelegate final |
| 60 : public ResourceDispatcherHostDelegate { | 88 : public ResourceDispatcherHostDelegate { |
| 61 public: | 89 public: |
| 62 TestResourceDispatcherHostDelegate() = default; | 90 TestResourceDispatcherHostDelegate() = default; |
| 63 ~TestResourceDispatcherHostDelegate() override { | 91 ~TestResourceDispatcherHostDelegate() override { |
| 64 EXPECT_EQ(num_on_response_started_calls_expectation_, | 92 EXPECT_EQ(num_on_response_started_calls_expectation_, |
| 65 num_on_response_started_calls_); | 93 num_on_response_started_calls_); |
| 66 } | 94 } |
| 67 | 95 |
| 68 bool ShouldBeginRequest(const std::string& method, | 96 bool ShouldBeginRequest(const std::string& method, |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 271 DISALLOW_COPY_AND_ASSIGN(TestURLLoaderFactory); | 299 DISALLOW_COPY_AND_ASSIGN(TestURLLoaderFactory); |
| 272 }; | 300 }; |
| 273 | 301 |
| 274 class MojoAsyncResourceHandlerTestBase { | 302 class MojoAsyncResourceHandlerTestBase { |
| 275 public: | 303 public: |
| 276 MojoAsyncResourceHandlerTestBase() | 304 MojoAsyncResourceHandlerTestBase() |
| 277 : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP), | 305 : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP), |
| 278 browser_context_(new TestBrowserContext()) { | 306 browser_context_(new TestBrowserContext()) { |
| 279 MojoAsyncResourceHandler::SetAllocationSizeForTesting(32 * 1024); | 307 MojoAsyncResourceHandler::SetAllocationSizeForTesting(32 * 1024); |
| 280 rdh_.SetDelegate(&rdh_delegate_); | 308 rdh_.SetDelegate(&rdh_delegate_); |
| 309 } | |
| 281 | 310 |
| 311 void SetUpRequest() { SetUpRequestWithUpload(nullptr); } | |
| 312 | |
| 313 void SetUpRequestWithUpload( | |
| 314 std::unique_ptr<net::UploadDataStream> upload_stream) { | |
| 282 // Create and initialize |request_|. None of this matters, for these tests, | 315 // Create and initialize |request_|. None of this matters, for these tests, |
| 283 // just need something non-NULL. | 316 // just need something non-NULL. |
| 284 net::URLRequestContext* request_context = | 317 net::URLRequestContext* request_context = |
| 285 browser_context_->GetResourceContext()->GetRequestContext(); | 318 browser_context_->GetResourceContext()->GetRequestContext(); |
| 286 request_ = request_context->CreateRequest( | 319 request_ = request_context->CreateRequest( |
| 287 GURL("http://foo/"), net::DEFAULT_PRIORITY, &url_request_delegate_); | 320 GURL("http://foo/"), net::DEFAULT_PRIORITY, &url_request_delegate_); |
| 321 request_->set_upload(std::move(upload_stream)); | |
| 288 ResourceRequestInfo::AllocateForTesting( | 322 ResourceRequestInfo::AllocateForTesting( |
| 289 request_.get(), // request | 323 request_.get(), // request |
| 290 RESOURCE_TYPE_XHR, // resource_type | 324 RESOURCE_TYPE_XHR, // resource_type |
| 291 browser_context_->GetResourceContext(), // context | 325 browser_context_->GetResourceContext(), // context |
| 292 2, // render_process_id | 326 2, // render_process_id |
| 293 0, // render_view_id | 327 0, // render_view_id |
| 294 0, // render_frame_id | 328 0, // render_frame_id |
| 295 true, // is_main_frame | 329 true, // is_main_frame |
| 296 false, // parent_is_main_frame | 330 false, // parent_is_main_frame |
| 297 false, // allow_download | 331 false, // allow_download |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 375 class MojoAsyncResourceHandlerWithAllocationSizeTest | 409 class MojoAsyncResourceHandlerWithAllocationSizeTest |
| 376 : public MojoAsyncResourceHandlerTestBase, | 410 : public MojoAsyncResourceHandlerTestBase, |
| 377 public ::testing::TestWithParam<size_t> { | 411 public ::testing::TestWithParam<size_t> { |
| 378 protected: | 412 protected: |
| 379 MojoAsyncResourceHandlerWithAllocationSizeTest() { | 413 MojoAsyncResourceHandlerWithAllocationSizeTest() { |
| 380 MojoAsyncResourceHandler::SetAllocationSizeForTesting(GetParam()); | 414 MojoAsyncResourceHandler::SetAllocationSizeForTesting(GetParam()); |
| 381 } | 415 } |
| 382 }; | 416 }; |
| 383 | 417 |
| 384 TEST_F(MojoAsyncResourceHandlerTest, InFlightRequests) { | 418 TEST_F(MojoAsyncResourceHandlerTest, InFlightRequests) { |
| 419 SetUpRequest(); | |
|
mmenke
2017/01/18 17:00:46
Can we do this in the constructor instead, and mak
tzik
2017/01/19 11:53:09
Done.
| |
| 385 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 420 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
| 386 handler_ = nullptr; | 421 handler_ = nullptr; |
| 387 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 422 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
| 388 } | 423 } |
| 389 | 424 |
| 390 TEST_F(MojoAsyncResourceHandlerTest, OnWillStart) { | 425 TEST_F(MojoAsyncResourceHandlerTest, OnWillStart) { |
| 426 SetUpRequest(); | |
| 391 EXPECT_EQ(MockResourceLoader::Status::IDLE, | 427 EXPECT_EQ(MockResourceLoader::Status::IDLE, |
| 392 mock_loader_->OnWillStart(request_->url())); | 428 mock_loader_->OnWillStart(request_->url())); |
| 393 } | 429 } |
| 394 | 430 |
| 395 TEST_F(MojoAsyncResourceHandlerTest, OnResponseStarted) { | 431 TEST_F(MojoAsyncResourceHandlerTest, OnResponseStarted) { |
| 432 SetUpRequest(); | |
| 396 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 433 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
| 397 scoped_refptr<net::IOBufferWithSize> metadata = new net::IOBufferWithSize(5); | 434 scoped_refptr<net::IOBufferWithSize> metadata = new net::IOBufferWithSize(5); |
| 398 memcpy(metadata->data(), "hello", 5); | 435 memcpy(metadata->data(), "hello", 5); |
| 399 handler_->SetMetadata(metadata); | 436 handler_->SetMetadata(metadata); |
| 400 | 437 |
| 401 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 438 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 402 mock_loader_->OnWillStart(request_->url())); | 439 mock_loader_->OnWillStart(request_->url())); |
| 403 | 440 |
| 404 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 441 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
| 405 response->head.content_length = 99; | 442 response->head.content_length = 99; |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 424 url_loader_client_.response_head().request_start); | 461 url_loader_client_.response_head().request_start); |
| 425 EXPECT_EQ(response->head.response_start, | 462 EXPECT_EQ(response->head.response_start, |
| 426 url_loader_client_.response_head().response_start); | 463 url_loader_client_.response_head().response_start); |
| 427 EXPECT_EQ(99, url_loader_client_.response_head().content_length); | 464 EXPECT_EQ(99, url_loader_client_.response_head().content_length); |
| 428 | 465 |
| 429 url_loader_client_.RunUntilCachedMetadataReceived(); | 466 url_loader_client_.RunUntilCachedMetadataReceived(); |
| 430 EXPECT_EQ("hello", url_loader_client_.cached_metadata()); | 467 EXPECT_EQ("hello", url_loader_client_.cached_metadata()); |
| 431 } | 468 } |
| 432 | 469 |
| 433 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndInFlightRequests) { | 470 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndInFlightRequests) { |
| 471 SetUpRequest(); | |
| 434 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 472 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 435 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 473 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
| 436 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 474 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 437 EXPECT_EQ(1, rdh_.num_in_flight_requests_for_testing()); | 475 EXPECT_EQ(1, rdh_.num_in_flight_requests_for_testing()); |
| 438 handler_ = nullptr; | 476 handler_ = nullptr; |
| 439 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 477 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
| 440 } | 478 } |
| 441 | 479 |
| 442 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadWithInsufficientResource) { | 480 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadWithInsufficientResource) { |
| 481 SetUpRequest(); | |
| 443 rdh_.set_max_num_in_flight_requests_per_process(0); | 482 rdh_.set_max_num_in_flight_requests_per_process(0); |
| 444 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 483 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 445 | 484 |
| 446 ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead(-1)); | 485 ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead(-1)); |
| 447 EXPECT_EQ(net::ERR_INSUFFICIENT_RESOURCES, mock_loader_->error_code()); | 486 EXPECT_EQ(net::ERR_INSUFFICIENT_RESOURCES, mock_loader_->error_code()); |
| 448 EXPECT_EQ(1, rdh_.num_in_flight_requests_for_testing()); | 487 EXPECT_EQ(1, rdh_.num_in_flight_requests_for_testing()); |
| 449 handler_ = nullptr; | 488 handler_ = nullptr; |
| 450 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 489 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
| 451 } | 490 } |
| 452 | 491 |
| 453 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndOnReadCompleted) { | 492 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndOnReadCompleted) { |
| 493 SetUpRequest(); | |
| 454 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 494 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 455 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 495 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 456 // The buffer size that the mime sniffer requires implicitly. | 496 // The buffer size that the mime sniffer requires implicitly. |
| 457 ASSERT_GE(mock_loader_->io_buffer_size(), | 497 ASSERT_GE(mock_loader_->io_buffer_size(), |
| 458 kSizeMimeSnifferRequiresForFirstOnWillRead); | 498 kSizeMimeSnifferRequiresForFirstOnWillRead); |
| 459 | 499 |
| 460 url_loader_client_.RunUntilResponseBodyArrived(); | 500 url_loader_client_.RunUntilResponseBodyArrived(); |
| 461 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 501 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 462 | 502 |
| 463 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 503 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 474 base::RunLoop().RunUntilIdle(); | 514 base::RunLoop().RunUntilIdle(); |
| 475 continue; | 515 continue; |
| 476 } | 516 } |
| 477 contents.append(buffer, read_size); | 517 contents.append(buffer, read_size); |
| 478 } | 518 } |
| 479 EXPECT_EQ("AB", contents); | 519 EXPECT_EQ("AB", contents); |
| 480 } | 520 } |
| 481 | 521 |
| 482 TEST_F(MojoAsyncResourceHandlerTest, | 522 TEST_F(MojoAsyncResourceHandlerTest, |
| 483 OnWillReadAndOnReadCompletedWithInsufficientInitialCapacity) { | 523 OnWillReadAndOnReadCompletedWithInsufficientInitialCapacity) { |
| 524 SetUpRequest(); | |
| 484 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); | 525 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); |
| 485 | 526 |
| 486 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 527 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 487 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 528 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 488 // The buffer size that the mime sniffer requires implicitly. | 529 // The buffer size that the mime sniffer requires implicitly. |
| 489 ASSERT_GE(mock_loader_->io_buffer_size(), | 530 ASSERT_GE(mock_loader_->io_buffer_size(), |
| 490 kSizeMimeSnifferRequiresForFirstOnWillRead); | 531 kSizeMimeSnifferRequiresForFirstOnWillRead); |
| 491 | 532 |
| 492 url_loader_client_.RunUntilResponseBodyArrived(); | 533 url_loader_client_.RunUntilResponseBodyArrived(); |
| 493 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 534 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 510 ASSERT_EQ(MOJO_RESULT_OK, result); | 551 ASSERT_EQ(MOJO_RESULT_OK, result); |
| 511 contents.append(buffer, read_size); | 552 contents.append(buffer, read_size); |
| 512 } | 553 } |
| 513 EXPECT_EQ(data, contents); | 554 EXPECT_EQ(data, contents); |
| 514 EXPECT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, | 555 EXPECT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, |
| 515 mock_loader_->status()); | 556 mock_loader_->status()); |
| 516 } | 557 } |
| 517 | 558 |
| 518 TEST_F(MojoAsyncResourceHandlerTest, | 559 TEST_F(MojoAsyncResourceHandlerTest, |
| 519 IOBufferFromOnWillReadShouldRemainValidEvenIfHandlerIsGone) { | 560 IOBufferFromOnWillReadShouldRemainValidEvenIfHandlerIsGone) { |
| 561 SetUpRequest(); | |
| 520 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 562 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 521 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 563 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 522 // The io_buffer size that the mime sniffer requires implicitly. | 564 // The io_buffer size that the mime sniffer requires implicitly. |
| 523 ASSERT_GE(mock_loader_->io_buffer_size(), | 565 ASSERT_GE(mock_loader_->io_buffer_size(), |
| 524 kSizeMimeSnifferRequiresForFirstOnWillRead); | 566 kSizeMimeSnifferRequiresForFirstOnWillRead); |
| 525 | 567 |
| 526 handler_ = nullptr; | 568 handler_ = nullptr; |
| 527 url_loader_client_.Unbind(); | 569 url_loader_client_.Unbind(); |
| 528 base::RunLoop().RunUntilIdle(); | 570 base::RunLoop().RunUntilIdle(); |
| 529 | 571 |
| 530 // Hopefully ASAN checks this operation's validity. | 572 // Hopefully ASAN checks this operation's validity. |
| 531 mock_loader_->io_buffer()->data()[0] = 'A'; | 573 mock_loader_->io_buffer()->data()[0] = 'A'; |
| 532 } | 574 } |
| 533 | 575 |
| 534 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted) { | 576 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted) { |
| 577 SetUpRequest(); | |
| 535 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 578 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 536 | 579 |
| 537 ResourceRequestInfoImpl::ForRequest(request_.get()) | 580 ResourceRequestInfoImpl::ForRequest(request_.get()) |
| 538 ->set_was_ignored_by_handler(false); | 581 ->set_was_ignored_by_handler(false); |
| 539 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 582 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
| 540 | 583 |
| 541 base::TimeTicks now1 = base::TimeTicks::Now(); | 584 base::TimeTicks now1 = base::TimeTicks::Now(); |
| 542 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 585 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 543 mock_loader_->OnResponseCompleted(status)); | 586 mock_loader_->OnResponseCompleted(status)); |
| 544 base::TimeTicks now2 = base::TimeTicks::Now(); | 587 base::TimeTicks now2 = base::TimeTicks::Now(); |
| 545 | 588 |
| 546 url_loader_client_.RunUntilComplete(); | 589 url_loader_client_.RunUntilComplete(); |
| 547 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 590 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 548 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 591 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
| 549 EXPECT_FALSE(url_loader_client_.completion_status().was_ignored_by_handler); | 592 EXPECT_FALSE(url_loader_client_.completion_status().was_ignored_by_handler); |
| 550 EXPECT_LE(now1, url_loader_client_.completion_status().completion_time); | 593 EXPECT_LE(now1, url_loader_client_.completion_status().completion_time); |
| 551 EXPECT_LE(url_loader_client_.completion_status().completion_time, now2); | 594 EXPECT_LE(url_loader_client_.completion_status().completion_time, now2); |
| 552 EXPECT_EQ(request_->GetTotalReceivedBytes(), | 595 EXPECT_EQ(request_->GetTotalReceivedBytes(), |
| 553 url_loader_client_.completion_status().encoded_data_length); | 596 url_loader_client_.completion_status().encoded_data_length); |
|
mmenke
2017/01/18 17:00:46
Should we test somewhere for the non-upload cases
tzik
2017/01/19 11:53:09
Done.
| |
| 554 } | 597 } |
| 555 | 598 |
| 556 // This test case sets different status values from OnResponseCompleted. | 599 // This test case sets different status values from OnResponseCompleted. |
| 557 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted2) { | 600 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted2) { |
| 601 SetUpRequest(); | |
| 558 rdh_.SetDelegate(nullptr); | 602 rdh_.SetDelegate(nullptr); |
| 559 // Don't use CallOnWillStartAndOnResponseStarted as this test case manually | 603 // Don't use CallOnWillStartAndOnResponseStarted as this test case manually |
| 560 // sets the null delegate. | 604 // sets the null delegate. |
| 561 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 605 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 562 mock_loader_->OnWillStart(request_->url())); | 606 mock_loader_->OnWillStart(request_->url())); |
| 563 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 607 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 564 mock_loader_->OnResponseStarted( | 608 mock_loader_->OnResponseStarted( |
| 565 make_scoped_refptr(new ResourceResponse()))); | 609 make_scoped_refptr(new ResourceResponse()))); |
| 566 ASSERT_FALSE(url_loader_client_.has_received_response()); | 610 ASSERT_FALSE(url_loader_client_.has_received_response()); |
| 567 url_loader_client_.RunUntilResponseReceived(); | 611 url_loader_client_.RunUntilResponseReceived(); |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 581 EXPECT_EQ(net::ERR_ABORTED, | 625 EXPECT_EQ(net::ERR_ABORTED, |
| 582 url_loader_client_.completion_status().error_code); | 626 url_loader_client_.completion_status().error_code); |
| 583 EXPECT_TRUE(url_loader_client_.completion_status().was_ignored_by_handler); | 627 EXPECT_TRUE(url_loader_client_.completion_status().was_ignored_by_handler); |
| 584 EXPECT_LE(now1, url_loader_client_.completion_status().completion_time); | 628 EXPECT_LE(now1, url_loader_client_.completion_status().completion_time); |
| 585 EXPECT_LE(url_loader_client_.completion_status().completion_time, now2); | 629 EXPECT_LE(url_loader_client_.completion_status().completion_time, now2); |
| 586 EXPECT_EQ(request_->GetTotalReceivedBytes(), | 630 EXPECT_EQ(request_->GetTotalReceivedBytes(), |
| 587 url_loader_client_.completion_status().encoded_data_length); | 631 url_loader_client_.completion_status().encoded_data_length); |
| 588 } | 632 } |
| 589 | 633 |
| 590 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithCanceledTimedOut) { | 634 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithCanceledTimedOut) { |
| 635 SetUpRequest(); | |
| 591 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, | 636 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, |
| 592 net::ERR_TIMED_OUT); | 637 net::ERR_TIMED_OUT); |
| 593 | 638 |
| 594 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 639 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 595 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 640 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 596 mock_loader_->OnResponseCompleted(status)); | 641 mock_loader_->OnResponseCompleted(status)); |
| 597 | 642 |
| 598 url_loader_client_.RunUntilComplete(); | 643 url_loader_client_.RunUntilComplete(); |
| 599 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 644 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 600 EXPECT_EQ(net::ERR_TIMED_OUT, | 645 EXPECT_EQ(net::ERR_TIMED_OUT, |
| 601 url_loader_client_.completion_status().error_code); | 646 url_loader_client_.completion_status().error_code); |
| 602 } | 647 } |
| 603 | 648 |
| 604 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithFailedTimedOut) { | 649 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithFailedTimedOut) { |
| 650 SetUpRequest(); | |
| 605 net::URLRequestStatus status(net::URLRequestStatus::FAILED, | 651 net::URLRequestStatus status(net::URLRequestStatus::FAILED, |
| 606 net::ERR_TIMED_OUT); | 652 net::ERR_TIMED_OUT); |
| 607 | 653 |
| 608 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 654 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 609 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 655 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 610 mock_loader_->OnResponseCompleted(status)); | 656 mock_loader_->OnResponseCompleted(status)); |
| 611 | 657 |
| 612 url_loader_client_.RunUntilComplete(); | 658 url_loader_client_.RunUntilComplete(); |
| 613 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 659 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 614 EXPECT_EQ(net::ERR_TIMED_OUT, | 660 EXPECT_EQ(net::ERR_TIMED_OUT, |
| 615 url_loader_client_.completion_status().error_code); | 661 url_loader_client_.completion_status().error_code); |
| 616 } | 662 } |
| 617 | 663 |
| 618 TEST_F(MojoAsyncResourceHandlerTest, ResponseCompletionShouldCloseDataPipe) { | 664 TEST_F(MojoAsyncResourceHandlerTest, ResponseCompletionShouldCloseDataPipe) { |
| 665 SetUpRequest(); | |
| 619 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 666 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 620 | 667 |
| 621 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 668 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 622 url_loader_client_.RunUntilResponseBodyArrived(); | 669 url_loader_client_.RunUntilResponseBodyArrived(); |
| 623 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 670 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 624 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnReadCompleted(0)); | 671 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnReadCompleted(0)); |
| 625 | 672 |
| 626 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 673 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
| 627 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 674 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 628 mock_loader_->OnResponseCompleted(status)); | 675 mock_loader_->OnResponseCompleted(status)); |
| 629 | 676 |
| 630 url_loader_client_.RunUntilComplete(); | 677 url_loader_client_.RunUntilComplete(); |
| 631 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 678 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 632 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 679 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
| 633 | 680 |
| 634 while (true) { | 681 while (true) { |
| 635 char buffer[16]; | 682 char buffer[16]; |
| 636 uint32_t read_size = sizeof(buffer); | 683 uint32_t read_size = sizeof(buffer); |
| 637 MojoResult result = | 684 MojoResult result = |
| 638 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, | 685 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, |
| 639 &read_size, MOJO_READ_DATA_FLAG_NONE); | 686 &read_size, MOJO_READ_DATA_FLAG_NONE); |
| 640 if (result == MOJO_RESULT_FAILED_PRECONDITION) | 687 if (result == MOJO_RESULT_FAILED_PRECONDITION) |
| 641 break; | 688 break; |
| 642 ASSERT_EQ(result, MOJO_RESULT_SHOULD_WAIT); | 689 ASSERT_EQ(result, MOJO_RESULT_SHOULD_WAIT); |
| 643 } | 690 } |
| 644 } | 691 } |
| 645 | 692 |
| 646 TEST_F(MojoAsyncResourceHandlerTest, OutOfBandCancelDuringBodyTransmission) { | 693 TEST_F(MojoAsyncResourceHandlerTest, OutOfBandCancelDuringBodyTransmission) { |
| 694 SetUpRequest(); | |
| 647 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 695 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 648 | 696 |
| 649 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 697 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 650 url_loader_client_.RunUntilResponseBodyArrived(); | 698 url_loader_client_.RunUntilResponseBodyArrived(); |
| 651 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 699 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 652 std::string data(mock_loader_->io_buffer_size(), 'a'); | 700 std::string data(mock_loader_->io_buffer_size(), 'a'); |
| 653 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, | 701 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, |
| 654 mock_loader_->OnReadCompleted(data)); | 702 mock_loader_->OnReadCompleted(data)); |
| 655 | 703 |
| 656 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); | 704 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 676 continue; | 724 continue; |
| 677 } | 725 } |
| 678 EXPECT_EQ(MOJO_RESULT_OK, result); | 726 EXPECT_EQ(MOJO_RESULT_OK, result); |
| 679 actual.append(buf, read_size); | 727 actual.append(buf, read_size); |
| 680 } | 728 } |
| 681 EXPECT_EQ(data, actual); | 729 EXPECT_EQ(data, actual); |
| 682 } | 730 } |
| 683 | 731 |
| 684 // In this case, an error is notified after OnWillRead, before OnReadCompleted. | 732 // In this case, an error is notified after OnWillRead, before OnReadCompleted. |
| 685 TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission2) { | 733 TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission2) { |
| 734 SetUpRequest(); | |
| 686 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 735 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 687 | 736 |
| 688 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 737 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 689 url_loader_client_.RunUntilResponseBodyArrived(); | 738 url_loader_client_.RunUntilResponseBodyArrived(); |
| 690 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 739 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 691 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); | 740 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); |
| 692 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 741 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 693 mock_loader_->OnResponseCompleted(status)); | 742 mock_loader_->OnResponseCompleted(status)); |
| 694 | 743 |
| 695 url_loader_client_.RunUntilComplete(); | 744 url_loader_client_.RunUntilComplete(); |
| 696 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 745 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 697 EXPECT_EQ(net::ERR_FAILED, url_loader_client_.completion_status().error_code); | 746 EXPECT_EQ(net::ERR_FAILED, url_loader_client_.completion_status().error_code); |
| 698 | 747 |
| 699 while (true) { | 748 while (true) { |
| 700 char buf[16]; | 749 char buf[16]; |
| 701 uint32_t read_size = sizeof(buf); | 750 uint32_t read_size = sizeof(buf); |
| 702 MojoResult result = | 751 MojoResult result = |
| 703 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 752 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
| 704 MOJO_READ_DATA_FLAG_NONE); | 753 MOJO_READ_DATA_FLAG_NONE); |
| 705 if (result == MOJO_RESULT_FAILED_PRECONDITION) | 754 if (result == MOJO_RESULT_FAILED_PRECONDITION) |
| 706 break; | 755 break; |
| 707 ASSERT_EQ(MOJO_RESULT_SHOULD_WAIT, result); | 756 ASSERT_EQ(MOJO_RESULT_SHOULD_WAIT, result); |
| 708 base::RunLoop().RunUntilIdle(); | 757 base::RunLoop().RunUntilIdle(); |
| 709 } | 758 } |
| 710 } | 759 } |
| 711 | 760 |
| 712 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteFailsOnWillRead) { | 761 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteFailsOnWillRead) { |
| 762 SetUpRequest(); | |
| 713 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); | 763 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); |
| 714 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 764 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 715 ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead(-1)); | 765 ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead(-1)); |
| 716 } | 766 } |
| 717 | 767 |
| 718 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteReturnsShouldWaitOnWillRead) { | 768 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteReturnsShouldWaitOnWillRead) { |
| 769 SetUpRequest(); | |
| 719 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 770 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
| 720 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 771 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 721 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 772 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 722 } | 773 } |
| 723 | 774 |
| 724 TEST_F(MojoAsyncResourceHandlerTest, | 775 TEST_F(MojoAsyncResourceHandlerTest, |
| 725 BeginWriteReturnsShouldWaitOnWillReadAndThenReturnsOK) { | 776 BeginWriteReturnsShouldWaitOnWillReadAndThenReturnsOK) { |
| 777 SetUpRequest(); | |
| 726 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 778 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
| 727 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 779 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 728 size_t written = 0; | 780 size_t written = 0; |
| 729 while (true) { | 781 while (true) { |
| 730 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 782 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 731 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( | 783 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( |
| 732 std::string(mock_loader_->io_buffer_size(), 'X')); | 784 std::string(mock_loader_->io_buffer_size(), 'X')); |
| 733 written += mock_loader_->io_buffer_size(); | 785 written += mock_loader_->io_buffer_size(); |
| 734 if (result == MockResourceLoader::Status::CALLBACK_PENDING) | 786 if (result == MockResourceLoader::Status::CALLBACK_PENDING) |
| 735 break; | 787 break; |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 753 actual.append(buf, read_size); | 805 actual.append(buf, read_size); |
| 754 base::RunLoop().RunUntilIdle(); | 806 base::RunLoop().RunUntilIdle(); |
| 755 } | 807 } |
| 756 | 808 |
| 757 EXPECT_EQ(std::string(written, 'X'), actual); | 809 EXPECT_EQ(std::string(written, 'X'), actual); |
| 758 EXPECT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->status()); | 810 EXPECT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->status()); |
| 759 } | 811 } |
| 760 | 812 |
| 761 TEST_F(MojoAsyncResourceHandlerTest, | 813 TEST_F(MojoAsyncResourceHandlerTest, |
| 762 EndWriteFailsOnWillReadWithInsufficientInitialCapacity) { | 814 EndWriteFailsOnWillReadWithInsufficientInitialCapacity) { |
| 815 SetUpRequest(); | |
| 763 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); | 816 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); |
| 764 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 817 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 765 handler_->set_end_write_expectation(MOJO_RESULT_UNKNOWN); | 818 handler_->set_end_write_expectation(MOJO_RESULT_UNKNOWN); |
| 766 ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead(-1)); | 819 ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead(-1)); |
| 767 } | 820 } |
| 768 | 821 |
| 769 TEST_F(MojoAsyncResourceHandlerTest, EndWriteFailsOnReadCompleted) { | 822 TEST_F(MojoAsyncResourceHandlerTest, EndWriteFailsOnReadCompleted) { |
| 823 SetUpRequest(); | |
| 770 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 824 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 771 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 825 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 772 | 826 |
| 773 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 827 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
| 774 ASSERT_EQ(MockResourceLoader::Status::CANCELED, | 828 ASSERT_EQ(MockResourceLoader::Status::CANCELED, |
| 775 mock_loader_->OnReadCompleted( | 829 mock_loader_->OnReadCompleted( |
| 776 std::string(mock_loader_->io_buffer_size(), 'w'))); | 830 std::string(mock_loader_->io_buffer_size(), 'w'))); |
| 777 } | 831 } |
| 778 | 832 |
| 779 TEST_F(MojoAsyncResourceHandlerTest, | 833 TEST_F(MojoAsyncResourceHandlerTest, |
| 780 EndWriteFailsOnReadCompletedWithInsufficientInitialCapacity) { | 834 EndWriteFailsOnReadCompletedWithInsufficientInitialCapacity) { |
| 835 SetUpRequest(); | |
| 781 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); | 836 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); |
| 782 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 837 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 783 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 838 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 784 | 839 |
| 785 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 840 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
| 786 ASSERT_EQ(MockResourceLoader::Status::CANCELED, | 841 ASSERT_EQ(MockResourceLoader::Status::CANCELED, |
| 787 mock_loader_->OnReadCompleted( | 842 mock_loader_->OnReadCompleted( |
| 788 std::string(mock_loader_->io_buffer_size(), 'w'))); | 843 std::string(mock_loader_->io_buffer_size(), 'w'))); |
| 789 } | 844 } |
| 790 | 845 |
| 791 TEST_F(MojoAsyncResourceHandlerTest, | 846 TEST_F(MojoAsyncResourceHandlerTest, |
| 792 EndWriteFailsOnResumeWithInsufficientInitialCapacity) { | 847 EndWriteFailsOnResumeWithInsufficientInitialCapacity) { |
| 848 SetUpRequest(); | |
| 793 MojoAsyncResourceHandler::SetAllocationSizeForTesting(8); | 849 MojoAsyncResourceHandler::SetAllocationSizeForTesting(8); |
| 794 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 850 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 795 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 851 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 796 url_loader_client_.RunUntilResponseBodyArrived(); | 852 url_loader_client_.RunUntilResponseBodyArrived(); |
| 797 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 853 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 798 | 854 |
| 799 while (true) { | 855 while (true) { |
| 800 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( | 856 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( |
| 801 std::string(mock_loader_->io_buffer_size(), 'A')); | 857 std::string(mock_loader_->io_buffer_size(), 'A')); |
| 802 if (result == MockResourceLoader::Status::CALLBACK_PENDING) | 858 if (result == MockResourceLoader::Status::CALLBACK_PENDING) |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 817 ASSERT_EQ(MOJO_RESULT_OK, result); | 873 ASSERT_EQ(MOJO_RESULT_OK, result); |
| 818 } | 874 } |
| 819 | 875 |
| 820 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 876 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
| 821 mock_loader_->WaitUntilIdleOrCanceled(); | 877 mock_loader_->WaitUntilIdleOrCanceled(); |
| 822 EXPECT_FALSE(url_loader_client_.has_received_completion()); | 878 EXPECT_FALSE(url_loader_client_.has_received_completion()); |
| 823 EXPECT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->status()); | 879 EXPECT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->status()); |
| 824 EXPECT_EQ(net::ERR_FAILED, mock_loader_->error_code()); | 880 EXPECT_EQ(net::ERR_FAILED, mock_loader_->error_code()); |
| 825 } | 881 } |
| 826 | 882 |
| 883 TEST_F(MojoAsyncResourceHandlerTest, UploadProgressHandling) { | |
| 884 net::URLRequestMockDataJob::AddUrlHandlerForHostname("foo"); | |
| 885 FakeUploadDataStream* upload = new FakeUploadDataStream(0, 1000); | |
| 886 SetUpRequestWithUpload(base::WrapUnique(upload)); | |
| 887 request_->Start(); | |
| 888 | |
| 889 net::UploadProgress progress = request_->GetUploadProgress(); | |
| 890 EXPECT_EQ(0u, progress.position()); | |
| 891 EXPECT_EQ(1000u, progress.size()); | |
| 892 | |
| 893 EXPECT_EQ(0, url_loader_client_.current_upload_position()); | |
| 894 EXPECT_EQ(0, url_loader_client_.total_upload_size()); | |
| 895 | |
| 896 upload->set_position(1000); | |
| 897 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | |
|
mmenke
2017/01/18 17:00:46
So there are three paths to update the status, so
tzik
2017/01/19 11:53:09
Done.
| |
| 898 base::RunLoop().RunUntilIdle(); | |
| 899 | |
| 900 EXPECT_EQ(1000, url_loader_client_.current_upload_position()); | |
| 901 EXPECT_EQ(1000, url_loader_client_.total_upload_size()); | |
| 902 } | |
| 903 | |
| 827 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 904 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 828 OnWillReadWithLongContents) { | 905 OnWillReadWithLongContents) { |
| 906 SetUpRequest(); | |
| 829 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 907 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 830 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 908 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 831 std::string expected; | 909 std::string expected; |
| 832 for (int i = 0; i < 3 * mock_loader_->io_buffer_size() + 2; ++i) | 910 for (int i = 0; i < 3 * mock_loader_->io_buffer_size() + 2; ++i) |
| 833 expected += ('A' + i % 26); | 911 expected += ('A' + i % 26); |
| 834 | 912 |
| 835 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnReadCompleted(0)); | 913 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnReadCompleted(0)); |
| 836 | 914 |
| 837 url_loader_client_.RunUntilResponseBodyArrived(); | 915 url_loader_client_.RunUntilResponseBodyArrived(); |
| 838 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 916 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 867 | 945 |
| 868 // Give mojo a chance pass data back and forth, and to request more data | 946 // Give mojo a chance pass data back and forth, and to request more data |
| 869 // from the handler. | 947 // from the handler. |
| 870 base::RunLoop().RunUntilIdle(); | 948 base::RunLoop().RunUntilIdle(); |
| 871 } | 949 } |
| 872 EXPECT_EQ(expected, actual); | 950 EXPECT_EQ(expected, actual); |
| 873 } | 951 } |
| 874 | 952 |
| 875 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 953 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 876 BeginWriteFailsOnReadCompleted) { | 954 BeginWriteFailsOnReadCompleted) { |
| 955 SetUpRequest(); | |
| 877 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 956 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 878 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 957 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 879 | 958 |
| 880 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); | 959 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); |
| 881 ASSERT_EQ(MockResourceLoader::Status::CANCELED, | 960 ASSERT_EQ(MockResourceLoader::Status::CANCELED, |
| 882 mock_loader_->OnReadCompleted( | 961 mock_loader_->OnReadCompleted( |
| 883 std::string(mock_loader_->io_buffer_size(), 'A'))); | 962 std::string(mock_loader_->io_buffer_size(), 'A'))); |
| 884 } | 963 } |
| 885 | 964 |
| 886 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 965 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 887 BeginWriteReturnsShouldWaitOnReadCompleted) { | 966 BeginWriteReturnsShouldWaitOnReadCompleted) { |
| 967 SetUpRequest(); | |
| 888 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 968 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 889 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 969 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 890 | 970 |
| 891 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 971 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
| 892 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, | 972 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, |
| 893 mock_loader_->OnReadCompleted( | 973 mock_loader_->OnReadCompleted( |
| 894 std::string(mock_loader_->io_buffer_size(), 'A'))); | 974 std::string(mock_loader_->io_buffer_size(), 'A'))); |
| 895 } | 975 } |
| 896 | 976 |
| 897 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 977 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 898 BeginWriteFailsOnResume) { | 978 BeginWriteFailsOnResume) { |
| 979 SetUpRequest(); | |
| 899 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 980 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 900 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 981 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 901 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnReadCompleted(0)); | 982 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnReadCompleted(0)); |
| 902 url_loader_client_.RunUntilResponseBodyArrived(); | 983 url_loader_client_.RunUntilResponseBodyArrived(); |
| 903 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 984 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 904 | 985 |
| 905 while (true) { | 986 while (true) { |
| 906 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 987 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 907 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( | 988 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( |
| 908 std::string(mock_loader_->io_buffer_size(), 'A')); | 989 std::string(mock_loader_->io_buffer_size(), 'A')); |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 920 MOJO_READ_DATA_FLAG_NONE); | 1001 MOJO_READ_DATA_FLAG_NONE); |
| 921 ASSERT_TRUE(result == MOJO_RESULT_OK || result == MOJO_RESULT_SHOULD_WAIT); | 1002 ASSERT_TRUE(result == MOJO_RESULT_OK || result == MOJO_RESULT_SHOULD_WAIT); |
| 922 base::RunLoop().RunUntilIdle(); | 1003 base::RunLoop().RunUntilIdle(); |
| 923 } | 1004 } |
| 924 | 1005 |
| 925 EXPECT_FALSE(url_loader_client_.has_received_completion()); | 1006 EXPECT_FALSE(url_loader_client_.has_received_completion()); |
| 926 EXPECT_EQ(net::ERR_FAILED, mock_loader_->error_code()); | 1007 EXPECT_EQ(net::ERR_FAILED, mock_loader_->error_code()); |
| 927 } | 1008 } |
| 928 | 1009 |
| 929 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, CancelWhileWaiting) { | 1010 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, CancelWhileWaiting) { |
| 1011 SetUpRequest(); | |
| 930 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 1012 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 931 | 1013 |
| 932 while (true) { | 1014 while (true) { |
| 933 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 1015 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 934 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( | 1016 MockResourceLoader::Status result = mock_loader_->OnReadCompleted( |
| 935 std::string(mock_loader_->io_buffer_size(), 'A')); | 1017 std::string(mock_loader_->io_buffer_size(), 'A')); |
| 936 if (result == MockResourceLoader::Status::CALLBACK_PENDING) | 1018 if (result == MockResourceLoader::Status::CALLBACK_PENDING) |
| 937 break; | 1019 break; |
| 938 ASSERT_EQ(MockResourceLoader::Status::IDLE, result); | 1020 ASSERT_EQ(MockResourceLoader::Status::IDLE, result); |
| 939 } | 1021 } |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 961 if (result == MOJO_RESULT_FAILED_PRECONDITION) | 1043 if (result == MOJO_RESULT_FAILED_PRECONDITION) |
| 962 break; | 1044 break; |
| 963 base::RunLoop().RunUntilIdle(); | 1045 base::RunLoop().RunUntilIdle(); |
| 964 DCHECK(result == MOJO_RESULT_SHOULD_WAIT || result == MOJO_RESULT_OK); | 1046 DCHECK(result == MOJO_RESULT_SHOULD_WAIT || result == MOJO_RESULT_OK); |
| 965 } | 1047 } |
| 966 | 1048 |
| 967 base::RunLoop().RunUntilIdle(); | 1049 base::RunLoop().RunUntilIdle(); |
| 968 } | 1050 } |
| 969 | 1051 |
| 970 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, RedirectHandling) { | 1052 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, RedirectHandling) { |
| 1053 SetUpRequest(); | |
| 971 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 1054 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
| 972 | 1055 |
| 973 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 1056 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 974 mock_loader_->OnWillStart(request_->url())); | 1057 mock_loader_->OnWillStart(request_->url())); |
| 975 | 1058 |
| 976 net::RedirectInfo redirect_info; | 1059 net::RedirectInfo redirect_info; |
| 977 redirect_info.status_code = 301; | 1060 redirect_info.status_code = 301; |
| 978 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, | 1061 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, |
| 979 mock_loader_->OnRequestRedirected( | 1062 mock_loader_->OnRequestRedirected( |
| 980 redirect_info, make_scoped_refptr(new ResourceResponse()))); | 1063 redirect_info, make_scoped_refptr(new ResourceResponse()))); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1026 | 1109 |
| 1027 ASSERT_TRUE(url_loader_client_.has_received_response()); | 1110 ASSERT_TRUE(url_loader_client_.has_received_response()); |
| 1028 ASSERT_TRUE(url_loader_client_.has_received_completion()); | 1111 ASSERT_TRUE(url_loader_client_.has_received_completion()); |
| 1029 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 1112 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
| 1030 } | 1113 } |
| 1031 | 1114 |
| 1032 // Test the case where th other process tells the ResourceHandler to follow a | 1115 // Test the case where th other process tells the ResourceHandler to follow a |
| 1033 // redirect, despite the fact that no redirect has been received yet. | 1116 // redirect, despite the fact that no redirect has been received yet. |
| 1034 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 1117 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1035 MalformedFollowRedirectRequest) { | 1118 MalformedFollowRedirectRequest) { |
| 1119 SetUpRequest(); | |
| 1036 handler_->FollowRedirect(); | 1120 handler_->FollowRedirect(); |
| 1037 | 1121 |
| 1038 EXPECT_TRUE(handler_->has_received_bad_message()); | 1122 EXPECT_TRUE(handler_->has_received_bad_message()); |
| 1039 } | 1123 } |
| 1040 | 1124 |
| 1041 // Typically ResourceHandler methods are called in this order. | 1125 // Typically ResourceHandler methods are called in this order. |
| 1042 TEST_P( | 1126 TEST_P( |
| 1043 MojoAsyncResourceHandlerWithAllocationSizeTest, | 1127 MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1044 OnWillStartThenOnResponseStartedThenOnWillReadThenOnReadCompletedThenOnRespo nseCompleted) { | 1128 OnWillStartThenOnResponseStartedThenOnWillReadThenOnReadCompletedThenOnRespo nseCompleted) { |
| 1129 SetUpRequest(); | |
| 1045 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 1130 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
| 1046 | 1131 |
| 1047 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 1132 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 1048 mock_loader_->OnWillStart(request_->url())); | 1133 mock_loader_->OnWillStart(request_->url())); |
| 1049 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 1134 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 1050 mock_loader_->OnResponseStarted( | 1135 mock_loader_->OnResponseStarted( |
| 1051 make_scoped_refptr(new ResourceResponse()))); | 1136 make_scoped_refptr(new ResourceResponse()))); |
| 1052 | 1137 |
| 1053 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1138 ASSERT_FALSE(url_loader_client_.has_received_response()); |
| 1054 url_loader_client_.RunUntilResponseReceived(); | 1139 url_loader_client_.RunUntilResponseReceived(); |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 1085 body.append(buffer, read_size); | 1170 body.append(buffer, read_size); |
| 1086 } | 1171 } |
| 1087 } | 1172 } |
| 1088 EXPECT_EQ("A", body); | 1173 EXPECT_EQ("A", body); |
| 1089 } | 1174 } |
| 1090 | 1175 |
| 1091 // MimeResourceHandler calls delegated ResourceHandler's methods in this order. | 1176 // MimeResourceHandler calls delegated ResourceHandler's methods in this order. |
| 1092 TEST_P( | 1177 TEST_P( |
| 1093 MojoAsyncResourceHandlerWithAllocationSizeTest, | 1178 MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1094 OnWillStartThenOnWillReadThenOnResponseStartedThenOnReadCompletedThenOnRespo nseCompleted) { | 1179 OnWillStartThenOnWillReadThenOnResponseStartedThenOnReadCompletedThenOnRespo nseCompleted) { |
| 1180 SetUpRequest(); | |
| 1095 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 1181 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
| 1096 | 1182 |
| 1097 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 1183 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 1098 mock_loader_->OnWillStart(request_->url())); | 1184 mock_loader_->OnWillStart(request_->url())); |
| 1099 | 1185 |
| 1100 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); | 1186 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead(-1)); |
| 1101 | 1187 |
| 1102 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); | 1188 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); |
| 1103 url_loader_client_.RunUntilResponseBodyArrived(); | 1189 url_loader_client_.RunUntilResponseBodyArrived(); |
| 1104 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 1190 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1137 } | 1223 } |
| 1138 } | 1224 } |
| 1139 EXPECT_EQ("B", body); | 1225 EXPECT_EQ("B", body); |
| 1140 } | 1226 } |
| 1141 | 1227 |
| 1142 INSTANTIATE_TEST_CASE_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 1228 INSTANTIATE_TEST_CASE_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1143 MojoAsyncResourceHandlerWithAllocationSizeTest, | 1229 MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1144 ::testing::Values(8, 32 * 2014)); | 1230 ::testing::Values(8, 32 * 2014)); |
| 1145 } // namespace | 1231 } // namespace |
| 1146 } // namespace content | 1232 } // namespace content |
| OLD | NEW |