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) { |
| 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 |