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, SetDeferredDuringFlushingDeferredMessage) { | |
| 467 request_peer_context_.defer_on_redirect = true; | |
| 468 | |
| 469 net::RedirectInfo redirect_info; | |
| 470 ResourceResponseHead response_head; | |
| 471 ResourceRequestCompletionStatus completion_status; | |
| 472 | |
| 473 url_loader_client_->OnReceiveRedirect(redirect_info, response_head); | |
| 474 url_loader_client_->OnReceiveResponse(response_head, nullptr); | |
| 475 mojo::DataPipe data_pipe(DataPipeOptions()); | |
| 476 uint32_t size = 5; | |
| 477 MojoResult result = | |
| 478 mojo::WriteDataRaw(data_pipe.producer_handle.get(), "hello", &size, | |
| 479 MOJO_WRITE_DATA_FLAG_NONE); | |
| 480 ASSERT_EQ(MOJO_RESULT_OK, result); | |
| 481 EXPECT_EQ(5u, size); | |
| 482 data_pipe.producer_handle.reset(); | |
| 483 | |
| 484 url_loader_client_->OnStartLoadingResponseBody( | |
| 485 std::move(data_pipe.consumer_handle)); | |
| 486 url_loader_client_->OnTransferSizeUpdated(4); | |
| 487 url_loader_client_->OnComplete(completion_status); | |
| 488 | |
| 489 EXPECT_EQ(0, request_peer_context_.seen_redirects); | |
| 490 EXPECT_FALSE(request_peer_context_.received_response); | |
| 491 EXPECT_FALSE(request_peer_context_.complete); | |
| 492 EXPECT_EQ("", request_peer_context_.data); | |
| 493 EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); | |
| 494 | |
| 495 dispatcher_->SetDefersLoading(request_id_, true); | |
| 496 | |
| 497 base::RunLoop().RunUntilIdle(); | |
| 498 EXPECT_EQ(0, request_peer_context_.seen_redirects); | |
| 499 EXPECT_FALSE(request_peer_context_.received_response); | |
| 500 EXPECT_FALSE(request_peer_context_.complete); | |
| 501 EXPECT_EQ("", request_peer_context_.data); | |
| 502 EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); | |
| 503 | |
| 504 dispatcher_->SetDefersLoading(request_id_, false); | |
| 505 EXPECT_EQ(0, request_peer_context_.seen_redirects); | |
| 506 EXPECT_FALSE(request_peer_context_.received_response); | |
| 507 EXPECT_FALSE(request_peer_context_.complete); | |
| 508 EXPECT_EQ("", request_peer_context_.data); | |
| 509 EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); | |
| 510 | |
| 511 base::RunLoop().RunUntilIdle(); | |
| 512 EXPECT_EQ(1, request_peer_context_.seen_redirects); | |
| 513 EXPECT_FALSE(request_peer_context_.received_response); | |
| 514 EXPECT_FALSE(request_peer_context_.complete); | |
| 515 EXPECT_EQ("", request_peer_context_.data); | |
| 516 EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); | |
| 517 EXPECT_FALSE(request_peer_context_.cancelled); | |
| 518 | |
| 519 dispatcher_->SetDefersLoading(request_id_, false); | |
| 520 base::RunLoop().RunUntilIdle(); | |
| 521 EXPECT_EQ(1, request_peer_context_.seen_redirects); | |
| 522 EXPECT_TRUE(request_peer_context_.received_response); | |
| 523 EXPECT_TRUE(request_peer_context_.complete); | |
| 524 EXPECT_EQ("hello", request_peer_context_.data); | |
| 525 EXPECT_EQ(4, request_peer_context_.total_encoded_data_length); | |
| 526 EXPECT_FALSE(request_peer_context_.cancelled); | |
| 527 } | |
| 528 | |
| 529 TEST_F(URLLoaderClientImplTest, | |
| 530 SetDeferredDuringFlushingDeferredMessageOnTransferSizeUpdated) { | |
|
kinuko
2016/12/27 01:52:21
:)
| |
| 531 request_peer_context_.defer_on_transfer_size_updated = true; | |
| 532 | |
| 533 ResourceResponseHead response_head; | |
| 534 ResourceRequestCompletionStatus completion_status; | |
| 535 | |
| 536 url_loader_client_->OnReceiveResponse(response_head, nullptr); | |
| 537 | |
| 538 url_loader_client_->OnTransferSizeUpdated(4); | |
| 539 url_loader_client_->OnComplete(completion_status); | |
| 540 | |
| 541 EXPECT_FALSE(request_peer_context_.received_response); | |
| 542 EXPECT_FALSE(request_peer_context_.complete); | |
| 543 EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); | |
| 544 | |
| 545 dispatcher_->SetDefersLoading(request_id_, true); | |
| 546 | |
| 547 base::RunLoop().RunUntilIdle(); | |
| 548 EXPECT_FALSE(request_peer_context_.received_response); | |
| 549 EXPECT_FALSE(request_peer_context_.complete); | |
| 550 EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); | |
| 551 | |
| 552 dispatcher_->SetDefersLoading(request_id_, false); | |
| 553 EXPECT_FALSE(request_peer_context_.received_response); | |
| 554 EXPECT_FALSE(request_peer_context_.complete); | |
| 555 EXPECT_EQ(0, request_peer_context_.total_encoded_data_length); | |
| 556 | |
| 557 base::RunLoop().RunUntilIdle(); | |
| 558 EXPECT_TRUE(request_peer_context_.received_response); | |
| 559 EXPECT_FALSE(request_peer_context_.complete); | |
| 560 EXPECT_EQ(4, request_peer_context_.total_encoded_data_length); | |
| 561 EXPECT_FALSE(request_peer_context_.cancelled); | |
| 562 | |
| 563 dispatcher_->SetDefersLoading(request_id_, false); | |
| 564 base::RunLoop().RunUntilIdle(); | |
| 565 EXPECT_TRUE(request_peer_context_.received_response); | |
| 566 EXPECT_TRUE(request_peer_context_.complete); | |
| 567 EXPECT_EQ(4, request_peer_context_.total_encoded_data_length); | |
| 568 EXPECT_FALSE(request_peer_context_.cancelled); | |
| 569 } | |
| 570 | |
| 354 } // namespace content | 571 } // namespace content |
| OLD | NEW |