Index: components/offline_pages/background/request_coordinator_unittest.cc |
diff --git a/components/offline_pages/background/request_coordinator_unittest.cc b/components/offline_pages/background/request_coordinator_unittest.cc |
index 0cfd54b476e58847e04495004bb839e1e5a6a980..df195f785f2a3398eef76d59ef4cea19a746fbf8 100644 |
--- a/components/offline_pages/background/request_coordinator_unittest.cc |
+++ b/components/offline_pages/background/request_coordinator_unittest.cc |
@@ -262,6 +262,9 @@ class RequestCoordinatorTest |
void GetQueuedRequestsDone( |
std::vector<std::unique_ptr<SavePageRequest>> requests); |
+ void SetupForOfflinerDoneCallbackTest( |
+ offline_pages::SavePageRequest* request); |
+ |
void SendOfflinerDoneCallback(const SavePageRequest& request, |
Offliner::RequestStatus status); |
@@ -290,6 +293,19 @@ class RequestCoordinatorTest |
coordinator()->SetNetworkConditionsForTest(connection); |
} |
+ void SetIsLowEndDeviceForTest(bool is_low_end_device) { |
+ coordinator()->is_low_end_device_ = is_low_end_device; |
+ } |
+ |
+ void SetProcessingStateForTest( |
+ RequestCoordinator::ProcessingWindowState processing_state) { |
+ coordinator()->processing_state_ = processing_state; |
+ } |
+ |
+ void SetOperationStartTimeForTest(base::Time start_time) { |
+ coordinator()->operation_start_time_ = start_time; |
+ } |
+ |
void SetEffectiveConnectionTypeForTest(net::EffectiveConnectionType type) { |
network_quality_estimator_->SetEffectiveConnectionTypeForTest(type); |
} |
@@ -403,6 +419,33 @@ void RequestCoordinatorTest::AddRequestDone( |
RequestQueue::AddRequestResult result, |
const SavePageRequest& request) {} |
+void RequestCoordinatorTest::SetupForOfflinerDoneCallbackTest( |
+ offline_pages::SavePageRequest* request) { |
+ // Mark request as started and add it to the queue, |
+ // then wait for callback to finish. |
+ request->MarkAttemptStarted(base::Time::Now()); |
+ coordinator()->queue()->AddRequest( |
+ *request, base::Bind(&RequestCoordinatorTest::AddRequestDone, |
+ base::Unretained(this))); |
+ PumpLoop(); |
+ |
+ // Override the processing callback for test visiblity. |
+ base::Callback<void(bool)> callback = |
+ base::Bind(&RequestCoordinatorTest::ImmediateScheduleCallbackFunction, |
+ base::Unretained(this)); |
+ coordinator()->SetProcessingCallbackForTest(callback); |
+ |
+ // Mock that coordinator is in actively processing state starting now. |
+ SetProcessingStateForTest( |
+ RequestCoordinator::ProcessingWindowState::IMMEDIATE_WINDOW); |
+ SetOperationStartTimeForTest(base::Time::Now()); |
+ |
+ // Set up good device conditions for the test. |
+ DeviceConditions device_conditions(false, 75, |
+ net::NetworkChangeNotifier::CONNECTION_3G); |
+ SetDeviceConditionsForTest(device_conditions); |
+} |
+ |
void RequestCoordinatorTest::SendOfflinerDoneCallback( |
const SavePageRequest& request, Offliner::RequestStatus status) { |
// Using the fact that the test class is a friend, call to the callback |
@@ -553,23 +596,7 @@ TEST_F(RequestCoordinatorTest, OfflinerDoneRequestSucceeded) { |
// Add a request to the queue, wait for callbacks to finish. |
offline_pages::SavePageRequest request( |
kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested); |
- request.MarkAttemptStarted(base::Time::Now()); |
- coordinator()->queue()->AddRequest( |
- request, |
- base::Bind(&RequestCoordinatorTest::AddRequestDone, |
- base::Unretained(this))); |
- PumpLoop(); |
- |
- // We need to give a callback to the request. |
- base::Callback<void(bool)> callback = |
- base::Bind(&RequestCoordinatorTest::ImmediateScheduleCallbackFunction, |
- base::Unretained(this)); |
- coordinator()->SetProcessingCallbackForTest(callback); |
- |
- // Set up device conditions for the test. |
- DeviceConditions device_conditions( |
- false, 75, net::NetworkChangeNotifier::CONNECTION_3G); |
- SetDeviceConditionsForTest(device_conditions); |
+ SetupForOfflinerDoneCallbackTest(&request); |
// Call the OfflinerDoneCallback to simulate the page being completed, wait |
// for callbacks. |
@@ -598,12 +625,7 @@ TEST_F(RequestCoordinatorTest, OfflinerDoneRequestFailed) { |
// Add a request to the queue, wait for callbacks to finish. |
offline_pages::SavePageRequest request( |
kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested); |
- request.MarkAttemptStarted(base::Time::Now()); |
- coordinator()->queue()->AddRequest( |
- request, |
- base::Bind(&RequestCoordinatorTest::AddRequestDone, |
- base::Unretained(this))); |
- PumpLoop(); |
+ SetupForOfflinerDoneCallbackTest(&request); |
// Add second request to the queue to check handling when first fails. |
offline_pages::SavePageRequest request2( |
@@ -614,22 +636,14 @@ TEST_F(RequestCoordinatorTest, OfflinerDoneRequestFailed) { |
base::Unretained(this))); |
PumpLoop(); |
- // We need to give a callback to the request. |
- base::Callback<void(bool)> callback = |
- base::Bind(&RequestCoordinatorTest::ImmediateScheduleCallbackFunction, |
- base::Unretained(this)); |
- coordinator()->SetProcessingCallbackForTest(callback); |
- |
- // Set up device conditions for the test. |
- DeviceConditions device_conditions( |
- false, 75, net::NetworkChangeNotifier::CONNECTION_3G); |
- SetDeviceConditionsForTest(device_conditions); |
- |
// Call the OfflinerDoneCallback to simulate the request failed, wait |
// for callbacks. |
SendOfflinerDoneCallback(request, |
Offliner::RequestStatus::PRERENDERING_FAILED); |
PumpLoop(); |
+ |
+ // For retriable failure, processing should stop and scheduler callback |
+ // called (so that request can be retried first next processing window). |
EXPECT_TRUE(immediate_schedule_callback_called()); |
// TODO(dougarnett): Consider injecting mock RequestPicker for this test |
@@ -655,11 +669,7 @@ TEST_F(RequestCoordinatorTest, OfflinerDoneRequestFailedNoRetryFailure) { |
// Add a request to the queue, wait for callbacks to finish. |
offline_pages::SavePageRequest request(kRequestId1, kUrl1, kClientId1, |
base::Time::Now(), kUserRequested); |
- request.MarkAttemptStarted(base::Time::Now()); |
- coordinator()->queue()->AddRequest( |
- request, base::Bind(&RequestCoordinatorTest::AddRequestDone, |
- base::Unretained(this))); |
- PumpLoop(); |
+ SetupForOfflinerDoneCallbackTest(&request); |
// Add second request to the queue to check handling when first fails. |
offline_pages::SavePageRequest request2(kRequestId2, kUrl2, kClientId2, |
@@ -669,23 +679,15 @@ TEST_F(RequestCoordinatorTest, OfflinerDoneRequestFailedNoRetryFailure) { |
base::Unretained(this))); |
PumpLoop(); |
- // We need to give a callback to the request. |
- base::Callback<void(bool)> callback = |
- base::Bind(&RequestCoordinatorTest::ImmediateScheduleCallbackFunction, |
- base::Unretained(this)); |
- coordinator()->SetProcessingCallbackForTest(callback); |
- |
- // Set up device conditions for the test. |
- DeviceConditions device_conditions(false, 75, |
- net::NetworkChangeNotifier::CONNECTION_3G); |
- SetDeviceConditionsForTest(device_conditions); |
- |
// Call the OfflinerDoneCallback to simulate the request failed, wait |
// for callbacks. |
SendOfflinerDoneCallback( |
request, Offliner::RequestStatus::PRERENDERING_FAILED_NO_RETRY); |
PumpLoop(); |
- EXPECT_TRUE(immediate_schedule_callback_called()); |
+ |
+ // For no retry failure, processing should continue to 2nd request so |
+ // no scheduler callback yet. |
+ EXPECT_FALSE(immediate_schedule_callback_called()); |
// TODO(dougarnett): Consider injecting mock RequestPicker for this test |
// and verifying that there is as attempt to pick another request following |
@@ -708,22 +710,7 @@ TEST_F(RequestCoordinatorTest, OfflinerDoneForegroundCancel) { |
// Add a request to the queue, wait for callbacks to finish. |
offline_pages::SavePageRequest request( |
kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested); |
- request.MarkAttemptStarted(base::Time::Now()); |
- coordinator()->queue()->AddRequest( |
- request, base::Bind(&RequestCoordinatorTest::AddRequestDone, |
- base::Unretained(this))); |
- PumpLoop(); |
- |
- // We need to give a callback to the request. |
- base::Callback<void(bool)> callback = |
- base::Bind(&RequestCoordinatorTest::ImmediateScheduleCallbackFunction, |
- base::Unretained(this)); |
- coordinator()->SetProcessingCallbackForTest(callback); |
- |
- // Set up device conditions for the test. |
- DeviceConditions device_conditions(false, 75, |
- net::NetworkChangeNotifier::CONNECTION_3G); |
- SetDeviceConditionsForTest(device_conditions); |
+ SetupForOfflinerDoneCallbackTest(&request); |
// Call the OfflinerDoneCallback to simulate the request failed, wait |
// for callbacks. |
@@ -747,22 +734,7 @@ TEST_F(RequestCoordinatorTest, OfflinerDonePrerenderingCancel) { |
// Add a request to the queue, wait for callbacks to finish. |
offline_pages::SavePageRequest request(kRequestId1, kUrl1, kClientId1, |
base::Time::Now(), kUserRequested); |
- request.MarkAttemptStarted(base::Time::Now()); |
- coordinator()->queue()->AddRequest( |
- request, base::Bind(&RequestCoordinatorTest::AddRequestDone, |
- base::Unretained(this))); |
- PumpLoop(); |
- |
- // We need to give a callback to the request. |
- base::Callback<void(bool)> callback = |
- base::Bind(&RequestCoordinatorTest::ImmediateScheduleCallbackFunction, |
- base::Unretained(this)); |
- coordinator()->SetProcessingCallbackForTest(callback); |
- |
- // Set up device conditions for the test. |
- DeviceConditions device_conditions(false, 75, |
- net::NetworkChangeNotifier::CONNECTION_3G); |
- SetDeviceConditionsForTest(device_conditions); |
+ SetupForOfflinerDoneCallbackTest(&request); |
// Call the OfflinerDoneCallback to simulate the request failed, wait |
// for callbacks. |
@@ -1107,9 +1079,8 @@ TEST_F(RequestCoordinatorTest, WatchdogTimeoutForScheduledProcessing) { |
} |
TEST_F(RequestCoordinatorTest, WatchdogTimeoutForImmediateProcessing) { |
- // Test only applies on non-svelte device. |
- if (base::SysInfo::IsLowEndDevice()) |
- return; |
+ // If low end device, pretend it is not so that immediate start happens. |
+ SetIsLowEndDeviceForTest(false); |
// Set good network connection so that adding request will trigger |
// immediate processing. |