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 |