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 "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 <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 const int kBatteryPercentageHigh = 75; | 44 const int kBatteryPercentageHigh = 75; |
45 const bool kPowerRequired = true; | 45 const bool kPowerRequired = true; |
46 const bool kUserRequested = true; | 46 const bool kUserRequested = true; |
47 const int kAttemptCount = 1; | 47 const int kAttemptCount = 1; |
48 } // namespace | 48 } // namespace |
49 | 49 |
50 class SchedulerStub : public Scheduler { | 50 class SchedulerStub : public Scheduler { |
51 public: | 51 public: |
52 SchedulerStub() | 52 SchedulerStub() |
53 : schedule_called_(false), | 53 : schedule_called_(false), |
| 54 backup_schedule_called_(false), |
54 unschedule_called_(false), | 55 unschedule_called_(false), |
| 56 schedule_delay_(0L), |
55 conditions_(false, 0, false) {} | 57 conditions_(false, 0, false) {} |
56 | 58 |
57 void Schedule(const TriggerConditions& trigger_conditions) override { | 59 void Schedule(const TriggerConditions& trigger_conditions) override { |
58 schedule_called_ = true; | 60 schedule_called_ = true; |
59 conditions_ = trigger_conditions; | 61 conditions_ = trigger_conditions; |
60 } | 62 } |
61 | 63 |
| 64 void BackupSchedule(const TriggerConditions& trigger_conditions, |
| 65 long delay_in_seconds) override { |
| 66 backup_schedule_called_ = true; |
| 67 schedule_delay_ = delay_in_seconds; |
| 68 conditions_ = trigger_conditions; |
| 69 } |
| 70 |
| 71 |
62 // Unschedules the currently scheduled task, if any. | 72 // Unschedules the currently scheduled task, if any. |
63 void Unschedule() override { | 73 void Unschedule() override { |
64 unschedule_called_ = true; | 74 unschedule_called_ = true; |
65 } | 75 } |
66 | 76 |
67 bool schedule_called() const { return schedule_called_; } | 77 bool schedule_called() const { return schedule_called_; } |
68 | 78 |
| 79 bool backup_schedule_called() const { return backup_schedule_called_;} |
| 80 |
69 bool unschedule_called() const { return unschedule_called_; } | 81 bool unschedule_called() const { return unschedule_called_; } |
70 | 82 |
71 TriggerConditions const* conditions() const { return &conditions_; } | 83 TriggerConditions const* conditions() const { return &conditions_; } |
72 | 84 |
73 private: | 85 private: |
74 bool schedule_called_; | 86 bool schedule_called_; |
| 87 bool backup_schedule_called_; |
75 bool unschedule_called_; | 88 bool unschedule_called_; |
| 89 long schedule_delay_; |
76 TriggerConditions conditions_; | 90 TriggerConditions conditions_; |
77 }; | 91 }; |
78 | 92 |
79 class OfflinerStub : public Offliner { | 93 class OfflinerStub : public Offliner { |
80 public: | 94 public: |
81 OfflinerStub() | 95 OfflinerStub() |
82 : request_(kRequestId1, kUrl1, kClientId1, base::Time::Now(), | 96 : request_(kRequestId1, kUrl1, kClientId1, base::Time::Now(), |
83 kUserRequested), | 97 kUserRequested), |
84 disable_loading_(false), | 98 disable_loading_(false), |
85 enable_callback_(false), | 99 enable_callback_(false), |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 net::NetworkChangeNotifier::ConnectionType connection) { | 289 net::NetworkChangeNotifier::ConnectionType connection) { |
276 coordinator()->SetNetworkConditionsForTest(connection); | 290 coordinator()->SetNetworkConditionsForTest(connection); |
277 } | 291 } |
278 | 292 |
279 void SetEffectiveConnectionTypeForTest(net::EffectiveConnectionType type) { | 293 void SetEffectiveConnectionTypeForTest(net::EffectiveConnectionType type) { |
280 network_quality_estimator_->SetEffectiveConnectionTypeForTest(type); | 294 network_quality_estimator_->SetEffectiveConnectionTypeForTest(type); |
281 } | 295 } |
282 | 296 |
283 void ScheduleForTest() { coordinator_->ScheduleAsNeeded(); } | 297 void ScheduleForTest() { coordinator_->ScheduleAsNeeded(); } |
284 | 298 |
285 void CallRequestNotPicked(bool non_user_requested_tasks_remaining) { | 299 void CallRequestNotPicked(bool non_user_requested_tasks_remaining, |
| 300 bool disabled_tasks_remaining) { |
| 301 if (disabled_tasks_remaining) |
| 302 coordinator_->disabled_requests_.insert(kRequestId1); |
| 303 else |
| 304 coordinator_->disabled_requests_.clear(); |
| 305 |
286 coordinator_->RequestNotPicked(non_user_requested_tasks_remaining); | 306 coordinator_->RequestNotPicked(non_user_requested_tasks_remaining); |
287 } | 307 } |
288 | 308 |
289 void SetOfflinerTimeoutForTest(const base::TimeDelta& timeout) { | 309 void SetOfflinerTimeoutForTest(const base::TimeDelta& timeout) { |
290 coordinator_->SetOfflinerTimeoutForTest(timeout); | 310 coordinator_->SetOfflinerTimeoutForTest(timeout); |
291 } | 311 } |
292 | 312 |
293 void SetDeviceConditionsForTest(DeviceConditions device_conditions) { | 313 void SetDeviceConditionsForTest(DeviceConditions device_conditions) { |
294 coordinator_->SetDeviceConditionsForTest(device_conditions); | 314 coordinator_->SetDeviceConditionsForTest(device_conditions); |
295 } | 315 } |
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
680 // Request still in the queue. | 700 // Request still in the queue. |
681 EXPECT_EQ(1UL, last_requests().size()); | 701 EXPECT_EQ(1UL, last_requests().size()); |
682 // Verify prerendering cancel not counted as an attempt after all. | 702 // Verify prerendering cancel not counted as an attempt after all. |
683 const std::unique_ptr<SavePageRequest>& found_request = | 703 const std::unique_ptr<SavePageRequest>& found_request = |
684 last_requests().front(); | 704 last_requests().front(); |
685 EXPECT_EQ(0L, found_request->completed_attempt_count()); | 705 EXPECT_EQ(0L, found_request->completed_attempt_count()); |
686 } | 706 } |
687 | 707 |
688 // If one item completes, and there are no more user requeted items left, | 708 // If one item completes, and there are no more user requeted items left, |
689 // we should make a scheduler entry for a non-user requested item. | 709 // we should make a scheduler entry for a non-user requested item. |
| 710 TEST_F(RequestCoordinatorTest, RequestNotPickedDisabledItemsRemain) { |
| 711 // Call start processing just to set up a scheduler callback. |
| 712 DeviceConditions device_conditions(false, 75, |
| 713 net::NetworkChangeNotifier::CONNECTION_3G); |
| 714 base::Callback<void(bool)> callback = base::Bind( |
| 715 &RequestCoordinatorTest::EmptyCallbackFunction, base::Unretained(this)); |
| 716 coordinator()->StartProcessing(device_conditions, callback); |
| 717 EXPECT_TRUE(is_starting()); |
| 718 |
| 719 // Call RequestNotPicked, simulating a request on the disabled list. |
| 720 CallRequestNotPicked(false, true); |
| 721 PumpLoop(); |
| 722 |
| 723 EXPECT_FALSE(is_starting()); |
| 724 |
| 725 // The scheduler should have been called to schedule the disabled task for |
| 726 // 5 minutes from now. |
| 727 SchedulerStub* scheduler_stub = |
| 728 reinterpret_cast<SchedulerStub*>(coordinator()->scheduler()); |
| 729 EXPECT_TRUE(scheduler_stub->backup_schedule_called()); |
| 730 EXPECT_TRUE(scheduler_stub->unschedule_called()); |
| 731 } |
| 732 |
| 733 // If one item completes, and there are no more user requeted items left, |
| 734 // we should make a scheduler entry for a non-user requested item. |
690 TEST_F(RequestCoordinatorTest, RequestNotPickedNonUserRequestedItemsRemain) { | 735 TEST_F(RequestCoordinatorTest, RequestNotPickedNonUserRequestedItemsRemain) { |
691 // Call start processing just to set up a scheduler callback. | 736 // Call start processing just to set up a scheduler callback. |
692 DeviceConditions device_conditions(false, 75, | 737 DeviceConditions device_conditions(false, 75, |
693 net::NetworkChangeNotifier::CONNECTION_3G); | 738 net::NetworkChangeNotifier::CONNECTION_3G); |
694 base::Callback<void(bool)> callback = base::Bind( | 739 base::Callback<void(bool)> callback = base::Bind( |
695 &RequestCoordinatorTest::EmptyCallbackFunction, base::Unretained(this)); | 740 &RequestCoordinatorTest::EmptyCallbackFunction, base::Unretained(this)); |
696 coordinator()->StartProcessing(device_conditions, callback); | 741 coordinator()->StartProcessing(device_conditions, callback); |
697 EXPECT_TRUE(is_starting()); | 742 EXPECT_TRUE(is_starting()); |
698 | 743 |
699 // Call RequestNotPicked, and make sure we pick schedule a task for non user | 744 // Call RequestNotPicked, and make sure we pick schedule a task for non user |
700 // requested conditions. | 745 // requested conditions, with no tasks on the disabled list. |
701 CallRequestNotPicked(true); | 746 CallRequestNotPicked(true, false); |
702 PumpLoop(); | 747 PumpLoop(); |
703 | 748 |
704 EXPECT_FALSE(is_starting()); | 749 EXPECT_FALSE(is_starting()); |
705 | 750 |
706 // The scheduler should have been called to schedule the non-user requested | 751 // The scheduler should have been called to schedule the non-user requested |
707 // task. | 752 // task. |
708 SchedulerStub* scheduler_stub = | 753 SchedulerStub* scheduler_stub = |
709 reinterpret_cast<SchedulerStub*>(coordinator()->scheduler()); | 754 reinterpret_cast<SchedulerStub*>(coordinator()->scheduler()); |
710 EXPECT_TRUE(scheduler_stub->schedule_called()); | 755 EXPECT_TRUE(scheduler_stub->schedule_called()); |
711 EXPECT_TRUE(scheduler_stub->unschedule_called()); | 756 EXPECT_TRUE(scheduler_stub->unschedule_called()); |
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1155 // Now whether processing triggered immediately depends on whether test | 1200 // Now whether processing triggered immediately depends on whether test |
1156 // is run on svelte device or not. | 1201 // is run on svelte device or not. |
1157 if (base::SysInfo::IsLowEndDevice()) { | 1202 if (base::SysInfo::IsLowEndDevice()) { |
1158 EXPECT_FALSE(is_busy()); | 1203 EXPECT_FALSE(is_busy()); |
1159 } else { | 1204 } else { |
1160 EXPECT_TRUE(is_busy()); | 1205 EXPECT_TRUE(is_busy()); |
1161 } | 1206 } |
1162 } | 1207 } |
1163 | 1208 |
1164 } // namespace offline_pages | 1209 } // namespace offline_pages |
OLD | NEW |