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 |