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

Side by Side Diff: components/offline_pages/background/request_coordinator_unittest.cc

Issue 2431193003: [Offline Pages] Defines longer processing budget for immediate bg loads. (Closed)
Patch Set: Fix merge issue Created 4 years, 2 months 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
« no previous file with comments | « components/offline_pages/background/request_coordinator.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "components/offline_pages/background/request_coordinator.h" 5 #include "components/offline_pages/background/request_coordinator.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 void GetRequestsDone(RequestQueue::GetRequestsResult result, 255 void GetRequestsDone(RequestQueue::GetRequestsResult result,
256 std::vector<std::unique_ptr<SavePageRequest>> requests); 256 std::vector<std::unique_ptr<SavePageRequest>> requests);
257 257
258 // Callback for removing requests. 258 // Callback for removing requests.
259 void RemoveRequestsDone(const MultipleItemStatuses& results); 259 void RemoveRequestsDone(const MultipleItemStatuses& results);
260 260
261 // Callback for getting request statuses. 261 // Callback for getting request statuses.
262 void GetQueuedRequestsDone( 262 void GetQueuedRequestsDone(
263 std::vector<std::unique_ptr<SavePageRequest>> requests); 263 std::vector<std::unique_ptr<SavePageRequest>> requests);
264 264
265 void SetupForOfflinerDoneCallbackTest(
266 offline_pages::SavePageRequest* request);
267
265 void SendOfflinerDoneCallback(const SavePageRequest& request, 268 void SendOfflinerDoneCallback(const SavePageRequest& request,
266 Offliner::RequestStatus status); 269 Offliner::RequestStatus status);
267 270
268 RequestQueue::GetRequestsResult last_get_requests_result() const { 271 RequestQueue::GetRequestsResult last_get_requests_result() const {
269 return last_get_requests_result_; 272 return last_get_requests_result_;
270 } 273 }
271 274
272 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { 275 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const {
273 return last_requests_; 276 return last_requests_;
274 } 277 }
275 278
276 const MultipleItemStatuses& last_remove_results() const { 279 const MultipleItemStatuses& last_remove_results() const {
277 return last_remove_results_; 280 return last_remove_results_;
278 } 281 }
279 282
280 void DisableLoading() { 283 void DisableLoading() {
281 offliner_->disable_loading(); 284 offliner_->disable_loading();
282 } 285 }
283 286
284 void EnableOfflinerCallback(bool enable) { 287 void EnableOfflinerCallback(bool enable) {
285 offliner_->enable_callback(enable); 288 offliner_->enable_callback(enable);
286 } 289 }
287 290
288 void SetNetworkConditionsForTest( 291 void SetNetworkConditionsForTest(
289 net::NetworkChangeNotifier::ConnectionType connection) { 292 net::NetworkChangeNotifier::ConnectionType connection) {
290 coordinator()->SetNetworkConditionsForTest(connection); 293 coordinator()->SetNetworkConditionsForTest(connection);
291 } 294 }
292 295
296 void SetIsLowEndDeviceForTest(bool is_low_end_device) {
297 coordinator()->is_low_end_device_ = is_low_end_device;
298 }
299
300 void SetProcessingStateForTest(
301 RequestCoordinator::ProcessingWindowState processing_state) {
302 coordinator()->processing_state_ = processing_state;
303 }
304
305 void SetOperationStartTimeForTest(base::Time start_time) {
306 coordinator()->operation_start_time_ = start_time;
307 }
308
293 void SetEffectiveConnectionTypeForTest(net::EffectiveConnectionType type) { 309 void SetEffectiveConnectionTypeForTest(net::EffectiveConnectionType type) {
294 network_quality_estimator_->SetEffectiveConnectionTypeForTest(type); 310 network_quality_estimator_->SetEffectiveConnectionTypeForTest(type);
295 } 311 }
296 312
297 void ScheduleForTest() { coordinator_->ScheduleAsNeeded(); } 313 void ScheduleForTest() { coordinator_->ScheduleAsNeeded(); }
298 314
299 void CallRequestNotPicked(bool non_user_requested_tasks_remaining, 315 void CallRequestNotPicked(bool non_user_requested_tasks_remaining,
300 bool disabled_tasks_remaining) { 316 bool disabled_tasks_remaining) {
301 if (disabled_tasks_remaining) 317 if (disabled_tasks_remaining)
302 coordinator_->disabled_requests_.insert(kRequestId1); 318 coordinator_->disabled_requests_.insert(kRequestId1);
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 void RequestCoordinatorTest::GetQueuedRequestsDone( 412 void RequestCoordinatorTest::GetQueuedRequestsDone(
397 std::vector<std::unique_ptr<SavePageRequest>> requests) { 413 std::vector<std::unique_ptr<SavePageRequest>> requests) {
398 last_requests_ = std::move(requests); 414 last_requests_ = std::move(requests);
399 waiter_.Signal(); 415 waiter_.Signal();
400 } 416 }
401 417
402 void RequestCoordinatorTest::AddRequestDone( 418 void RequestCoordinatorTest::AddRequestDone(
403 RequestQueue::AddRequestResult result, 419 RequestQueue::AddRequestResult result,
404 const SavePageRequest& request) {} 420 const SavePageRequest& request) {}
405 421
422 void RequestCoordinatorTest::SetupForOfflinerDoneCallbackTest(
423 offline_pages::SavePageRequest* request) {
424 // Mark request as started and add it to the queue,
425 // then wait for callback to finish.
426 request->MarkAttemptStarted(base::Time::Now());
427 coordinator()->queue()->AddRequest(
428 *request, base::Bind(&RequestCoordinatorTest::AddRequestDone,
429 base::Unretained(this)));
430 PumpLoop();
431
432 // Override the processing callback for test visiblity.
433 base::Callback<void(bool)> callback =
434 base::Bind(&RequestCoordinatorTest::ImmediateScheduleCallbackFunction,
435 base::Unretained(this));
436 coordinator()->SetProcessingCallbackForTest(callback);
437
438 // Mock that coordinator is in actively processing state starting now.
439 SetProcessingStateForTest(
440 RequestCoordinator::ProcessingWindowState::IMMEDIATE_WINDOW);
441 SetOperationStartTimeForTest(base::Time::Now());
442
443 // Set up good device conditions for the test.
444 DeviceConditions device_conditions(false, 75,
445 net::NetworkChangeNotifier::CONNECTION_3G);
446 SetDeviceConditionsForTest(device_conditions);
447 }
448
406 void RequestCoordinatorTest::SendOfflinerDoneCallback( 449 void RequestCoordinatorTest::SendOfflinerDoneCallback(
407 const SavePageRequest& request, Offliner::RequestStatus status) { 450 const SavePageRequest& request, Offliner::RequestStatus status) {
408 // Using the fact that the test class is a friend, call to the callback 451 // Using the fact that the test class is a friend, call to the callback
409 coordinator_->OfflinerDoneCallback(request, status); 452 coordinator_->OfflinerDoneCallback(request, status);
410 } 453 }
411 454
412 TEST_F(RequestCoordinatorTest, StartProcessingWithNoRequests) { 455 TEST_F(RequestCoordinatorTest, StartProcessingWithNoRequests) {
413 DeviceConditions device_conditions(false, 75, 456 DeviceConditions device_conditions(false, 75,
414 net::NetworkChangeNotifier::CONNECTION_3G); 457 net::NetworkChangeNotifier::CONNECTION_3G);
415 base::Callback<void(bool)> callback = 458 base::Callback<void(bool)> callback =
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 scheduler_stub->conditions()->minimum_battery_percentage); 589 scheduler_stub->conditions()->minimum_battery_percentage);
547 590
548 // Check that the observer got the notification that a page is available 591 // Check that the observer got the notification that a page is available
549 EXPECT_TRUE(observer().added_called()); 592 EXPECT_TRUE(observer().added_called());
550 } 593 }
551 594
552 TEST_F(RequestCoordinatorTest, OfflinerDoneRequestSucceeded) { 595 TEST_F(RequestCoordinatorTest, OfflinerDoneRequestSucceeded) {
553 // Add a request to the queue, wait for callbacks to finish. 596 // Add a request to the queue, wait for callbacks to finish.
554 offline_pages::SavePageRequest request( 597 offline_pages::SavePageRequest request(
555 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested); 598 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested);
556 request.MarkAttemptStarted(base::Time::Now()); 599 SetupForOfflinerDoneCallbackTest(&request);
557 coordinator()->queue()->AddRequest(
558 request,
559 base::Bind(&RequestCoordinatorTest::AddRequestDone,
560 base::Unretained(this)));
561 PumpLoop();
562
563 // We need to give a callback to the request.
564 base::Callback<void(bool)> callback =
565 base::Bind(&RequestCoordinatorTest::ImmediateScheduleCallbackFunction,
566 base::Unretained(this));
567 coordinator()->SetProcessingCallbackForTest(callback);
568
569 // Set up device conditions for the test.
570 DeviceConditions device_conditions(
571 false, 75, net::NetworkChangeNotifier::CONNECTION_3G);
572 SetDeviceConditionsForTest(device_conditions);
573 600
574 // Call the OfflinerDoneCallback to simulate the page being completed, wait 601 // Call the OfflinerDoneCallback to simulate the page being completed, wait
575 // for callbacks. 602 // for callbacks.
576 SendOfflinerDoneCallback(request, Offliner::RequestStatus::SAVED); 603 SendOfflinerDoneCallback(request, Offliner::RequestStatus::SAVED);
577 PumpLoop(); 604 PumpLoop();
578 EXPECT_TRUE(immediate_schedule_callback_called()); 605 EXPECT_TRUE(immediate_schedule_callback_called());
579 606
580 // Verify the request gets removed from the queue, and wait for callbacks. 607 // Verify the request gets removed from the queue, and wait for callbacks.
581 coordinator()->queue()->GetRequests( 608 coordinator()->queue()->GetRequests(
582 base::Bind(&RequestCoordinatorTest::GetRequestsDone, 609 base::Bind(&RequestCoordinatorTest::GetRequestsDone,
583 base::Unretained(this))); 610 base::Unretained(this)));
584 PumpLoop(); 611 PumpLoop();
585 612
586 // We should not find any requests in the queue anymore. 613 // We should not find any requests in the queue anymore.
587 // RequestPicker should *not* have tried to start an additional job, 614 // RequestPicker should *not* have tried to start an additional job,
588 // because the request queue is empty now. 615 // because the request queue is empty now.
589 EXPECT_EQ(0UL, last_requests().size()); 616 EXPECT_EQ(0UL, last_requests().size());
590 // Check that the observer got the notification that we succeeded, and that 617 // Check that the observer got the notification that we succeeded, and that
591 // the request got removed from the queue. 618 // the request got removed from the queue.
592 EXPECT_TRUE(observer().completed_called()); 619 EXPECT_TRUE(observer().completed_called());
593 EXPECT_EQ(RequestCoordinator::BackgroundSavePageResult::SUCCESS, 620 EXPECT_EQ(RequestCoordinator::BackgroundSavePageResult::SUCCESS,
594 observer().last_status()); 621 observer().last_status());
595 } 622 }
596 623
597 TEST_F(RequestCoordinatorTest, OfflinerDoneRequestFailed) { 624 TEST_F(RequestCoordinatorTest, OfflinerDoneRequestFailed) {
598 // Add a request to the queue, wait for callbacks to finish. 625 // Add a request to the queue, wait for callbacks to finish.
599 offline_pages::SavePageRequest request( 626 offline_pages::SavePageRequest request(
600 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested); 627 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested);
601 request.MarkAttemptStarted(base::Time::Now()); 628 SetupForOfflinerDoneCallbackTest(&request);
602 coordinator()->queue()->AddRequest(
603 request,
604 base::Bind(&RequestCoordinatorTest::AddRequestDone,
605 base::Unretained(this)));
606 PumpLoop();
607 629
608 // Add second request to the queue to check handling when first fails. 630 // Add second request to the queue to check handling when first fails.
609 offline_pages::SavePageRequest request2( 631 offline_pages::SavePageRequest request2(
610 kRequestId2, kUrl2, kClientId2, base::Time::Now(), kUserRequested); 632 kRequestId2, kUrl2, kClientId2, base::Time::Now(), kUserRequested);
611 coordinator()->queue()->AddRequest( 633 coordinator()->queue()->AddRequest(
612 request2, 634 request2,
613 base::Bind(&RequestCoordinatorTest::AddRequestDone, 635 base::Bind(&RequestCoordinatorTest::AddRequestDone,
614 base::Unretained(this))); 636 base::Unretained(this)));
615 PumpLoop(); 637 PumpLoop();
616 638
617 // We need to give a callback to the request.
618 base::Callback<void(bool)> callback =
619 base::Bind(&RequestCoordinatorTest::ImmediateScheduleCallbackFunction,
620 base::Unretained(this));
621 coordinator()->SetProcessingCallbackForTest(callback);
622
623 // Set up device conditions for the test.
624 DeviceConditions device_conditions(
625 false, 75, net::NetworkChangeNotifier::CONNECTION_3G);
626 SetDeviceConditionsForTest(device_conditions);
627
628 // Call the OfflinerDoneCallback to simulate the request failed, wait 639 // Call the OfflinerDoneCallback to simulate the request failed, wait
629 // for callbacks. 640 // for callbacks.
630 SendOfflinerDoneCallback(request, 641 SendOfflinerDoneCallback(request,
631 Offliner::RequestStatus::PRERENDERING_FAILED); 642 Offliner::RequestStatus::PRERENDERING_FAILED);
632 PumpLoop(); 643 PumpLoop();
644
645 // For retriable failure, processing should stop and scheduler callback
646 // called (so that request can be retried first next processing window).
633 EXPECT_TRUE(immediate_schedule_callback_called()); 647 EXPECT_TRUE(immediate_schedule_callback_called());
634 648
635 // TODO(dougarnett): Consider injecting mock RequestPicker for this test 649 // TODO(dougarnett): Consider injecting mock RequestPicker for this test
636 // and verifying that there is no attempt to pick another request following 650 // and verifying that there is no attempt to pick another request following
637 // this failure code. 651 // this failure code.
638 652
639 coordinator()->queue()->GetRequests( 653 coordinator()->queue()->GetRequests(
640 base::Bind(&RequestCoordinatorTest::GetRequestsDone, 654 base::Bind(&RequestCoordinatorTest::GetRequestsDone,
641 base::Unretained(this))); 655 base::Unretained(this)));
642 PumpLoop(); 656 PumpLoop();
643 657
644 // Now just one request in the queue since failed request removed 658 // Now just one request in the queue since failed request removed
645 // (for single attempt policy). 659 // (for single attempt policy).
646 EXPECT_EQ(1UL, last_requests().size()); 660 EXPECT_EQ(1UL, last_requests().size());
647 // Check that the observer got the notification that we failed (and the 661 // Check that the observer got the notification that we failed (and the
648 // subsequent notification that the request was removed). 662 // subsequent notification that the request was removed).
649 EXPECT_TRUE(observer().completed_called()); 663 EXPECT_TRUE(observer().completed_called());
650 EXPECT_EQ(RequestCoordinator::BackgroundSavePageResult::RETRY_COUNT_EXCEEDED, 664 EXPECT_EQ(RequestCoordinator::BackgroundSavePageResult::RETRY_COUNT_EXCEEDED,
651 observer().last_status()); 665 observer().last_status());
652 } 666 }
653 667
654 TEST_F(RequestCoordinatorTest, OfflinerDoneRequestFailedNoRetryFailure) { 668 TEST_F(RequestCoordinatorTest, OfflinerDoneRequestFailedNoRetryFailure) {
655 // Add a request to the queue, wait for callbacks to finish. 669 // Add a request to the queue, wait for callbacks to finish.
656 offline_pages::SavePageRequest request(kRequestId1, kUrl1, kClientId1, 670 offline_pages::SavePageRequest request(kRequestId1, kUrl1, kClientId1,
657 base::Time::Now(), kUserRequested); 671 base::Time::Now(), kUserRequested);
658 request.MarkAttemptStarted(base::Time::Now()); 672 SetupForOfflinerDoneCallbackTest(&request);
659 coordinator()->queue()->AddRequest(
660 request, base::Bind(&RequestCoordinatorTest::AddRequestDone,
661 base::Unretained(this)));
662 PumpLoop();
663 673
664 // Add second request to the queue to check handling when first fails. 674 // Add second request to the queue to check handling when first fails.
665 offline_pages::SavePageRequest request2(kRequestId2, kUrl2, kClientId2, 675 offline_pages::SavePageRequest request2(kRequestId2, kUrl2, kClientId2,
666 base::Time::Now(), kUserRequested); 676 base::Time::Now(), kUserRequested);
667 coordinator()->queue()->AddRequest( 677 coordinator()->queue()->AddRequest(
668 request2, base::Bind(&RequestCoordinatorTest::AddRequestDone, 678 request2, base::Bind(&RequestCoordinatorTest::AddRequestDone,
669 base::Unretained(this))); 679 base::Unretained(this)));
670 PumpLoop(); 680 PumpLoop();
671 681
672 // We need to give a callback to the request.
673 base::Callback<void(bool)> callback =
674 base::Bind(&RequestCoordinatorTest::ImmediateScheduleCallbackFunction,
675 base::Unretained(this));
676 coordinator()->SetProcessingCallbackForTest(callback);
677
678 // Set up device conditions for the test.
679 DeviceConditions device_conditions(false, 75,
680 net::NetworkChangeNotifier::CONNECTION_3G);
681 SetDeviceConditionsForTest(device_conditions);
682
683 // Call the OfflinerDoneCallback to simulate the request failed, wait 682 // Call the OfflinerDoneCallback to simulate the request failed, wait
684 // for callbacks. 683 // for callbacks.
685 SendOfflinerDoneCallback( 684 SendOfflinerDoneCallback(
686 request, Offliner::RequestStatus::PRERENDERING_FAILED_NO_RETRY); 685 request, Offliner::RequestStatus::PRERENDERING_FAILED_NO_RETRY);
687 PumpLoop(); 686 PumpLoop();
688 EXPECT_TRUE(immediate_schedule_callback_called()); 687
688 // For no retry failure, processing should continue to 2nd request so
689 // no scheduler callback yet.
690 EXPECT_FALSE(immediate_schedule_callback_called());
689 691
690 // TODO(dougarnett): Consider injecting mock RequestPicker for this test 692 // TODO(dougarnett): Consider injecting mock RequestPicker for this test
691 // and verifying that there is as attempt to pick another request following 693 // and verifying that there is as attempt to pick another request following
692 // this non-retryable failure code. 694 // this non-retryable failure code.
693 695
694 coordinator()->queue()->GetRequests(base::Bind( 696 coordinator()->queue()->GetRequests(base::Bind(
695 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this))); 697 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this)));
696 PumpLoop(); 698 PumpLoop();
697 699
698 // Now just one request in the queue since non-retryable failure. 700 // Now just one request in the queue since non-retryable failure.
699 EXPECT_EQ(1UL, last_requests().size()); 701 EXPECT_EQ(1UL, last_requests().size());
700 // Check that the observer got the notification that we failed (and the 702 // Check that the observer got the notification that we failed (and the
701 // subsequent notification that the request was removed). 703 // subsequent notification that the request was removed).
702 EXPECT_TRUE(observer().completed_called()); 704 EXPECT_TRUE(observer().completed_called());
703 EXPECT_EQ(RequestCoordinator::BackgroundSavePageResult::PRERENDER_FAILURE, 705 EXPECT_EQ(RequestCoordinator::BackgroundSavePageResult::PRERENDER_FAILURE,
704 observer().last_status()); 706 observer().last_status());
705 } 707 }
706 708
707 TEST_F(RequestCoordinatorTest, OfflinerDoneForegroundCancel) { 709 TEST_F(RequestCoordinatorTest, OfflinerDoneForegroundCancel) {
708 // Add a request to the queue, wait for callbacks to finish. 710 // Add a request to the queue, wait for callbacks to finish.
709 offline_pages::SavePageRequest request( 711 offline_pages::SavePageRequest request(
710 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested); 712 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested);
711 request.MarkAttemptStarted(base::Time::Now()); 713 SetupForOfflinerDoneCallbackTest(&request);
712 coordinator()->queue()->AddRequest(
713 request, base::Bind(&RequestCoordinatorTest::AddRequestDone,
714 base::Unretained(this)));
715 PumpLoop();
716
717 // We need to give a callback to the request.
718 base::Callback<void(bool)> callback =
719 base::Bind(&RequestCoordinatorTest::ImmediateScheduleCallbackFunction,
720 base::Unretained(this));
721 coordinator()->SetProcessingCallbackForTest(callback);
722
723 // Set up device conditions for the test.
724 DeviceConditions device_conditions(false, 75,
725 net::NetworkChangeNotifier::CONNECTION_3G);
726 SetDeviceConditionsForTest(device_conditions);
727 714
728 // Call the OfflinerDoneCallback to simulate the request failed, wait 715 // Call the OfflinerDoneCallback to simulate the request failed, wait
729 // for callbacks. 716 // for callbacks.
730 SendOfflinerDoneCallback(request, 717 SendOfflinerDoneCallback(request,
731 Offliner::RequestStatus::FOREGROUND_CANCELED); 718 Offliner::RequestStatus::FOREGROUND_CANCELED);
732 PumpLoop(); 719 PumpLoop();
733 EXPECT_TRUE(immediate_schedule_callback_called()); 720 EXPECT_TRUE(immediate_schedule_callback_called());
734 721
735 // Verify the request is not removed from the queue, and wait for callbacks. 722 // Verify the request is not removed from the queue, and wait for callbacks.
736 coordinator()->queue()->GetRequests(base::Bind( 723 coordinator()->queue()->GetRequests(base::Bind(
737 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this))); 724 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this)));
738 PumpLoop(); 725 PumpLoop();
739 726
740 // Request no longer in the queue (for single attempt policy). 727 // Request no longer in the queue (for single attempt policy).
741 EXPECT_EQ(1UL, last_requests().size()); 728 EXPECT_EQ(1UL, last_requests().size());
742 // Verify foreground cancel not counted as an attempt after all. 729 // Verify foreground cancel not counted as an attempt after all.
743 EXPECT_EQ(0L, last_requests().at(0)->completed_attempt_count()); 730 EXPECT_EQ(0L, last_requests().at(0)->completed_attempt_count());
744 } 731 }
745 732
746 TEST_F(RequestCoordinatorTest, OfflinerDonePrerenderingCancel) { 733 TEST_F(RequestCoordinatorTest, OfflinerDonePrerenderingCancel) {
747 // Add a request to the queue, wait for callbacks to finish. 734 // Add a request to the queue, wait for callbacks to finish.
748 offline_pages::SavePageRequest request(kRequestId1, kUrl1, kClientId1, 735 offline_pages::SavePageRequest request(kRequestId1, kUrl1, kClientId1,
749 base::Time::Now(), kUserRequested); 736 base::Time::Now(), kUserRequested);
750 request.MarkAttemptStarted(base::Time::Now()); 737 SetupForOfflinerDoneCallbackTest(&request);
751 coordinator()->queue()->AddRequest(
752 request, base::Bind(&RequestCoordinatorTest::AddRequestDone,
753 base::Unretained(this)));
754 PumpLoop();
755
756 // We need to give a callback to the request.
757 base::Callback<void(bool)> callback =
758 base::Bind(&RequestCoordinatorTest::ImmediateScheduleCallbackFunction,
759 base::Unretained(this));
760 coordinator()->SetProcessingCallbackForTest(callback);
761
762 // Set up device conditions for the test.
763 DeviceConditions device_conditions(false, 75,
764 net::NetworkChangeNotifier::CONNECTION_3G);
765 SetDeviceConditionsForTest(device_conditions);
766 738
767 // Call the OfflinerDoneCallback to simulate the request failed, wait 739 // Call the OfflinerDoneCallback to simulate the request failed, wait
768 // for callbacks. 740 // for callbacks.
769 SendOfflinerDoneCallback(request, 741 SendOfflinerDoneCallback(request,
770 Offliner::RequestStatus::PRERENDERING_CANCELED); 742 Offliner::RequestStatus::PRERENDERING_CANCELED);
771 PumpLoop(); 743 PumpLoop();
772 EXPECT_TRUE(immediate_schedule_callback_called()); 744 EXPECT_TRUE(immediate_schedule_callback_called());
773 745
774 // Verify the request is not removed from the queue, and wait for callbacks. 746 // Verify the request is not removed from the queue, and wait for callbacks.
775 coordinator()->queue()->GetRequests(base::Bind( 747 coordinator()->queue()->GetRequests(base::Bind(
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
1100 WaitForCallback(); 1072 WaitForCallback();
1101 PumpLoop(); 1073 PumpLoop();
1102 1074
1103 EXPECT_FALSE(is_starting()); 1075 EXPECT_FALSE(is_starting());
1104 EXPECT_TRUE(OfflinerWasCanceled()); 1076 EXPECT_TRUE(OfflinerWasCanceled());
1105 EXPECT_EQ(Offliner::RequestStatus::REQUEST_COORDINATOR_TIMED_OUT, 1077 EXPECT_EQ(Offliner::RequestStatus::REQUEST_COORDINATOR_TIMED_OUT,
1106 last_offlining_status()); 1078 last_offlining_status());
1107 } 1079 }
1108 1080
1109 TEST_F(RequestCoordinatorTest, WatchdogTimeoutForImmediateProcessing) { 1081 TEST_F(RequestCoordinatorTest, WatchdogTimeoutForImmediateProcessing) {
1110 // Test only applies on non-svelte device. 1082 // If low end device, pretend it is not so that immediate start happens.
1111 if (base::SysInfo::IsLowEndDevice()) 1083 SetIsLowEndDeviceForTest(false);
1112 return;
1113 1084
1114 // Set good network connection so that adding request will trigger 1085 // Set good network connection so that adding request will trigger
1115 // immediate processing. 1086 // immediate processing.
1116 SetEffectiveConnectionTypeForTest( 1087 SetEffectiveConnectionTypeForTest(
1117 net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_3G); 1088 net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_3G);
1118 1089
1119 // Ensure that the new request does not finish - we simulate it being 1090 // Ensure that the new request does not finish - we simulate it being
1120 // in progress by asking it to skip making the completion callback. 1091 // in progress by asking it to skip making the completion callback.
1121 EnableOfflinerCallback(false); 1092 EnableOfflinerCallback(false);
1122 1093
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
1360 // Now whether processing triggered immediately depends on whether test 1331 // Now whether processing triggered immediately depends on whether test
1361 // is run on svelte device or not. 1332 // is run on svelte device or not.
1362 if (base::SysInfo::IsLowEndDevice()) { 1333 if (base::SysInfo::IsLowEndDevice()) {
1363 EXPECT_FALSE(is_busy()); 1334 EXPECT_FALSE(is_busy());
1364 } else { 1335 } else {
1365 EXPECT_TRUE(is_busy()); 1336 EXPECT_TRUE(is_busy());
1366 } 1337 }
1367 } 1338 }
1368 1339
1369 } // namespace offline_pages 1340 } // namespace offline_pages
OLDNEW
« no previous file with comments | « components/offline_pages/background/request_coordinator.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698