| Index: components/offline_pages/background/request_coordinator.cc
|
| diff --git a/components/offline_pages/background/request_coordinator.cc b/components/offline_pages/background/request_coordinator.cc
|
| index e6588f93757dde5a1862efe193c0fb89d5e2b4bb..eacb00221009df4eeca1e514f9c06029f819cf5d 100644
|
| --- a/components/offline_pages/background/request_coordinator.cc
|
| +++ b/components/offline_pages/background/request_coordinator.cc
|
| @@ -207,21 +207,8 @@ void RequestCoordinator::AddRequestResultCallback(
|
| // Inform the scheduler that we have an outstanding task..
|
| scheduler_->Schedule(GetTriggerConditionsForUserRequest());
|
|
|
| - // If it makes sense, start processing now.
|
| - if (is_busy_) return;
|
| -
|
| - // Check for network
|
| - net::NetworkChangeNotifier::ConnectionType connection = GetConnectionType();
|
| -
|
| - if ((connection !=
|
| - net::NetworkChangeNotifier::ConnectionType::CONNECTION_NONE) &&
|
| - request.user_requested()) {
|
| - // Create device conditions.
|
| - DeviceConditions device_conditions(false, 0, connection);
|
| -
|
| - // Start processing if it makes sense. (net, user requested)
|
| - StartProcessing(device_conditions, base::Bind(&EmptySchedulerCallback));
|
| - }
|
| + if (request.user_requested())
|
| + StartProcessingIfConnected();
|
| }
|
|
|
| // Called in response to updating a request in the request queue.
|
| @@ -241,8 +228,27 @@ void RequestCoordinator::UpdateRequestCallback(
|
| void RequestCoordinator::UpdateMultipleRequestsCallback(
|
| const RequestQueue::UpdateMultipleRequestResults& results,
|
| const std::vector<SavePageRequest>& requests) {
|
| - for (SavePageRequest request : requests)
|
| + bool available_user_request = false;
|
| + for (SavePageRequest request : requests) {
|
| NotifyChanged(request);
|
| + if (!available_user_request && request.user_requested() &&
|
| + request.request_state() == SavePageRequest::RequestState::AVAILABLE) {
|
| + // TODO(dougarnett): Consider avoiding prospect of N^2 in case
|
| + // size of bulk requests can get large (perhaps with easier to consume
|
| + // callback interface).
|
| + for (std::pair<int64_t, RequestQueue::UpdateRequestResult> pair :
|
| + results) {
|
| + if (pair.first == request.request_id() &&
|
| + pair.second == RequestQueue::UpdateRequestResult::SUCCESS) {
|
| + // We have a successfully updated, available, user request.
|
| + available_user_request = true;
|
| + }
|
| + }
|
| + }
|
| + }
|
| +
|
| + if (available_user_request)
|
| + StartProcessingIfConnected();
|
| }
|
|
|
| void RequestCoordinator::HandleRemovedRequestsAndCallback(
|
| @@ -290,6 +296,22 @@ bool RequestCoordinator::StartProcessing(
|
| return true;
|
| }
|
|
|
| +void RequestCoordinator::StartProcessingIfConnected() {
|
| + // Makes sure not already busy processing.
|
| + if (is_busy_) return;
|
| +
|
| + // Check for network connectivity.
|
| + net::NetworkChangeNotifier::ConnectionType connection = GetConnectionType();
|
| +
|
| + if ((connection !=
|
| + net::NetworkChangeNotifier::ConnectionType::CONNECTION_NONE)) {
|
| + // Create conservative device conditions for the connectivity
|
| + // (assume no battery).
|
| + DeviceConditions device_conditions(false, 0, connection);
|
| + StartProcessing(device_conditions, base::Bind(&EmptySchedulerCallback));
|
| + }
|
| +}
|
| +
|
| void RequestCoordinator::TryNextRequest() {
|
| // If there is no time left in the budget, return to the scheduler.
|
| // We do not remove the pending task that was set up earlier in case
|
|
|