Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(181)

Side by Side Diff: content/child/url_loader_client_impl_unittest.cc

Issue 2591383003: Implement SetDefersLoading on content::URLLoaderClientImpl (Closed)
Patch Set: fix Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698