| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/loader/mojo_async_resource_handler.h" | 5 #include "content/browser/loader/mojo_async_resource_handler.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/callback.h" | 12 #include "base/callback.h" |
| 13 #include "base/files/file_path.h" | 13 #include "base/files/file_path.h" |
| 14 #include "base/memory/ptr_util.h" | 14 #include "base/memory/ptr_util.h" |
| 15 #include "base/memory/scoped_vector.h" | 15 #include "base/memory/scoped_vector.h" |
| 16 #include "base/memory/weak_ptr.h" | 16 #include "base/memory/weak_ptr.h" |
| 17 #include "base/run_loop.h" | 17 #include "base/run_loop.h" |
| 18 #include "content/browser/loader/resource_controller.h" | 18 #include "content/browser/loader/resource_controller.h" |
| 19 #include "content/browser/loader/resource_dispatcher_host_impl.h" | 19 #include "content/browser/loader/resource_dispatcher_host_impl.h" |
| 20 #include "content/browser/loader/resource_request_info_impl.h" | 20 #include "content/browser/loader/resource_request_info_impl.h" |
| 21 #include "content/browser/loader/test_resource_handler_wrapper.h" |
| 21 #include "content/browser/loader/test_url_loader_client.h" | 22 #include "content/browser/loader/test_url_loader_client.h" |
| 22 #include "content/common/resource_request_completion_status.h" | 23 #include "content/common/resource_request_completion_status.h" |
| 23 #include "content/common/url_loader.mojom.h" | 24 #include "content/common/url_loader.mojom.h" |
| 24 #include "content/public/browser/appcache_service.h" | 25 #include "content/public/browser/appcache_service.h" |
| 25 #include "content/public/browser/navigation_data.h" | 26 #include "content/public/browser/navigation_data.h" |
| 26 #include "content/public/browser/resource_context.h" | 27 #include "content/public/browser/resource_context.h" |
| 27 #include "content/public/browser/resource_dispatcher_host_delegate.h" | 28 #include "content/public/browser/resource_dispatcher_host_delegate.h" |
| 28 #include "content/public/browser/resource_throttle.h" | 29 #include "content/public/browser/resource_throttle.h" |
| 29 #include "content/public/browser/stream_info.h" | 30 #include "content/public/browser/stream_info.h" |
| 30 #include "content/public/common/resource_response.h" | 31 #include "content/public/common/resource_response.h" |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 num_on_response_started_calls_expectation_ = expectation; | 167 num_on_response_started_calls_expectation_ = expectation; |
| 167 } | 168 } |
| 168 | 169 |
| 169 private: | 170 private: |
| 170 int num_on_response_started_calls_ = 0; | 171 int num_on_response_started_calls_ = 0; |
| 171 int num_on_response_started_calls_expectation_ = 0; | 172 int num_on_response_started_calls_expectation_ = 0; |
| 172 | 173 |
| 173 DISALLOW_COPY_AND_ASSIGN(TestResourceDispatcherHostDelegate); | 174 DISALLOW_COPY_AND_ASSIGN(TestResourceDispatcherHostDelegate); |
| 174 }; | 175 }; |
| 175 | 176 |
| 176 class TestResourceController : public ResourceController { | |
| 177 public: | |
| 178 TestResourceController() {} | |
| 179 ~TestResourceController() override {} | |
| 180 | |
| 181 void Cancel() override { ADD_FAILURE() << "Cancel should not be called."; } | |
| 182 | |
| 183 void CancelAndIgnore() override { | |
| 184 ADD_FAILURE() << "CancelAndIgnore should not be called."; | |
| 185 } | |
| 186 | |
| 187 void CancelWithError(int error_code) override { | |
| 188 // While cancelling more than once is legal, none of these tests should do | |
| 189 // it. | |
| 190 EXPECT_FALSE(is_cancel_with_error_called_); | |
| 191 | |
| 192 is_cancel_with_error_called_ = true; | |
| 193 error_ = error_code; | |
| 194 if (quit_closure_) | |
| 195 quit_closure_.Run(); | |
| 196 } | |
| 197 | |
| 198 void Resume() override { ++num_resume_calls_; } | |
| 199 | |
| 200 void RunUntilCancelWithErrorCalled() { | |
| 201 base::RunLoop run_loop; | |
| 202 quit_closure_ = run_loop.QuitClosure(); | |
| 203 run_loop.Run(); | |
| 204 } | |
| 205 | |
| 206 void set_quit_closure(const base::Closure& quit_closure) { | |
| 207 quit_closure_ = quit_closure; | |
| 208 } | |
| 209 | |
| 210 bool is_cancel_with_error_called() const { | |
| 211 return is_cancel_with_error_called_; | |
| 212 } | |
| 213 int error() const { return error_; } | |
| 214 int num_resume_calls() const { return num_resume_calls_; } | |
| 215 | |
| 216 private: | |
| 217 bool is_cancel_with_error_called_ = false; | |
| 218 int error_ = net::OK; | |
| 219 int num_resume_calls_ = 0; | |
| 220 base::Closure quit_closure_; | |
| 221 | |
| 222 DISALLOW_COPY_AND_ASSIGN(TestResourceController); | |
| 223 }; | |
| 224 | |
| 225 class MojoAsyncResourceHandlerWithCustomDataPipeOperations | 177 class MojoAsyncResourceHandlerWithCustomDataPipeOperations |
| 226 : public MojoAsyncResourceHandler { | 178 : public MojoAsyncResourceHandler { |
| 227 public: | 179 public: |
| 228 MojoAsyncResourceHandlerWithCustomDataPipeOperations( | 180 MojoAsyncResourceHandlerWithCustomDataPipeOperations( |
| 229 net::URLRequest* request, | 181 net::URLRequest* request, |
| 230 ResourceDispatcherHostImpl* rdh, | 182 ResourceDispatcherHostImpl* rdh, |
| 231 mojom::URLLoaderAssociatedRequest mojo_request, | 183 mojom::URLLoaderAssociatedRequest mojo_request, |
| 232 mojom::URLLoaderClientAssociatedPtr url_loader_client) | 184 mojom::URLLoaderClientAssociatedPtr url_loader_client) |
| 233 : MojoAsyncResourceHandler(request, | 185 : MojoAsyncResourceHandler(request, |
| 234 rdh, | 186 rdh, |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 url_loader_factory_.FlushForTesting(); | 304 url_loader_factory_.FlushForTesting(); |
| 353 DCHECK(weak_binding); | 305 DCHECK(weak_binding); |
| 354 TestURLLoaderFactory* factory_impl = | 306 TestURLLoaderFactory* factory_impl = |
| 355 static_cast<TestURLLoaderFactory*>(weak_binding->impl()); | 307 static_cast<TestURLLoaderFactory*>(weak_binding->impl()); |
| 356 | 308 |
| 357 mojom::URLLoaderClientAssociatedPtr client_ptr; | 309 mojom::URLLoaderClientAssociatedPtr client_ptr; |
| 358 client_ptr.Bind(factory_impl->PassClientPtrInfo()); | 310 client_ptr.Bind(factory_impl->PassClientPtrInfo()); |
| 359 handler_.reset(new MojoAsyncResourceHandlerWithCustomDataPipeOperations( | 311 handler_.reset(new MojoAsyncResourceHandlerWithCustomDataPipeOperations( |
| 360 request_.get(), &rdh_, factory_impl->PassLoaderRequest(), | 312 request_.get(), &rdh_, factory_impl->PassLoaderRequest(), |
| 361 std::move(client_ptr))); | 313 std::move(client_ptr))); |
| 362 handler_->SetController(&resource_controller_); | 314 handler_wrapper_.reset(new TestResourceHandlerWrapper(handler_.get())); |
| 363 } | 315 } |
| 364 | 316 |
| 365 virtual ~MojoAsyncResourceHandlerTestBase() { | 317 virtual ~MojoAsyncResourceHandlerTestBase() { |
| 366 net::URLRequestFilter::GetInstance()->ClearHandlers(); | 318 net::URLRequestFilter::GetInstance()->ClearHandlers(); |
| 367 MojoAsyncResourceHandler::SetAllocationSizeForTesting( | 319 MojoAsyncResourceHandler::SetAllocationSizeForTesting( |
| 368 MojoAsyncResourceHandler::kDefaultAllocationSize); | 320 MojoAsyncResourceHandler::kDefaultAllocationSize); |
| 369 base::RunLoop().RunUntilIdle(); | 321 base::RunLoop().RunUntilIdle(); |
| 370 } | 322 } |
| 371 | 323 |
| 372 // Returns false if something bad happens. | 324 // Returns false if something bad happens. |
| 373 bool CallOnWillStart() { | |
| 374 bool defer = false; | |
| 375 if (!handler_->OnWillStart(request_->url(), &defer)) { | |
| 376 ADD_FAILURE() << "OnWillStart returns false."; | |
| 377 return false; | |
| 378 } | |
| 379 if (defer) { | |
| 380 ADD_FAILURE() << "OnWillStart sets |defer| true."; | |
| 381 return false; | |
| 382 } | |
| 383 return true; | |
| 384 } | |
| 385 | |
| 386 // Returns false if something bad happens. | |
| 387 bool CallOnWillStartAndOnResponseStarted() { | 325 bool CallOnWillStartAndOnResponseStarted() { |
| 388 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 326 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
| 389 if (!CallOnWillStart()) | 327 TestResourceHandlerWrapper::Result result = |
| 328 handler_wrapper_->OnWillStart(request_->url()); |
| 329 EXPECT_EQ(TestResourceHandlerWrapper::Result::RESUME, result); |
| 330 if (result != TestResourceHandlerWrapper::Result::RESUME) |
| 390 return false; | 331 return false; |
| 391 | 332 |
| 392 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 333 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
| 393 bool defer = false; | 334 result = handler_wrapper_->OnResponseStarted(response.get()); |
| 394 if (!handler_->OnResponseStarted(response.get(), &defer)) { | 335 EXPECT_EQ(TestResourceHandlerWrapper::Result::RESUME, result); |
| 395 ADD_FAILURE() << "OnResponseStarted returns false."; | 336 if (result != TestResourceHandlerWrapper::Result::RESUME) |
| 396 return false; | 337 return false; |
| 397 } | 338 |
| 398 if (defer) { | |
| 399 ADD_FAILURE() << "OnResponseStarted sets |defer| true."; | |
| 400 return false; | |
| 401 } | |
| 402 if (url_loader_client_.has_received_response()) { | 339 if (url_loader_client_.has_received_response()) { |
| 403 ADD_FAILURE() << "URLLoaderClient unexpectedly gets a response."; | 340 ADD_FAILURE() << "URLLoaderClient unexpectedly gets a response."; |
| 404 return false; | 341 return false; |
| 405 } | 342 } |
| 406 url_loader_client_.RunUntilResponseReceived(); | 343 url_loader_client_.RunUntilResponseReceived(); |
| 407 return true; | 344 return true; |
| 408 } | 345 } |
| 409 | 346 |
| 410 TestBrowserThreadBundle thread_bundle_; | 347 TestBrowserThreadBundle thread_bundle_; |
| 411 TestResourceDispatcherHostDelegate rdh_delegate_; | 348 TestResourceDispatcherHostDelegate rdh_delegate_; |
| 412 ResourceDispatcherHostImpl rdh_; | 349 ResourceDispatcherHostImpl rdh_; |
| 413 mojom::URLLoaderFactoryPtr url_loader_factory_; | 350 mojom::URLLoaderFactoryPtr url_loader_factory_; |
| 414 mojom::URLLoaderAssociatedPtr url_loader_proxy_; | 351 mojom::URLLoaderAssociatedPtr url_loader_proxy_; |
| 415 TestURLLoaderClient url_loader_client_; | 352 TestURLLoaderClient url_loader_client_; |
| 416 TestResourceController resource_controller_; | |
| 417 std::unique_ptr<TestBrowserContext> browser_context_; | 353 std::unique_ptr<TestBrowserContext> browser_context_; |
| 418 std::unique_ptr<net::TestDelegate> url_request_delegate_; | 354 std::unique_ptr<net::TestDelegate> url_request_delegate_; |
| 419 std::unique_ptr<net::URLRequest> request_; | 355 std::unique_ptr<net::URLRequest> request_; |
| 420 std::unique_ptr<MojoAsyncResourceHandlerWithCustomDataPipeOperations> | 356 std::unique_ptr<MojoAsyncResourceHandlerWithCustomDataPipeOperations> |
| 421 handler_; | 357 handler_; |
| 358 std::unique_ptr<TestResourceHandlerWrapper> handler_wrapper_; |
| 422 | 359 |
| 423 DISALLOW_COPY_AND_ASSIGN(MojoAsyncResourceHandlerTestBase); | 360 DISALLOW_COPY_AND_ASSIGN(MojoAsyncResourceHandlerTestBase); |
| 424 }; | 361 }; |
| 425 | 362 |
| 426 class MojoAsyncResourceHandlerTest : public MojoAsyncResourceHandlerTestBase, | 363 class MojoAsyncResourceHandlerTest : public MojoAsyncResourceHandlerTestBase, |
| 427 public ::testing::Test {}; | 364 public ::testing::Test {}; |
| 428 | 365 |
| 429 // This test class is parameterized with MojoAsyncResourceHandler's allocation | 366 // This test class is parameterized with MojoAsyncResourceHandler's allocation |
| 430 // size. | 367 // size. |
| 431 class MojoAsyncResourceHandlerWithAllocationSizeTest | 368 class MojoAsyncResourceHandlerWithAllocationSizeTest |
| 432 : public MojoAsyncResourceHandlerTestBase, | 369 : public MojoAsyncResourceHandlerTestBase, |
| 433 public ::testing::TestWithParam<size_t> { | 370 public ::testing::TestWithParam<size_t> { |
| 434 protected: | 371 protected: |
| 435 MojoAsyncResourceHandlerWithAllocationSizeTest() { | 372 MojoAsyncResourceHandlerWithAllocationSizeTest() { |
| 436 MojoAsyncResourceHandler::SetAllocationSizeForTesting(GetParam()); | 373 MojoAsyncResourceHandler::SetAllocationSizeForTesting(GetParam()); |
| 437 } | 374 } |
| 438 }; | 375 }; |
| 439 | 376 |
| 440 TEST_F(MojoAsyncResourceHandlerTest, InFlightRequests) { | 377 TEST_F(MojoAsyncResourceHandlerTest, InFlightRequests) { |
| 441 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 378 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
| 442 handler_ = nullptr; | 379 handler_ = nullptr; |
| 443 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 380 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
| 444 } | 381 } |
| 445 | 382 |
| 446 TEST_F(MojoAsyncResourceHandlerTest, OnWillStart) { | 383 TEST_F(MojoAsyncResourceHandlerTest, OnWillStart) { |
| 447 bool defer = false; | 384 EXPECT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 448 EXPECT_TRUE(handler_->OnWillStart(request_->url(), &defer)); | 385 handler_wrapper_->OnWillStart(request_->url())); |
| 449 EXPECT_FALSE(defer); | |
| 450 } | 386 } |
| 451 | 387 |
| 452 TEST_F(MojoAsyncResourceHandlerTest, OnResponseStarted) { | 388 TEST_F(MojoAsyncResourceHandlerTest, OnResponseStarted) { |
| 453 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 389 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
| 454 ASSERT_TRUE(CallOnWillStart()); | 390 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 391 handler_wrapper_->OnWillStart(request_->url())); |
| 455 | 392 |
| 456 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 393 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
| 457 response->head.content_length = 99; | 394 response->head.content_length = 99; |
| 458 response->head.request_start = | 395 response->head.request_start = |
| 459 base::TimeTicks::UnixEpoch() + base::TimeDelta::FromDays(14); | 396 base::TimeTicks::UnixEpoch() + base::TimeDelta::FromDays(14); |
| 460 response->head.response_start = | 397 response->head.response_start = |
| 461 base::TimeTicks::UnixEpoch() + base::TimeDelta::FromDays(28); | 398 base::TimeTicks::UnixEpoch() + base::TimeDelta::FromDays(28); |
| 462 | 399 |
| 463 bool defer = false; | |
| 464 | |
| 465 EXPECT_EQ(0, rdh_delegate_.num_on_response_started_calls()); | 400 EXPECT_EQ(0, rdh_delegate_.num_on_response_started_calls()); |
| 466 base::TimeTicks now1 = base::TimeTicks::Now(); | 401 base::TimeTicks now1 = base::TimeTicks::Now(); |
| 467 ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer)); | 402 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 403 handler_wrapper_->OnResponseStarted(response.get())); |
| 468 base::TimeTicks now2 = base::TimeTicks::Now(); | 404 base::TimeTicks now2 = base::TimeTicks::Now(); |
| 469 | 405 |
| 470 EXPECT_FALSE(defer); | |
| 471 EXPECT_EQ(request_->creation_time(), response->head.request_start); | 406 EXPECT_EQ(request_->creation_time(), response->head.request_start); |
| 472 EXPECT_LE(now1, response->head.response_start); | 407 EXPECT_LE(now1, response->head.response_start); |
| 473 EXPECT_LE(response->head.response_start, now2); | 408 EXPECT_LE(response->head.response_start, now2); |
| 474 EXPECT_EQ(1, rdh_delegate_.num_on_response_started_calls()); | 409 EXPECT_EQ(1, rdh_delegate_.num_on_response_started_calls()); |
| 475 | 410 |
| 476 url_loader_client_.RunUntilResponseReceived(); | 411 url_loader_client_.RunUntilResponseReceived(); |
| 477 EXPECT_EQ(response->head.request_start, | 412 EXPECT_EQ(response->head.request_start, |
| 478 url_loader_client_.response_head().request_start); | 413 url_loader_client_.response_head().request_start); |
| 479 EXPECT_EQ(response->head.response_start, | 414 EXPECT_EQ(response->head.response_start, |
| 480 url_loader_client_.response_head().response_start); | 415 url_loader_client_.response_head().response_start); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 495 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadWithInsufficientResource) { | 430 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadWithInsufficientResource) { |
| 496 rdh_.set_max_num_in_flight_requests_per_process(0); | 431 rdh_.set_max_num_in_flight_requests_per_process(0); |
| 497 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 432 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 498 | 433 |
| 499 scoped_refptr<net::IOBuffer> io_buffer; | 434 scoped_refptr<net::IOBuffer> io_buffer; |
| 500 int io_buffer_size = 0; | 435 int io_buffer_size = 0; |
| 501 EXPECT_FALSE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 436 EXPECT_FALSE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 502 EXPECT_FALSE(io_buffer); | 437 EXPECT_FALSE(io_buffer); |
| 503 EXPECT_EQ(0, io_buffer_size); | 438 EXPECT_EQ(0, io_buffer_size); |
| 504 EXPECT_EQ(1, rdh_.num_in_flight_requests_for_testing()); | 439 EXPECT_EQ(1, rdh_.num_in_flight_requests_for_testing()); |
| 505 EXPECT_TRUE(resource_controller_.is_cancel_with_error_called()); | 440 // TODO(mmenke): Should make sure the class is cancelling with |
| 506 EXPECT_EQ(net::ERR_INSUFFICIENT_RESOURCES, resource_controller_.error()); | 441 // ERR_INSUFFICIENT_RESOURCES here (Which it isn't currently doing). |
| 507 handler_ = nullptr; | 442 handler_ = nullptr; |
| 508 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); | 443 EXPECT_EQ(0, rdh_.num_in_flight_requests_for_testing()); |
| 509 } | 444 } |
| 510 | 445 |
| 511 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndOnReadCompleted) { | 446 TEST_F(MojoAsyncResourceHandlerTest, OnWillReadAndOnReadCompleted) { |
| 512 bool defer = false; | |
| 513 scoped_refptr<net::IOBuffer> io_buffer; | 447 scoped_refptr<net::IOBuffer> io_buffer; |
| 514 int io_buffer_size = 0; | 448 int io_buffer_size = 0; |
| 515 | 449 |
| 516 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 450 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 517 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 451 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 518 ASSERT_TRUE(io_buffer); | 452 ASSERT_TRUE(io_buffer); |
| 519 // The buffer size that the mime sniffer requires implicitly. | 453 // The buffer size that the mime sniffer requires implicitly. |
| 520 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); | 454 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); |
| 521 | 455 |
| 522 url_loader_client_.RunUntilResponseBodyArrived(); | 456 url_loader_client_.RunUntilResponseBodyArrived(); |
| 523 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 457 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 524 | 458 |
| 525 io_buffer->data()[0] = 'A'; | 459 io_buffer->data()[0] = 'A'; |
| 526 io_buffer->data()[1] = 'B'; | 460 io_buffer->data()[1] = 'B'; |
| 527 ASSERT_TRUE(handler_->OnReadCompleted(2, &defer)); | 461 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 528 EXPECT_FALSE(defer); | 462 handler_wrapper_->OnReadCompleted(2)); |
| 529 | 463 |
| 530 std::string contents; | 464 std::string contents; |
| 531 while (contents.size() < 2) { | 465 while (contents.size() < 2) { |
| 532 char buffer[16]; | 466 char buffer[16]; |
| 533 uint32_t read_size = sizeof(buffer); | 467 uint32_t read_size = sizeof(buffer); |
| 534 MojoResult result = | 468 MojoResult result = |
| 535 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, | 469 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, |
| 536 &read_size, MOJO_READ_DATA_FLAG_NONE); | 470 &read_size, MOJO_READ_DATA_FLAG_NONE); |
| 537 if (result == MOJO_RESULT_SHOULD_WAIT) { | 471 if (result == MOJO_RESULT_SHOULD_WAIT) { |
| 538 base::RunLoop().RunUntilIdle(); | 472 base::RunLoop().RunUntilIdle(); |
| 539 continue; | 473 continue; |
| 540 } | 474 } |
| 541 contents.append(buffer, read_size); | 475 contents.append(buffer, read_size); |
| 542 } | 476 } |
| 543 EXPECT_EQ("AB", contents); | 477 EXPECT_EQ("AB", contents); |
| 544 } | 478 } |
| 545 | 479 |
| 546 TEST_F(MojoAsyncResourceHandlerTest, | 480 TEST_F(MojoAsyncResourceHandlerTest, |
| 547 OnWillReadAndOnReadCompletedWithInsufficientInitialCapacity) { | 481 OnWillReadAndOnReadCompletedWithInsufficientInitialCapacity) { |
| 548 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); | 482 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); |
| 549 | 483 |
| 550 bool defer = false; | |
| 551 scoped_refptr<net::IOBuffer> io_buffer; | 484 scoped_refptr<net::IOBuffer> io_buffer; |
| 552 int io_buffer_size = 0; | 485 int io_buffer_size = 0; |
| 553 | 486 |
| 554 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 487 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 555 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 488 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 556 ASSERT_TRUE(io_buffer); | 489 ASSERT_TRUE(io_buffer); |
| 557 // The buffer size that the mime sniffer requires implicitly. | 490 // The buffer size that the mime sniffer requires implicitly. |
| 558 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); | 491 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); |
| 559 | 492 |
| 560 url_loader_client_.RunUntilResponseBodyArrived(); | 493 url_loader_client_.RunUntilResponseBodyArrived(); |
| 561 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 494 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 562 | 495 |
| 563 const std::string data("abcdefgh"); | 496 const std::string data("abcdefgh"); |
| 564 strcpy(io_buffer->data(), data.c_str()); | 497 strcpy(io_buffer->data(), data.c_str()); |
| 565 ASSERT_TRUE(handler_->OnReadCompleted(data.size(), &defer)); | 498 ASSERT_EQ(TestResourceHandlerWrapper::Result::CALLBACK_PENDING, |
| 566 EXPECT_TRUE(defer); | 499 handler_wrapper_->OnReadCompleted(data.size())); |
| 567 | 500 |
| 568 std::string contents; | 501 std::string contents; |
| 569 while (contents.size() < data.size()) { | 502 while (contents.size() < data.size()) { |
| 570 // This is needed for Resume to be called. | 503 // This is needed for Resume to be called. |
| 571 base::RunLoop().RunUntilIdle(); | 504 base::RunLoop().RunUntilIdle(); |
| 572 char buffer[16]; | 505 char buffer[16]; |
| 573 uint32_t read_size = sizeof(buffer); | 506 uint32_t read_size = sizeof(buffer); |
| 574 MojoResult result = | 507 MojoResult result = |
| 575 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, | 508 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, |
| 576 &read_size, MOJO_READ_DATA_FLAG_NONE); | 509 &read_size, MOJO_READ_DATA_FLAG_NONE); |
| 577 if (result == MOJO_RESULT_SHOULD_WAIT) | 510 if (result == MOJO_RESULT_SHOULD_WAIT) |
| 578 continue; | 511 continue; |
| 579 ASSERT_EQ(MOJO_RESULT_OK, result); | 512 ASSERT_EQ(MOJO_RESULT_OK, result); |
| 580 contents.append(buffer, read_size); | 513 contents.append(buffer, read_size); |
| 581 } | 514 } |
| 582 EXPECT_EQ(data, contents); | 515 EXPECT_EQ(data, contents); |
| 583 EXPECT_EQ(0, resource_controller_.num_resume_calls()); | 516 EXPECT_EQ(TestResourceHandlerWrapper::Result::CALLBACK_PENDING, |
| 517 handler_wrapper_->last_result()); |
| 584 } | 518 } |
| 585 | 519 |
| 586 TEST_F(MojoAsyncResourceHandlerTest, | 520 TEST_F(MojoAsyncResourceHandlerTest, |
| 587 IOBufferFromOnWillReadShouldRemainValidEvenIfHandlerIsGone) { | 521 IOBufferFromOnWillReadShouldRemainValidEvenIfHandlerIsGone) { |
| 588 scoped_refptr<net::IOBuffer> io_buffer; | 522 scoped_refptr<net::IOBuffer> io_buffer; |
| 589 int io_buffer_size = 0; | 523 int io_buffer_size = 0; |
| 590 | 524 |
| 591 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 525 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 592 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 526 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 593 ASSERT_TRUE(io_buffer); | 527 ASSERT_TRUE(io_buffer); |
| 594 // The io_buffer size that the mime sniffer requires implicitly. | 528 // The io_buffer size that the mime sniffer requires implicitly. |
| 595 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); | 529 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); |
| 596 | 530 |
| 597 handler_ = nullptr; | 531 handler_ = nullptr; |
| 598 url_loader_client_.Unbind(); | 532 url_loader_client_.Unbind(); |
| 599 base::RunLoop().RunUntilIdle(); | 533 base::RunLoop().RunUntilIdle(); |
| 600 | 534 |
| 601 // Hopefully ASAN checks this operation's validity. | 535 // Hopefully ASAN checks this operation's validity. |
| 602 io_buffer->data()[0] = 'A'; | 536 io_buffer->data()[0] = 'A'; |
| 603 } | 537 } |
| 604 | 538 |
| 605 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted) { | 539 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted) { |
| 606 bool defer = false; | |
| 607 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 540 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 608 | 541 |
| 609 ResourceRequestInfoImpl::ForRequest(request_.get()) | 542 ResourceRequestInfoImpl::ForRequest(request_.get()) |
| 610 ->set_was_ignored_by_handler(false); | 543 ->set_was_ignored_by_handler(false); |
| 611 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 544 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
| 612 | 545 |
| 613 base::TimeTicks now1 = base::TimeTicks::Now(); | 546 base::TimeTicks now1 = base::TimeTicks::Now(); |
| 614 handler_->OnResponseCompleted(status, &defer); | 547 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 548 handler_wrapper_->OnResponseCompleted(status)); |
| 615 base::TimeTicks now2 = base::TimeTicks::Now(); | 549 base::TimeTicks now2 = base::TimeTicks::Now(); |
| 616 EXPECT_FALSE(defer); | |
| 617 | 550 |
| 618 url_loader_client_.RunUntilComplete(); | 551 url_loader_client_.RunUntilComplete(); |
| 619 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 552 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 620 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 553 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
| 621 EXPECT_FALSE(url_loader_client_.completion_status().was_ignored_by_handler); | 554 EXPECT_FALSE(url_loader_client_.completion_status().was_ignored_by_handler); |
| 622 EXPECT_LE(now1, url_loader_client_.completion_status().completion_time); | 555 EXPECT_LE(now1, url_loader_client_.completion_status().completion_time); |
| 623 EXPECT_LE(url_loader_client_.completion_status().completion_time, now2); | 556 EXPECT_LE(url_loader_client_.completion_status().completion_time, now2); |
| 624 EXPECT_EQ(request_->GetTotalReceivedBytes(), | 557 EXPECT_EQ(request_->GetTotalReceivedBytes(), |
| 625 url_loader_client_.completion_status().encoded_data_length); | 558 url_loader_client_.completion_status().encoded_data_length); |
| 626 } | 559 } |
| 627 | 560 |
| 628 // This test case sets different status values from OnResponseCompleted. | 561 // This test case sets different status values from OnResponseCompleted. |
| 629 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted2) { | 562 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompleted2) { |
| 630 rdh_.SetDelegate(nullptr); | 563 rdh_.SetDelegate(nullptr); |
| 631 bool defer = false; | |
| 632 // Don't use CallOnWillStartAndOnResponseStarted as this test case manually | 564 // Don't use CallOnWillStartAndOnResponseStarted as this test case manually |
| 633 // sets the null delegate. | 565 // sets the null delegate. |
| 634 ASSERT_TRUE(CallOnWillStart()); | 566 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 567 handler_wrapper_->OnWillStart(request_->url())); |
| 635 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 568 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
| 636 ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer)); | 569 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 637 ASSERT_FALSE(defer); | 570 handler_wrapper_->OnResponseStarted(response.get())); |
| 638 ASSERT_FALSE(url_loader_client_.has_received_response()); | 571 ASSERT_FALSE(url_loader_client_.has_received_response()); |
| 639 url_loader_client_.RunUntilResponseReceived(); | 572 url_loader_client_.RunUntilResponseReceived(); |
| 640 | 573 |
| 641 ResourceRequestInfoImpl::ForRequest(request_.get()) | 574 ResourceRequestInfoImpl::ForRequest(request_.get()) |
| 642 ->set_was_ignored_by_handler(true); | 575 ->set_was_ignored_by_handler(true); |
| 643 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, | 576 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, |
| 644 net::ERR_ABORTED); | 577 net::ERR_ABORTED); |
| 645 | 578 |
| 646 base::TimeTicks now1 = base::TimeTicks::Now(); | 579 base::TimeTicks now1 = base::TimeTicks::Now(); |
| 647 handler_->OnResponseCompleted(status, &defer); | 580 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 581 handler_wrapper_->OnResponseCompleted(status)); |
| 648 base::TimeTicks now2 = base::TimeTicks::Now(); | 582 base::TimeTicks now2 = base::TimeTicks::Now(); |
| 649 EXPECT_FALSE(defer); | |
| 650 | 583 |
| 651 url_loader_client_.RunUntilComplete(); | 584 url_loader_client_.RunUntilComplete(); |
| 652 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 585 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 653 EXPECT_EQ(net::ERR_ABORTED, | 586 EXPECT_EQ(net::ERR_ABORTED, |
| 654 url_loader_client_.completion_status().error_code); | 587 url_loader_client_.completion_status().error_code); |
| 655 EXPECT_TRUE(url_loader_client_.completion_status().was_ignored_by_handler); | 588 EXPECT_TRUE(url_loader_client_.completion_status().was_ignored_by_handler); |
| 656 EXPECT_LE(now1, url_loader_client_.completion_status().completion_time); | 589 EXPECT_LE(now1, url_loader_client_.completion_status().completion_time); |
| 657 EXPECT_LE(url_loader_client_.completion_status().completion_time, now2); | 590 EXPECT_LE(url_loader_client_.completion_status().completion_time, now2); |
| 658 EXPECT_EQ(request_->GetTotalReceivedBytes(), | 591 EXPECT_EQ(request_->GetTotalReceivedBytes(), |
| 659 url_loader_client_.completion_status().encoded_data_length); | 592 url_loader_client_.completion_status().encoded_data_length); |
| 660 } | 593 } |
| 661 | 594 |
| 662 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithCanceledTimedOut) { | 595 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithCanceledTimedOut) { |
| 663 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, | 596 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, |
| 664 net::ERR_TIMED_OUT); | 597 net::ERR_TIMED_OUT); |
| 665 bool defer = false; | |
| 666 | 598 |
| 667 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 599 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 668 handler_->OnResponseCompleted(status, &defer); | 600 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 669 EXPECT_FALSE(defer); | 601 handler_wrapper_->OnResponseCompleted(status)); |
| 670 | 602 |
| 671 url_loader_client_.RunUntilComplete(); | 603 url_loader_client_.RunUntilComplete(); |
| 672 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 604 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 673 EXPECT_EQ(net::ERR_TIMED_OUT, | 605 EXPECT_EQ(net::ERR_TIMED_OUT, |
| 674 url_loader_client_.completion_status().error_code); | 606 url_loader_client_.completion_status().error_code); |
| 675 } | 607 } |
| 676 | 608 |
| 677 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithFailedTimedOut) { | 609 TEST_F(MojoAsyncResourceHandlerTest, OnResponseCompletedWithFailedTimedOut) { |
| 678 net::URLRequestStatus status(net::URLRequestStatus::FAILED, | 610 net::URLRequestStatus status(net::URLRequestStatus::FAILED, |
| 679 net::ERR_TIMED_OUT); | 611 net::ERR_TIMED_OUT); |
| 680 bool defer = false; | |
| 681 | 612 |
| 682 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 613 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 683 handler_->OnResponseCompleted(status, &defer); | 614 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 684 EXPECT_FALSE(defer); | 615 handler_wrapper_->OnResponseCompleted(status)); |
| 685 | 616 |
| 686 url_loader_client_.RunUntilComplete(); | 617 url_loader_client_.RunUntilComplete(); |
| 687 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 618 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 688 EXPECT_EQ(net::ERR_TIMED_OUT, | 619 EXPECT_EQ(net::ERR_TIMED_OUT, |
| 689 url_loader_client_.completion_status().error_code); | 620 url_loader_client_.completion_status().error_code); |
| 690 } | 621 } |
| 691 | 622 |
| 692 TEST_F(MojoAsyncResourceHandlerTest, ResponseCompletionShouldCloseDataPipe) { | 623 TEST_F(MojoAsyncResourceHandlerTest, ResponseCompletionShouldCloseDataPipe) { |
| 693 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 624 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 694 | 625 |
| 695 scoped_refptr<net::IOBuffer> io_buffer; | 626 scoped_refptr<net::IOBuffer> io_buffer; |
| 696 int io_buffer_size = 0; | 627 int io_buffer_size = 0; |
| 697 bool defer = false; | |
| 698 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 628 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 699 url_loader_client_.RunUntilResponseBodyArrived(); | 629 url_loader_client_.RunUntilResponseBodyArrived(); |
| 700 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 630 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 701 ASSERT_TRUE(handler_->OnReadCompleted(0, &defer)); | 631 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 702 EXPECT_FALSE(defer); | 632 handler_wrapper_->OnReadCompleted(0)); |
| 703 | 633 |
| 704 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 634 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
| 705 handler_->OnResponseCompleted(status, &defer); | 635 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 706 EXPECT_FALSE(defer); | 636 handler_wrapper_->OnResponseCompleted(status)); |
| 707 | 637 |
| 708 url_loader_client_.RunUntilComplete(); | 638 url_loader_client_.RunUntilComplete(); |
| 709 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 639 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 710 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 640 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
| 711 | 641 |
| 712 // This is needed because |*io_buffer| may keep the data producer alive. | 642 // This is needed because |*io_buffer| may keep the data producer alive. |
| 713 io_buffer = nullptr; | 643 io_buffer = nullptr; |
| 714 | 644 |
| 715 while (true) { | 645 while (true) { |
| 716 char buffer[16]; | 646 char buffer[16]; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 727 TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission) { | 657 TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission) { |
| 728 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 658 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 729 | 659 |
| 730 scoped_refptr<net::IOBuffer> io_buffer; | 660 scoped_refptr<net::IOBuffer> io_buffer; |
| 731 int io_buffer_size = 0; | 661 int io_buffer_size = 0; |
| 732 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 662 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 733 url_loader_client_.RunUntilResponseBodyArrived(); | 663 url_loader_client_.RunUntilResponseBodyArrived(); |
| 734 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 664 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 735 ASSERT_GT(io_buffer_size, 0); | 665 ASSERT_GT(io_buffer_size, 0); |
| 736 memset(io_buffer->data(), 'a', io_buffer_size); | 666 memset(io_buffer->data(), 'a', io_buffer_size); |
| 737 bool defer = false; | 667 ASSERT_EQ(TestResourceHandlerWrapper::Result::CALLBACK_PENDING, |
| 738 ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 668 handler_wrapper_->OnReadCompleted(io_buffer_size)); |
| 739 // We don't care |defer|'s value here. | |
| 740 | 669 |
| 741 defer = false; | 670 // Out of band cancel. |
| 742 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); | 671 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); |
| 743 handler_->OnResponseCompleted(status, &defer); | 672 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 744 EXPECT_FALSE(defer); | 673 handler_wrapper_->OnResponseCompletedForOutOfBandCancel(status)); |
| 745 | 674 |
| 746 url_loader_client_.RunUntilComplete(); | 675 url_loader_client_.RunUntilComplete(); |
| 747 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 676 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 748 EXPECT_EQ(net::ERR_FAILED, url_loader_client_.completion_status().error_code); | 677 EXPECT_EQ(net::ERR_FAILED, url_loader_client_.completion_status().error_code); |
| 749 | 678 |
| 750 // This is needed because |*io_buffer| may keep the data producer alive. | 679 // This is needed because |*io_buffer| may keep the data producer alive. |
| 751 io_buffer = nullptr; | 680 io_buffer = nullptr; |
| 752 | 681 |
| 753 std::string actual; | 682 std::string actual; |
| 754 while (true) { | 683 while (true) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 771 | 700 |
| 772 // In this case, an error is notified after OnWillRead, before OnReadCompleted. | 701 // In this case, an error is notified after OnWillRead, before OnReadCompleted. |
| 773 TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission2) { | 702 TEST_F(MojoAsyncResourceHandlerTest, ResponseErrorDuringBodyTransmission2) { |
| 774 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 703 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 775 | 704 |
| 776 scoped_refptr<net::IOBuffer> io_buffer; | 705 scoped_refptr<net::IOBuffer> io_buffer; |
| 777 int io_buffer_size = 0; | 706 int io_buffer_size = 0; |
| 778 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 707 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 779 url_loader_client_.RunUntilResponseBodyArrived(); | 708 url_loader_client_.RunUntilResponseBodyArrived(); |
| 780 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 709 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 781 bool defer = false; | |
| 782 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); | 710 net::URLRequestStatus status(net::URLRequestStatus::FAILED, net::ERR_FAILED); |
| 783 handler_->OnResponseCompleted(status, &defer); | 711 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 784 EXPECT_FALSE(defer); | 712 handler_wrapper_->OnResponseCompleted(status)); |
| 785 | 713 |
| 786 url_loader_client_.RunUntilComplete(); | 714 url_loader_client_.RunUntilComplete(); |
| 787 EXPECT_TRUE(url_loader_client_.has_received_completion()); | 715 EXPECT_TRUE(url_loader_client_.has_received_completion()); |
| 788 EXPECT_EQ(net::ERR_FAILED, url_loader_client_.completion_status().error_code); | 716 EXPECT_EQ(net::ERR_FAILED, url_loader_client_.completion_status().error_code); |
| 789 | 717 |
| 790 // This is needed because |*io_buffer| may keep the data producer alive. | 718 // This is needed because |*io_buffer| may keep the data producer alive. |
| 791 io_buffer = nullptr; | 719 io_buffer = nullptr; |
| 792 | 720 |
| 793 while (true) { | 721 while (true) { |
| 794 char buf[16]; | 722 char buf[16]; |
| 795 uint32_t read_size = sizeof(buf); | 723 uint32_t read_size = sizeof(buf); |
| 796 MojoResult result = | 724 MojoResult result = |
| 797 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 725 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
| 798 MOJO_READ_DATA_FLAG_NONE); | 726 MOJO_READ_DATA_FLAG_NONE); |
| 799 if (result == MOJO_RESULT_FAILED_PRECONDITION) | 727 if (result == MOJO_RESULT_FAILED_PRECONDITION) |
| 800 break; | 728 break; |
| 801 ASSERT_EQ(MOJO_RESULT_SHOULD_WAIT, result); | 729 ASSERT_EQ(MOJO_RESULT_SHOULD_WAIT, result); |
| 802 base::RunLoop().RunUntilIdle(); | 730 base::RunLoop().RunUntilIdle(); |
| 803 } | 731 } |
| 804 } | 732 } |
| 805 | 733 |
| 806 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteFailsOnWillRead) { | 734 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteFailsOnWillRead) { |
| 807 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); | 735 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); |
| 808 scoped_refptr<net::IOBuffer> io_buffer; | 736 scoped_refptr<net::IOBuffer> io_buffer; |
| 809 int io_buffer_size = 0; | 737 int io_buffer_size = 0; |
| 810 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 738 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 811 ASSERT_FALSE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 739 ASSERT_FALSE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 812 EXPECT_FALSE(resource_controller_.is_cancel_with_error_called()); | |
| 813 } | 740 } |
| 814 | 741 |
| 815 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteReturnsShouldWaitOnWillRead) { | 742 TEST_F(MojoAsyncResourceHandlerTest, BeginWriteReturnsShouldWaitOnWillRead) { |
| 816 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 743 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
| 817 scoped_refptr<net::IOBuffer> io_buffer; | 744 scoped_refptr<net::IOBuffer> io_buffer; |
| 818 int io_buffer_size = 0; | 745 int io_buffer_size = 0; |
| 819 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 746 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 820 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 747 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 821 EXPECT_TRUE(io_buffer); | 748 EXPECT_TRUE(io_buffer); |
| 822 EXPECT_GT(io_buffer_size, 0); | 749 EXPECT_GT(io_buffer_size, 0); |
| 823 } | 750 } |
| 824 | 751 |
| 825 TEST_F(MojoAsyncResourceHandlerTest, | 752 TEST_F(MojoAsyncResourceHandlerTest, |
| 826 BeginWriteReturnsShouldWaitOnWillReadAndThenReturnsOK) { | 753 BeginWriteReturnsShouldWaitOnWillReadAndThenReturnsOK) { |
| 827 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 754 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
| 828 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 755 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 829 size_t written = 0; | 756 size_t written = 0; |
| 830 while (true) { | 757 while (true) { |
| 831 scoped_refptr<net::IOBuffer> io_buffer; | 758 scoped_refptr<net::IOBuffer> io_buffer; |
| 832 int io_buffer_size = 0; | 759 int io_buffer_size = 0; |
| 833 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 760 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 834 EXPECT_TRUE(io_buffer); | 761 EXPECT_TRUE(io_buffer); |
| 835 EXPECT_GT(io_buffer_size, 0); | 762 EXPECT_GT(io_buffer_size, 0); |
| 836 memset(io_buffer->data(), 'X', io_buffer_size); | 763 memset(io_buffer->data(), 'X', io_buffer_size); |
| 837 written += io_buffer_size; | 764 written += io_buffer_size; |
| 838 bool defer = false; | 765 TestResourceHandlerWrapper::Result result = |
| 839 ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 766 handler_wrapper_->OnReadCompleted(io_buffer_size); |
| 840 if (defer) | 767 if (result == TestResourceHandlerWrapper::Result::CALLBACK_PENDING) |
| 841 break; | 768 break; |
| 769 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, result); |
| 842 } | 770 } |
| 843 | 771 |
| 844 url_loader_client_.RunUntilResponseBodyArrived(); | 772 url_loader_client_.RunUntilResponseBodyArrived(); |
| 845 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 773 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 846 handler_->ResetBeginWriteExpectation(); | 774 handler_->ResetBeginWriteExpectation(); |
| 847 handler_->OnWritableForTesting(); | 775 handler_->OnWritableForTesting(); |
| 848 | 776 |
| 849 std::string actual; | 777 std::string actual; |
| 850 while (actual.size() < written) { | 778 while (actual.size() < written) { |
| 851 char buf[16]; | 779 char buf[16]; |
| 852 uint32_t read_size = sizeof(buf); | 780 uint32_t read_size = sizeof(buf); |
| 853 MojoResult result = | 781 MojoResult result = |
| 854 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 782 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
| 855 MOJO_READ_DATA_FLAG_NONE); | 783 MOJO_READ_DATA_FLAG_NONE); |
| 856 ASSERT_TRUE(result == MOJO_RESULT_OK || result == MOJO_RESULT_SHOULD_WAIT); | 784 ASSERT_TRUE(result == MOJO_RESULT_OK || result == MOJO_RESULT_SHOULD_WAIT); |
| 857 if (result == MOJO_RESULT_OK) | 785 if (result == MOJO_RESULT_OK) |
| 858 actual.append(buf, read_size); | 786 actual.append(buf, read_size); |
| 859 base::RunLoop().RunUntilIdle(); | 787 base::RunLoop().RunUntilIdle(); |
| 860 } | 788 } |
| 861 | 789 |
| 862 EXPECT_EQ(std::string(written, 'X'), actual); | 790 EXPECT_EQ(std::string(written, 'X'), actual); |
| 863 EXPECT_EQ(1, resource_controller_.num_resume_calls()); | 791 EXPECT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 792 handler_wrapper_->last_result()); |
| 864 } | 793 } |
| 865 | 794 |
| 866 TEST_F(MojoAsyncResourceHandlerTest, | 795 TEST_F(MojoAsyncResourceHandlerTest, |
| 867 EndWriteFailsOnWillReadWithInsufficientInitialCapacity) { | 796 EndWriteFailsOnWillReadWithInsufficientInitialCapacity) { |
| 868 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); | 797 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); |
| 869 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 798 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 870 handler_->set_end_write_expectation(MOJO_RESULT_UNKNOWN); | 799 handler_->set_end_write_expectation(MOJO_RESULT_UNKNOWN); |
| 871 scoped_refptr<net::IOBuffer> io_buffer; | 800 scoped_refptr<net::IOBuffer> io_buffer; |
| 872 int io_buffer_size = 0; | 801 int io_buffer_size = 0; |
| 873 ASSERT_FALSE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 802 ASSERT_FALSE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 874 } | 803 } |
| 875 | 804 |
| 876 TEST_F(MojoAsyncResourceHandlerTest, EndWriteFailsOnReadCompleted) { | 805 TEST_F(MojoAsyncResourceHandlerTest, EndWriteFailsOnReadCompleted) { |
| 877 scoped_refptr<net::IOBuffer> io_buffer; | 806 scoped_refptr<net::IOBuffer> io_buffer; |
| 878 int io_buffer_size = 0; | 807 int io_buffer_size = 0; |
| 879 bool defer = false; | |
| 880 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 808 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 881 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 809 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 882 | 810 |
| 883 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 811 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
| 884 ASSERT_FALSE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 812 ASSERT_EQ(TestResourceHandlerWrapper::Result::CANCEL, |
| 813 handler_wrapper_->OnReadCompleted(io_buffer_size)); |
| 885 } | 814 } |
| 886 | 815 |
| 887 TEST_F(MojoAsyncResourceHandlerTest, | 816 TEST_F(MojoAsyncResourceHandlerTest, |
| 888 EndWriteFailsOnReadCompletedWithInsufficientInitialCapacity) { | 817 EndWriteFailsOnReadCompletedWithInsufficientInitialCapacity) { |
| 889 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); | 818 MojoAsyncResourceHandler::SetAllocationSizeForTesting(2); |
| 890 scoped_refptr<net::IOBuffer> io_buffer; | 819 scoped_refptr<net::IOBuffer> io_buffer; |
| 891 int io_buffer_size = 0; | 820 int io_buffer_size = 0; |
| 892 bool defer = false; | |
| 893 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 821 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 894 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 822 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 895 | 823 |
| 896 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 824 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
| 897 ASSERT_FALSE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 825 ASSERT_EQ(TestResourceHandlerWrapper::Result::CANCEL, |
| 826 handler_wrapper_->OnReadCompleted(io_buffer_size)); |
| 898 } | 827 } |
| 899 | 828 |
| 900 TEST_F(MojoAsyncResourceHandlerTest, | 829 TEST_F(MojoAsyncResourceHandlerTest, |
| 901 EndWriteFailsOnResumeWithInsufficientInitialCapacity) { | 830 EndWriteFailsOnResumeWithInsufficientInitialCapacity) { |
| 902 MojoAsyncResourceHandler::SetAllocationSizeForTesting(8); | 831 MojoAsyncResourceHandler::SetAllocationSizeForTesting(8); |
| 903 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 832 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 904 scoped_refptr<net::IOBuffer> io_buffer; | 833 scoped_refptr<net::IOBuffer> io_buffer; |
| 905 int io_buffer_size = 0; | 834 int io_buffer_size = 0; |
| 906 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 835 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 907 url_loader_client_.RunUntilResponseBodyArrived(); | 836 url_loader_client_.RunUntilResponseBodyArrived(); |
| 908 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 837 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 909 | 838 |
| 910 while (true) { | 839 while (true) { |
| 911 bool defer = false; | |
| 912 ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer)); | |
| 913 ASSERT_GE(io_buffer_size, 0); | 840 ASSERT_GE(io_buffer_size, 0); |
| 914 if (defer) | 841 TestResourceHandlerWrapper::Result result = |
| 842 handler_wrapper_->OnReadCompleted(io_buffer_size); |
| 843 if (result == TestResourceHandlerWrapper::Result::CALLBACK_PENDING) |
| 915 break; | 844 break; |
| 845 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, result); |
| 846 |
| 916 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 847 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 917 } | 848 } |
| 918 | 849 |
| 919 while (true) { | 850 while (true) { |
| 920 char buf[16]; | 851 char buf[16]; |
| 921 uint32_t read_size = sizeof(buf); | 852 uint32_t read_size = sizeof(buf); |
| 922 MojoResult result = | 853 MojoResult result = |
| 923 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 854 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
| 924 MOJO_READ_DATA_FLAG_NONE); | 855 MOJO_READ_DATA_FLAG_NONE); |
| 925 if (result == MOJO_RESULT_SHOULD_WAIT) | 856 if (result == MOJO_RESULT_SHOULD_WAIT) |
| 926 break; | 857 break; |
| 927 ASSERT_EQ(MOJO_RESULT_OK, result); | 858 ASSERT_EQ(MOJO_RESULT_OK, result); |
| 928 } | 859 } |
| 929 | 860 |
| 930 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 861 handler_->set_end_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
| 931 resource_controller_.RunUntilCancelWithErrorCalled(); | 862 handler_wrapper_->RunUntilCanceled(); |
| 932 EXPECT_FALSE(url_loader_client_.has_received_completion()); | 863 EXPECT_FALSE(url_loader_client_.has_received_completion()); |
| 933 EXPECT_TRUE(resource_controller_.is_cancel_with_error_called()); | 864 EXPECT_EQ(TestResourceHandlerWrapper::Result::CANCEL, |
| 934 EXPECT_EQ(net::ERR_FAILED, resource_controller_.error()); | 865 handler_wrapper_->last_result()); |
| 866 EXPECT_EQ(net::ERR_FAILED, handler_wrapper_->net_error()); |
| 935 } | 867 } |
| 936 | 868 |
| 937 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 869 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 938 OnWillReadWithLongContents) { | 870 OnWillReadWithLongContents) { |
| 939 bool defer = false; | |
| 940 scoped_refptr<net::IOBuffer> io_buffer; | 871 scoped_refptr<net::IOBuffer> io_buffer; |
| 941 int io_buffer_size = 0; | 872 int io_buffer_size = 0; |
| 942 | 873 |
| 943 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 874 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 944 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 875 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 945 ASSERT_TRUE(io_buffer); | 876 ASSERT_TRUE(io_buffer); |
| 946 // The io_buffer size that the mime sniffer requires implicitly. | 877 // The io_buffer size that the mime sniffer requires implicitly. |
| 947 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); | 878 ASSERT_GE(io_buffer_size, kSizeMimeSnifferRequiresForFirstOnWillRead); |
| 948 std::string expected; | 879 std::string expected; |
| 949 for (int i = 0; i < 3 * io_buffer_size + 2; ++i) | 880 for (int i = 0; i < 3 * io_buffer_size + 2; ++i) |
| 950 expected += ('A' + i % 26); | 881 expected += ('A' + i % 26); |
| 951 | 882 |
| 952 ASSERT_TRUE(handler_->OnReadCompleted(0, &defer)); | 883 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 953 ASSERT_FALSE(defer); | 884 handler_wrapper_->OnReadCompleted(0)); |
| 954 | 885 |
| 955 url_loader_client_.RunUntilResponseBodyArrived(); | 886 url_loader_client_.RunUntilResponseBodyArrived(); |
| 956 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 887 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 957 | 888 |
| 958 size_t written = 0; | 889 size_t written = 0; |
| 959 std::string actual; | 890 std::string actual; |
| 960 while (actual.size() < expected.size()) { | 891 while (actual.size() < expected.size()) { |
| 961 while (written < expected.size() && !defer) { | 892 while (written < expected.size() && |
| 893 handler_wrapper_->last_result() == |
| 894 TestResourceHandlerWrapper::Result::RESUME) { |
| 962 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 895 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), | 896 const size_t to_be_written = std::min(static_cast<size_t>(io_buffer_size), |
| 964 expected.size() - written); | 897 expected.size() - written); |
| 965 memcpy(io_buffer->data(), &expected[written], to_be_written); | 898 memcpy(io_buffer->data(), &expected[written], to_be_written); |
| 966 ASSERT_TRUE(handler_->OnReadCompleted(to_be_written, &defer)); | 899 |
| 900 // Request should be resumed or paused. |
| 901 ASSERT_NE(TestResourceHandlerWrapper::Result::CANCEL, |
| 902 handler_wrapper_->OnReadCompleted(to_be_written)); |
| 903 |
| 967 written += to_be_written; | 904 written += to_be_written; |
| 968 } | 905 } |
| 969 | 906 |
| 970 char buf[16]; | 907 char buf[16]; |
| 971 uint32_t read_size = sizeof(buf); | 908 uint32_t read_size = sizeof(buf); |
| 972 MojoResult result = | 909 MojoResult result = |
| 973 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 910 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
| 974 MOJO_READ_DATA_FLAG_NONE); | 911 MOJO_READ_DATA_FLAG_NONE); |
| 975 if (result != MOJO_RESULT_SHOULD_WAIT) { | 912 if (result != MOJO_RESULT_SHOULD_WAIT) { |
| 976 ASSERT_EQ(MOJO_RESULT_OK, result); | 913 ASSERT_EQ(MOJO_RESULT_OK, result); |
| 977 actual.append(buf, read_size); | 914 actual.append(buf, read_size); |
| 978 } | 915 } |
| 979 int resume_count = resource_controller_.num_resume_calls(); | 916 |
| 917 // Give mojo a chance pass data back and forth, and to request more data |
| 918 // from the handler. |
| 980 base::RunLoop().RunUntilIdle(); | 919 base::RunLoop().RunUntilIdle(); |
| 981 // Continue writing if controller->Resume() is called. | |
| 982 defer = (resume_count == resource_controller_.num_resume_calls()); | |
| 983 } | 920 } |
| 984 EXPECT_EQ(expected, actual); | 921 EXPECT_EQ(expected, actual); |
| 985 } | 922 } |
| 986 | 923 |
| 987 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 924 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 988 BeginWriteFailsOnReadCompleted) { | 925 BeginWriteFailsOnReadCompleted) { |
| 989 scoped_refptr<net::IOBuffer> io_buffer; | 926 scoped_refptr<net::IOBuffer> io_buffer; |
| 990 int io_buffer_size = 0; | 927 int io_buffer_size = 0; |
| 991 bool defer = false; | |
| 992 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 928 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 993 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 929 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 994 | 930 |
| 995 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); | 931 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); |
| 996 ASSERT_FALSE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 932 ASSERT_EQ(TestResourceHandlerWrapper::Result::CANCEL, |
| 933 handler_wrapper_->OnReadCompleted(io_buffer_size)); |
| 997 } | 934 } |
| 998 | 935 |
| 999 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 936 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1000 BeginWriteReturnsShouldWaitOnReadCompleted) { | 937 BeginWriteReturnsShouldWaitOnReadCompleted) { |
| 1001 scoped_refptr<net::IOBuffer> io_buffer; | 938 scoped_refptr<net::IOBuffer> io_buffer; |
| 1002 int io_buffer_size = 0; | 939 int io_buffer_size = 0; |
| 1003 bool defer = false; | |
| 1004 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 940 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 1005 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 941 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 1006 | 942 |
| 1007 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); | 943 handler_->set_begin_write_expectation(MOJO_RESULT_SHOULD_WAIT); |
| 1008 ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 944 ASSERT_EQ(TestResourceHandlerWrapper::Result::CALLBACK_PENDING, |
| 1009 EXPECT_TRUE(defer); | 945 handler_wrapper_->OnReadCompleted(io_buffer_size)); |
| 1010 } | 946 } |
| 1011 | 947 |
| 1012 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 948 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1013 BeginWriteFailsOnResume) { | 949 BeginWriteFailsOnResume) { |
| 1014 bool defer = false; | |
| 1015 int io_buffer_size = 0; | 950 int io_buffer_size = 0; |
| 1016 scoped_refptr<net::IOBuffer> io_buffer; | 951 scoped_refptr<net::IOBuffer> io_buffer; |
| 1017 | 952 |
| 1018 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 953 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 1019 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 954 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 1020 ASSERT_TRUE(handler_->OnReadCompleted(0, &defer)); | 955 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 1021 ASSERT_FALSE(defer); | 956 handler_wrapper_->OnReadCompleted(0)); |
| 1022 url_loader_client_.RunUntilResponseBodyArrived(); | 957 url_loader_client_.RunUntilResponseBodyArrived(); |
| 1023 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 958 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 1024 | 959 |
| 1025 while (!defer) { | 960 while (true) { |
| 1026 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 961 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 1027 ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 962 TestResourceHandlerWrapper::Result result = |
| 963 handler_wrapper_->OnReadCompleted(io_buffer_size); |
| 964 if (result == TestResourceHandlerWrapper::Result::CALLBACK_PENDING) |
| 965 break; |
| 966 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, result); |
| 1028 } | 967 } |
| 1029 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); | 968 handler_->set_begin_write_expectation(MOJO_RESULT_UNKNOWN); |
| 1030 | 969 |
| 1031 while (!resource_controller_.is_cancel_with_error_called()) { | 970 while (handler_wrapper_->last_result() != |
| 971 TestResourceHandlerWrapper::Result::CANCEL) { |
| 1032 char buf[256]; | 972 char buf[256]; |
| 1033 uint32_t read_size = sizeof(buf); | 973 uint32_t read_size = sizeof(buf); |
| 1034 MojoResult result = | 974 MojoResult result = |
| 1035 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, | 975 mojo::ReadDataRaw(url_loader_client_.response_body(), buf, &read_size, |
| 1036 MOJO_READ_DATA_FLAG_NONE); | 976 MOJO_READ_DATA_FLAG_NONE); |
| 1037 ASSERT_TRUE(result == MOJO_RESULT_OK || result == MOJO_RESULT_SHOULD_WAIT); | 977 ASSERT_TRUE(result == MOJO_RESULT_OK || result == MOJO_RESULT_SHOULD_WAIT); |
| 1038 base::RunLoop().RunUntilIdle(); | 978 base::RunLoop().RunUntilIdle(); |
| 1039 } | 979 } |
| 1040 | 980 |
| 1041 EXPECT_FALSE(url_loader_client_.has_received_completion()); | 981 EXPECT_FALSE(url_loader_client_.has_received_completion()); |
| 1042 EXPECT_EQ(net::ERR_FAILED, resource_controller_.error()); | 982 EXPECT_EQ(net::ERR_FAILED, handler_wrapper_->net_error()); |
| 1043 EXPECT_EQ(0, resource_controller_.num_resume_calls()); | |
| 1044 } | 983 } |
| 1045 | 984 |
| 1046 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, CancelWhileWaiting) { | 985 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, CancelWhileWaiting) { |
| 1047 bool defer = false; | |
| 1048 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); | 986 ASSERT_TRUE(CallOnWillStartAndOnResponseStarted()); |
| 1049 | 987 |
| 1050 while (!defer) { | 988 while (true) { |
| 1051 scoped_refptr<net::IOBuffer> io_buffer; | 989 scoped_refptr<net::IOBuffer> io_buffer; |
| 1052 int io_buffer_size = 0; | 990 int io_buffer_size = 0; |
| 1053 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 991 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 1054 ASSERT_TRUE(handler_->OnReadCompleted(io_buffer_size, &defer)); | 992 TestResourceHandlerWrapper::Result result = |
| 993 handler_wrapper_->OnReadCompleted(io_buffer_size); |
| 994 if (result == TestResourceHandlerWrapper::Result::CALLBACK_PENDING) |
| 995 break; |
| 996 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, result); |
| 1055 } | 997 } |
| 1056 | 998 |
| 1057 url_loader_client_.RunUntilResponseBodyArrived(); | 999 url_loader_client_.RunUntilResponseBodyArrived(); |
| 1058 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 1000 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 1059 | 1001 |
| 1060 defer = false; | |
| 1061 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, | 1002 net::URLRequestStatus status(net::URLRequestStatus::CANCELED, |
| 1062 net::ERR_ABORTED); | 1003 net::ERR_ABORTED); |
| 1063 handler_->OnResponseCompleted(status, &defer); | 1004 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 1005 handler_wrapper_->OnResponseCompletedForOutOfBandCancel(status)); |
| 1064 | 1006 |
| 1065 ASSERT_FALSE(url_loader_client_.has_received_completion()); | 1007 ASSERT_FALSE(url_loader_client_.has_received_completion()); |
| 1066 url_loader_client_.RunUntilComplete(); | 1008 url_loader_client_.RunUntilComplete(); |
| 1067 EXPECT_EQ(net::ERR_ABORTED, | 1009 EXPECT_EQ(net::ERR_ABORTED, |
| 1068 url_loader_client_.completion_status().error_code); | 1010 url_loader_client_.completion_status().error_code); |
| 1069 | 1011 |
| 1070 while (true) { | 1012 while (true) { |
| 1071 char buffer[16]; | 1013 char buffer[16]; |
| 1072 uint32_t read_size = sizeof(buffer); | 1014 uint32_t read_size = sizeof(buffer); |
| 1073 MojoResult result = | 1015 MojoResult result = |
| 1074 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, | 1016 mojo::ReadDataRaw(url_loader_client_.response_body(), buffer, |
| 1075 &read_size, MOJO_READ_DATA_FLAG_NONE); | 1017 &read_size, MOJO_READ_DATA_FLAG_NONE); |
| 1076 if (result == MOJO_RESULT_FAILED_PRECONDITION) | 1018 if (result == MOJO_RESULT_FAILED_PRECONDITION) |
| 1077 break; | 1019 break; |
| 1078 base::RunLoop().RunUntilIdle(); | 1020 base::RunLoop().RunUntilIdle(); |
| 1079 DCHECK(result == MOJO_RESULT_SHOULD_WAIT || result == MOJO_RESULT_OK); | 1021 DCHECK(result == MOJO_RESULT_SHOULD_WAIT || result == MOJO_RESULT_OK); |
| 1080 } | 1022 } |
| 1081 | 1023 |
| 1082 base::RunLoop().RunUntilIdle(); | 1024 base::RunLoop().RunUntilIdle(); |
| 1083 EXPECT_EQ(0, resource_controller_.num_resume_calls()); | |
| 1084 } | 1025 } |
| 1085 | 1026 |
| 1086 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, RedirectHandling) { | 1027 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, RedirectHandling) { |
| 1087 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 1028 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
| 1088 bool defer = false; | |
| 1089 | 1029 |
| 1090 ASSERT_TRUE(handler_->OnWillStart(request_->url(), &defer)); | 1030 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 1091 ASSERT_FALSE(defer); | 1031 handler_wrapper_->OnWillStart(request_->url())); |
| 1032 |
| 1092 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 1033 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
| 1093 net::RedirectInfo redirect_info; | 1034 net::RedirectInfo redirect_info; |
| 1094 redirect_info.status_code = 301; | 1035 redirect_info.status_code = 301; |
| 1095 ASSERT_TRUE( | 1036 ASSERT_EQ( |
| 1096 handler_->OnRequestRedirected(redirect_info, response.get(), &defer)); | 1037 TestResourceHandlerWrapper::Result::CALLBACK_PENDING, |
| 1097 ASSERT_TRUE(defer); | 1038 handler_wrapper_->OnRequestRedirected(redirect_info, response.get())); |
| 1098 | 1039 |
| 1099 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1040 ASSERT_FALSE(url_loader_client_.has_received_response()); |
| 1100 ASSERT_FALSE(url_loader_client_.has_received_redirect()); | 1041 ASSERT_FALSE(url_loader_client_.has_received_redirect()); |
| 1101 url_loader_client_.RunUntilRedirectReceived(); | 1042 url_loader_client_.RunUntilRedirectReceived(); |
| 1102 | 1043 |
| 1103 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1044 ASSERT_FALSE(url_loader_client_.has_received_response()); |
| 1104 ASSERT_TRUE(url_loader_client_.has_received_redirect()); | 1045 ASSERT_TRUE(url_loader_client_.has_received_redirect()); |
| 1105 EXPECT_EQ(301, url_loader_client_.redirect_info().status_code); | 1046 EXPECT_EQ(301, url_loader_client_.redirect_info().status_code); |
| 1106 | 1047 |
| 1107 EXPECT_EQ(0, resource_controller_.num_resume_calls()); | 1048 ASSERT_EQ(TestResourceHandlerWrapper::Result::CALLBACK_PENDING, |
| 1049 handler_wrapper_->last_result()); |
| 1108 handler_->FollowRedirect(); | 1050 handler_->FollowRedirect(); |
| 1109 EXPECT_EQ(1, resource_controller_.num_resume_calls()); | 1051 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 1052 handler_wrapper_->last_result()); |
| 1110 | 1053 |
| 1111 url_loader_client_.ClearHasReceivedRedirect(); | 1054 url_loader_client_.ClearHasReceivedRedirect(); |
| 1112 // Redirect once more. | 1055 // Redirect once more. |
| 1113 defer = false; | |
| 1114 redirect_info.status_code = 302; | 1056 redirect_info.status_code = 302; |
| 1115 ASSERT_TRUE( | 1057 ASSERT_EQ( |
| 1116 handler_->OnRequestRedirected(redirect_info, response.get(), &defer)); | 1058 TestResourceHandlerWrapper::Result::CALLBACK_PENDING, |
| 1117 ASSERT_TRUE(defer); | 1059 handler_wrapper_->OnRequestRedirected(redirect_info, response.get())); |
| 1118 | 1060 |
| 1119 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1061 ASSERT_FALSE(url_loader_client_.has_received_response()); |
| 1120 ASSERT_FALSE(url_loader_client_.has_received_redirect()); | 1062 ASSERT_FALSE(url_loader_client_.has_received_redirect()); |
| 1121 url_loader_client_.RunUntilRedirectReceived(); | 1063 url_loader_client_.RunUntilRedirectReceived(); |
| 1122 | 1064 |
| 1123 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1065 ASSERT_FALSE(url_loader_client_.has_received_response()); |
| 1124 ASSERT_TRUE(url_loader_client_.has_received_redirect()); | 1066 ASSERT_TRUE(url_loader_client_.has_received_redirect()); |
| 1125 EXPECT_EQ(302, url_loader_client_.redirect_info().status_code); | 1067 EXPECT_EQ(302, url_loader_client_.redirect_info().status_code); |
| 1126 | 1068 |
| 1127 EXPECT_EQ(1, resource_controller_.num_resume_calls()); | 1069 ASSERT_EQ(TestResourceHandlerWrapper::Result::CALLBACK_PENDING, |
| 1070 handler_wrapper_->last_result()); |
| 1128 handler_->FollowRedirect(); | 1071 handler_->FollowRedirect(); |
| 1129 EXPECT_EQ(2, resource_controller_.num_resume_calls()); | 1072 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 1073 handler_wrapper_->last_result()); |
| 1130 | 1074 |
| 1131 // Give the final response. | 1075 // Give the final response. |
| 1132 defer = false; | 1076 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 1133 ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer)); | 1077 handler_wrapper_->OnResponseStarted(response.get())); |
| 1134 ASSERT_FALSE(defer); | |
| 1135 | 1078 |
| 1136 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 1079 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
| 1137 handler_->OnResponseCompleted(status, &defer); | 1080 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 1138 ASSERT_FALSE(defer); | 1081 handler_wrapper_->OnResponseCompleted(status)); |
| 1139 | 1082 |
| 1140 ASSERT_FALSE(url_loader_client_.has_received_completion()); | 1083 ASSERT_FALSE(url_loader_client_.has_received_completion()); |
| 1141 url_loader_client_.RunUntilComplete(); | 1084 url_loader_client_.RunUntilComplete(); |
| 1142 | 1085 |
| 1143 ASSERT_TRUE(url_loader_client_.has_received_response()); | 1086 ASSERT_TRUE(url_loader_client_.has_received_response()); |
| 1144 ASSERT_TRUE(url_loader_client_.has_received_completion()); | 1087 ASSERT_TRUE(url_loader_client_.has_received_completion()); |
| 1145 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 1088 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
| 1146 } | 1089 } |
| 1147 | 1090 |
| 1091 // Test the case where th other process tells the ResourceHandler to follow a |
| 1092 // redirect, despite the fact that no redirect has been received yet. |
| 1148 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 1093 TEST_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1149 MalformedFollowRedirectRequest) { | 1094 MalformedFollowRedirectRequest) { |
| 1150 handler_->FollowRedirect(); | 1095 handler_->FollowRedirect(); |
| 1151 | 1096 |
| 1152 EXPECT_TRUE(handler_->has_received_bad_message()); | 1097 EXPECT_TRUE(handler_->has_received_bad_message()); |
| 1153 EXPECT_EQ(0, resource_controller_.num_resume_calls()); | |
| 1154 } | 1098 } |
| 1155 | 1099 |
| 1156 // Typically ResourceHandler methods are called in this order. | 1100 // Typically ResourceHandler methods are called in this order. |
| 1157 TEST_P( | 1101 TEST_P( |
| 1158 MojoAsyncResourceHandlerWithAllocationSizeTest, | 1102 MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1159 OnWillStartThenOnResponseStartedThenOnWillReadThenOnReadCompletedThenOnRespo
nseCompleted) { | 1103 OnWillStartThenOnResponseStartedThenOnWillReadThenOnReadCompletedThenOnRespo
nseCompleted) { |
| 1160 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 1104 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
| 1161 bool defer = false; | |
| 1162 | 1105 |
| 1163 ASSERT_TRUE(handler_->OnWillStart(request_->url(), &defer)); | 1106 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 1164 ASSERT_FALSE(defer); | 1107 handler_wrapper_->OnWillStart(request_->url())); |
| 1165 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 1108 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
| 1166 ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer)); | 1109 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 1167 ASSERT_FALSE(defer); | 1110 handler_wrapper_->OnResponseStarted(response.get())); |
| 1168 | 1111 |
| 1169 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1112 ASSERT_FALSE(url_loader_client_.has_received_response()); |
| 1170 url_loader_client_.RunUntilResponseReceived(); | 1113 url_loader_client_.RunUntilResponseReceived(); |
| 1171 | 1114 |
| 1172 int io_buffer_size = 0; | 1115 int io_buffer_size = 0; |
| 1173 scoped_refptr<net::IOBuffer> io_buffer; | 1116 scoped_refptr<net::IOBuffer> io_buffer; |
| 1174 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 1117 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 1175 ASSERT_TRUE(io_buffer); | 1118 ASSERT_TRUE(io_buffer); |
| 1176 ASSERT_GT(io_buffer_size, 0); | 1119 ASSERT_GT(io_buffer_size, 0); |
| 1177 io_buffer->data()[0] = 'A'; | 1120 io_buffer->data()[0] = 'A'; |
| 1178 | 1121 |
| 1179 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); | 1122 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); |
| 1180 url_loader_client_.RunUntilResponseBodyArrived(); | 1123 url_loader_client_.RunUntilResponseBodyArrived(); |
| 1181 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 1124 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 1182 | 1125 |
| 1183 ASSERT_TRUE(handler_->OnReadCompleted(1, &defer)); | 1126 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 1184 ASSERT_FALSE(defer); | 1127 handler_wrapper_->OnReadCompleted(1)); |
| 1185 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 1128 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
| 1186 handler_->OnResponseCompleted(status, &defer); | 1129 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 1187 ASSERT_FALSE(defer); | 1130 handler_wrapper_->OnResponseCompleted(status)); |
| 1188 | 1131 |
| 1189 ASSERT_FALSE(url_loader_client_.has_received_completion()); | 1132 ASSERT_FALSE(url_loader_client_.has_received_completion()); |
| 1190 url_loader_client_.RunUntilComplete(); | 1133 url_loader_client_.RunUntilComplete(); |
| 1191 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 1134 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
| 1192 | 1135 |
| 1193 // This is needed because |*io_buffer| may keep the data producer alive. | 1136 // This is needed because |*io_buffer| may keep the data producer alive. |
| 1194 io_buffer = nullptr; | 1137 io_buffer = nullptr; |
| 1195 | 1138 |
| 1196 std::string body; | 1139 std::string body; |
| 1197 while (true) { | 1140 while (true) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1210 } | 1153 } |
| 1211 } | 1154 } |
| 1212 EXPECT_EQ("A", body); | 1155 EXPECT_EQ("A", body); |
| 1213 } | 1156 } |
| 1214 | 1157 |
| 1215 // MimeResourceHandler calls delegated ResourceHandler's methods in this order. | 1158 // MimeResourceHandler calls delegated ResourceHandler's methods in this order. |
| 1216 TEST_P( | 1159 TEST_P( |
| 1217 MojoAsyncResourceHandlerWithAllocationSizeTest, | 1160 MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1218 OnWillStartThenOnWillReadThenOnResponseStartedThenOnReadCompletedThenOnRespo
nseCompleted) { | 1161 OnWillStartThenOnWillReadThenOnResponseStartedThenOnReadCompletedThenOnRespo
nseCompleted) { |
| 1219 rdh_delegate_.set_num_on_response_started_calls_expectation(1); | 1162 rdh_delegate_.set_num_on_response_started_calls_expectation(1); |
| 1220 bool defer = false; | |
| 1221 | 1163 |
| 1222 ASSERT_TRUE(handler_->OnWillStart(request_->url(), &defer)); | 1164 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 1223 ASSERT_FALSE(defer); | 1165 handler_wrapper_->OnWillStart(request_->url())); |
| 1224 | 1166 |
| 1225 int io_buffer_size = 0; | 1167 int io_buffer_size = 0; |
| 1226 scoped_refptr<net::IOBuffer> io_buffer; | 1168 scoped_refptr<net::IOBuffer> io_buffer; |
| 1227 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); | 1169 ASSERT_TRUE(handler_->OnWillRead(&io_buffer, &io_buffer_size, -1)); |
| 1228 ASSERT_TRUE(io_buffer); | 1170 ASSERT_TRUE(io_buffer); |
| 1229 ASSERT_GT(io_buffer_size, 0); | 1171 ASSERT_GT(io_buffer_size, 0); |
| 1230 io_buffer->data()[0] = 'B'; | 1172 io_buffer->data()[0] = 'B'; |
| 1231 | 1173 |
| 1232 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); | 1174 ASSERT_FALSE(url_loader_client_.response_body().is_valid()); |
| 1233 url_loader_client_.RunUntilResponseBodyArrived(); | 1175 url_loader_client_.RunUntilResponseBodyArrived(); |
| 1234 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); | 1176 ASSERT_TRUE(url_loader_client_.response_body().is_valid()); |
| 1235 | 1177 |
| 1236 scoped_refptr<ResourceResponse> response = new ResourceResponse(); | 1178 scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
| 1237 ASSERT_TRUE(handler_->OnResponseStarted(response.get(), &defer)); | 1179 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 1238 ASSERT_FALSE(defer); | 1180 handler_wrapper_->OnResponseStarted(response.get())); |
| 1239 | 1181 |
| 1240 ASSERT_FALSE(url_loader_client_.has_received_response()); | 1182 ASSERT_FALSE(url_loader_client_.has_received_response()); |
| 1241 url_loader_client_.RunUntilResponseReceived(); | 1183 url_loader_client_.RunUntilResponseReceived(); |
| 1242 | 1184 |
| 1243 ASSERT_TRUE(handler_->OnReadCompleted(1, &defer)); | 1185 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 1244 ASSERT_FALSE(defer); | 1186 handler_wrapper_->OnReadCompleted(1)); |
| 1245 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); | 1187 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, net::OK); |
| 1246 handler_->OnResponseCompleted(status, &defer); | 1188 ASSERT_EQ(TestResourceHandlerWrapper::Result::RESUME, |
| 1247 ASSERT_FALSE(defer); | 1189 handler_wrapper_->OnResponseCompleted(status)); |
| 1248 | 1190 |
| 1249 ASSERT_FALSE(url_loader_client_.has_received_completion()); | 1191 ASSERT_FALSE(url_loader_client_.has_received_completion()); |
| 1250 url_loader_client_.RunUntilComplete(); | 1192 url_loader_client_.RunUntilComplete(); |
| 1251 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); | 1193 EXPECT_EQ(net::OK, url_loader_client_.completion_status().error_code); |
| 1252 | 1194 |
| 1253 // This is needed because |*io_buffer| may keep the data producer alive. | 1195 // This is needed because |*io_buffer| may keep the data producer alive. |
| 1254 io_buffer = nullptr; | 1196 io_buffer = nullptr; |
| 1255 | 1197 |
| 1256 std::string body; | 1198 std::string body; |
| 1257 while (true) { | 1199 while (true) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1270 } | 1212 } |
| 1271 } | 1213 } |
| 1272 EXPECT_EQ("B", body); | 1214 EXPECT_EQ("B", body); |
| 1273 } | 1215 } |
| 1274 | 1216 |
| 1275 INSTANTIATE_TEST_CASE_P(MojoAsyncResourceHandlerWithAllocationSizeTest, | 1217 INSTANTIATE_TEST_CASE_P(MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1276 MojoAsyncResourceHandlerWithAllocationSizeTest, | 1218 MojoAsyncResourceHandlerWithAllocationSizeTest, |
| 1277 ::testing::Values(8, 32 * 2014)); | 1219 ::testing::Values(8, 32 * 2014)); |
| 1278 } // namespace | 1220 } // namespace |
| 1279 } // namespace content | 1221 } // namespace content |
| OLD | NEW |