Chromium Code Reviews| 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..2ac4474844ab38c22755aa6e24c801a7d6f0bc0f 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,24 @@ 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) { |
| + for (std::pair<int64_t, RequestQueue::UpdateRequestResult> pair : |
| + results) { |
|
Pete Williamson
2016/08/26 21:23:55
What if we resume a large batch of results? If so
dougarnett
2016/08/26 21:40:51
Yeah, bulk Pause looks like N^2 - bulk Resume does
|
| + if (pair.first == request.request_id() && |
| + pair.second == RequestQueue::UpdateRequestResult::SUCCESS) { |
| + // We have a successfully updated, available, user request. |
| + available_user_request = true; |
|
Dmitry Titov
2016/08/26 21:46:57
+1 to what Pete says, we could load all request_id
dougarnett
2016/08/26 22:33:44
I added a TODO for the moment to flag the topic in
Pete Williamson
2016/08/26 23:38:02
It's really pretty easy. I think I'd prefer to fi
Pete Williamson
2016/08/26 23:48:59
DougArnett pointed out that the UI only supports p
|
| + } |
| + } |
| + } |
| + } |
| + |
| + if (available_user_request) |
| + StartProcessingIfConnected(); |
| } |
| void RequestCoordinator::HandleRemovedRequestsAndCallback( |
| @@ -290,6 +293,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 |