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/child/url_loader_client_impl.h" | 5 #include "content/child/url_loader_client_impl.h" |
| 6 | 6 |
| 7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "content/child/resource_dispatcher.h" | 10 #include "content/child/resource_dispatcher.h" |
| (...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 344 EXPECT_FALSE(request_peer_context_.complete); | 344 EXPECT_FALSE(request_peer_context_.complete); |
| 345 EXPECT_FALSE(request_peer_context_.cancelled); | 345 EXPECT_FALSE(request_peer_context_.cancelled); |
| 346 | 346 |
| 347 base::RunLoop().RunUntilIdle(); | 347 base::RunLoop().RunUntilIdle(); |
| 348 EXPECT_TRUE(request_peer_context_.received_response); | 348 EXPECT_TRUE(request_peer_context_.received_response); |
| 349 EXPECT_EQ("hello", request_peer_context_.data); | 349 EXPECT_EQ("hello", request_peer_context_.data); |
| 350 EXPECT_FALSE(request_peer_context_.complete); | 350 EXPECT_FALSE(request_peer_context_.complete); |
| 351 EXPECT_TRUE(request_peer_context_.cancelled); | 351 EXPECT_TRUE(request_peer_context_.cancelled); |
| 352 } | 352 } |
| 353 | 353 |
| 354 TEST_F(URLLoaderClientImplTest, Defer) { | |
| 355 ResourceResponseHead response_head; | |
| 356 ResourceRequestCompletionStatus completion_status; | |
| 357 | |
| 358 url_loader_client_->OnReceiveResponse(response_head, nullptr); | |
| 359 url_loader_client_->OnComplete(completion_status); | |
| 360 | |
| 361 EXPECT_FALSE(request_peer_context_.received_response); | |
| 362 EXPECT_FALSE(request_peer_context_.complete); | |
| 363 | |
| 364 dispatcher_->SetDefersLoading(request_id_, true); | |
| 365 | |
| 366 base::RunLoop().RunUntilIdle(); | |
| 367 EXPECT_FALSE(request_peer_context_.received_response); | |
| 368 EXPECT_FALSE(request_peer_context_.complete); | |
| 369 | |
| 370 dispatcher_->SetDefersLoading(request_id_, false); | |
| 371 EXPECT_FALSE(request_peer_context_.received_response); | |
| 372 EXPECT_FALSE(request_peer_context_.complete); | |
| 373 | |
| 374 base::RunLoop().RunUntilIdle(); | |
| 375 EXPECT_TRUE(request_peer_context_.received_response); | |
| 376 EXPECT_TRUE(request_peer_context_.complete); | |
| 377 } | |
| 378 | |
| 379 TEST_F(URLLoaderClientImplTest, DeferWithResponseBody) { | |
| 380 ResourceResponseHead response_head; | |
| 381 ResourceRequestCompletionStatus completion_status; | |
| 382 | |
| 383 url_loader_client_->OnReceiveResponse(response_head, nullptr); | |
| 384 mojo::DataPipe data_pipe(DataPipeOptions()); | |
| 385 uint32_t size = 5; | |
| 386 MojoResult result = | |
| 387 mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size, | |
| 388 MOJO_WRITE_DATA_FLAG_NONE); | |
| 389 ASSERT_EQ(MOJO_RESULT_OK, result); | |
| 390 EXPECT_EQ(5u, size); | |
| 391 data_pipe.producer_handle.reset(); | |
| 392 | |
| 393 url_loader_client_->OnStartLoadingResponseBody( | |
| 394 std::move(data_pipe.consumer_handle)); | |
| 395 url_loader_client_->OnComplete(completion_status); | |
| 396 | |
| 397 EXPECT_FALSE(request_peer_context_.received_response); | |
| 398 EXPECT_FALSE(request_peer_context_.complete); | |
| 399 EXPECT_EQ("", request_peer_context_.data); | |
| 400 | |
| 401 dispatcher_->SetDefersLoading(request_id_, true); | |
| 402 | |
| 403 base::RunLoop().RunUntilIdle(); | |
| 404 EXPECT_FALSE(request_peer_context_.received_response); | |
| 405 EXPECT_FALSE(request_peer_context_.complete); | |
| 406 EXPECT_EQ("", request_peer_context_.data); | |
| 407 | |
| 408 dispatcher_->SetDefersLoading(request_id_, false); | |
| 409 EXPECT_FALSE(request_peer_context_.received_response); | |
| 410 EXPECT_FALSE(request_peer_context_.complete); | |
| 411 EXPECT_EQ("", request_peer_context_.data); | |
| 412 | |
| 413 base::RunLoop().RunUntilIdle(); | |
| 414 EXPECT_TRUE(request_peer_context_.received_response); | |
| 415 EXPECT_TRUE(request_peer_context_.complete); | |
| 416 EXPECT_EQ("hello", request_peer_context_.data); | |
| 417 } | |
| 418 | |
| 419 // As "transfer size update" message is handled specially in the implementation, | |
| 420 // we have a separate test. | |
| 421 TEST_F(URLLoaderClientImplTest, DeferWithTransferSizeUpdated) { | |
| 422 ResourceResponseHead response_head; | |
| 423 ResourceRequestCompletionStatus completion_status; | |
| 424 | |
| 425 url_loader_client_->OnReceiveResponse(response_head, nullptr); | |
| 426 mojo::DataPipe data_pipe(DataPipeOptions()); | |
| 427 uint32_t size = 5; | |
| 428 MojoResult result = | |
| 429 mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size, | |
| 430 MOJO_WRITE_DATA_FLAG_NONE); | |
| 431 ASSERT_EQ(MOJO_RESULT_OK, result); | |
| 432 EXPECT_EQ(5u, size); | |
| 433 data_pipe.producer_handle.reset(); | |
| 434 | |
| 435 url_loader_client_->OnStartLoadingResponseBody( | |
| 436 std::move(data_pipe.consumer_handle)); | |
| 437 url_loader_client_->OnTransferSizeUpdated(4); | |
| 438 url_loader_client_->OnComplete(completion_status); | |
| 439 | |
| 440 EXPECT_FALSE(request_peer_context_.received_response); | |
| 441 EXPECT_FALSE(request_peer_context_.complete); | |
| 442 EXPECT_EQ("", request_peer_context_.data); | |
| 443 EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); | |
| 444 | |
| 445 dispatcher_->SetDefersLoading(request_id_, true); | |
| 446 | |
| 447 base::RunLoop().RunUntilIdle(); | |
| 448 EXPECT_FALSE(request_peer_context_.received_response); | |
| 449 EXPECT_FALSE(request_peer_context_.complete); | |
| 450 EXPECT_EQ("", request_peer_context_.data); | |
| 451 EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); | |
| 452 | |
| 453 dispatcher_->SetDefersLoading(request_id_, false); | |
| 454 EXPECT_FALSE(request_peer_context_.received_response); | |
| 455 EXPECT_FALSE(request_peer_context_.complete); | |
| 456 EXPECT_EQ("", request_peer_context_.data); | |
| 457 EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); | |
| 458 | |
| 459 base::RunLoop().RunUntilIdle(); | |
| 460 EXPECT_TRUE(request_peer_context_.received_response); | |
| 461 EXPECT_TRUE(request_peer_context_.complete); | |
| 462 EXPECT_EQ("hello", request_peer_context_.data); | |
| 463 EXPECT_EQ(4, request_peer_context_.total_encoded_data_length); | |
| 464 } | |
| 465 | |
| 466 TEST_F(URLLoaderClientImplTest, CancelRequestDuringFlusingDeferredMessage) { | |
|
kinuko
2016/12/23 13:11:23
nit: Flusing -> Flushing
yhirano
2016/12/26 05:08:35
Done.
| |
| 467 request_peer_context_.cancel_on_receive_response = true; | |
| 468 | |
| 469 ResourceResponseHead response_head; | |
| 470 ResourceRequestCompletionStatus completion_status; | |
| 471 | |
| 472 url_loader_client_->OnReceiveResponse(response_head, nullptr); | |
| 473 mojo::DataPipe data_pipe(DataPipeOptions()); | |
| 474 uint32_t size = 5; | |
| 475 MojoResult result = | |
| 476 mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size, | |
| 477 MOJO_WRITE_DATA_FLAG_NONE); | |
| 478 ASSERT_EQ(MOJO_RESULT_OK, result); | |
| 479 EXPECT_EQ(5u, size); | |
| 480 data_pipe.producer_handle.reset(); | |
| 481 | |
| 482 url_loader_client_->OnStartLoadingResponseBody( | |
| 483 std::move(data_pipe.consumer_handle)); | |
| 484 url_loader_client_->OnTransferSizeUpdated(4); | |
| 485 url_loader_client_->OnComplete(completion_status); | |
| 486 | |
| 487 EXPECT_FALSE(request_peer_context_.received_response); | |
| 488 EXPECT_FALSE(request_peer_context_.complete); | |
| 489 EXPECT_EQ("", request_peer_context_.data); | |
| 490 EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); | |
| 491 | |
| 492 dispatcher_->SetDefersLoading(request_id_, true); | |
| 493 | |
| 494 base::RunLoop().RunUntilIdle(); | |
| 495 EXPECT_FALSE(request_peer_context_.received_response); | |
| 496 EXPECT_FALSE(request_peer_context_.complete); | |
| 497 EXPECT_EQ("", request_peer_context_.data); | |
| 498 EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); | |
| 499 | |
| 500 dispatcher_->SetDefersLoading(request_id_, false); | |
| 501 EXPECT_FALSE(request_peer_context_.received_response); | |
| 502 EXPECT_FALSE(request_peer_context_.complete); | |
| 503 EXPECT_EQ("", request_peer_context_.data); | |
| 504 EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); | |
| 505 | |
| 506 base::RunLoop().RunUntilIdle(); | |
| 507 EXPECT_TRUE(request_peer_context_.received_response); | |
| 508 EXPECT_FALSE(request_peer_context_.complete); | |
| 509 EXPECT_EQ("", request_peer_context_.data); | |
| 510 EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); | |
| 511 EXPECT_TRUE(request_peer_context_.cancelled); | |
| 512 } | |
| 513 | |
| 514 TEST_F(URLLoaderClientImplTest, SetDeferredDuringFlusingDeferredMessage) { | |
|
kinuko
2016/12/23 13:11:24
ditto
yhirano
2016/12/26 05:08:35
Done.
| |
| 515 request_peer_context_.defer_on_redirect = true; | |
| 516 | |
| 517 net::RedirectInfo redirect_info; | |
| 518 ResourceResponseHead response_head; | |
| 519 ResourceRequestCompletionStatus completion_status; | |
| 520 | |
| 521 url_loader_client_->OnReceiveRedirect(redirect_info, response_head); | |
| 522 url_loader_client_->OnReceiveResponse(response_head, nullptr); | |
| 523 mojo::DataPipe data_pipe(DataPipeOptions()); | |
| 524 uint32_t size = 5; | |
| 525 MojoResult result = | |
| 526 mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size, | |
| 527 MOJO_WRITE_DATA_FLAG_NONE); | |
| 528 ASSERT_EQ(MOJO_RESULT_OK, result); | |
| 529 EXPECT_EQ(5u, size); | |
| 530 data_pipe.producer_handle.reset(); | |
| 531 | |
| 532 url_loader_client_->OnStartLoadingResponseBody( | |
| 533 std::move(data_pipe.consumer_handle)); | |
| 534 url_loader_client_->OnTransferSizeUpdated(4); | |
| 535 url_loader_client_->OnComplete(completion_status); | |
| 536 | |
| 537 EXPECT_EQ(0, request_peer_context_.seen_redirects); | |
| 538 EXPECT_FALSE(request_peer_context_.received_response); | |
| 539 EXPECT_FALSE(request_peer_context_.complete); | |
| 540 EXPECT_EQ("", request_peer_context_.data); | |
| 541 EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); | |
| 542 | |
| 543 dispatcher_->SetDefersLoading(request_id_, true); | |
| 544 | |
| 545 base::RunLoop().RunUntilIdle(); | |
| 546 EXPECT_EQ(0, request_peer_context_.seen_redirects); | |
| 547 EXPECT_FALSE(request_peer_context_.received_response); | |
| 548 EXPECT_FALSE(request_peer_context_.complete); | |
| 549 EXPECT_EQ("", request_peer_context_.data); | |
| 550 EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); | |
| 551 | |
| 552 dispatcher_->SetDefersLoading(request_id_, false); | |
| 553 EXPECT_EQ(0, request_peer_context_.seen_redirects); | |
| 554 EXPECT_FALSE(request_peer_context_.received_response); | |
| 555 EXPECT_FALSE(request_peer_context_.complete); | |
| 556 EXPECT_EQ("", request_peer_context_.data); | |
| 557 EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); | |
| 558 | |
| 559 base::RunLoop().RunUntilIdle(); | |
| 560 EXPECT_EQ(1, request_peer_context_.seen_redirects); | |
| 561 EXPECT_FALSE(request_peer_context_.received_response); | |
| 562 EXPECT_FALSE(request_peer_context_.complete); | |
| 563 EXPECT_EQ("", request_peer_context_.data); | |
| 564 EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); | |
| 565 EXPECT_FALSE(request_peer_context_.cancelled); | |
| 566 | |
| 567 dispatcher_->SetDefersLoading(request_id_, false); | |
| 568 base::RunLoop().RunUntilIdle(); | |
| 569 EXPECT_EQ(1, request_peer_context_.seen_redirects); | |
| 570 EXPECT_TRUE(request_peer_context_.received_response); | |
| 571 EXPECT_TRUE(request_peer_context_.complete); | |
| 572 EXPECT_EQ("hello", request_peer_context_.data); | |
| 573 EXPECT_EQ(4, request_peer_context_.total_encoded_data_length); | |
| 574 EXPECT_FALSE(request_peer_context_.cancelled); | |
| 575 } | |
| 576 | |
| 354 } // namespace content | 577 } // namespace content |
| OLD | NEW |