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

Unified Diff: components/offline_pages/background/request_coordinator.cc

Issue 2282973003: [OfflinePages] Resuming a SavePageRequest now may start processing if network is connected. (Closed)
Patch Set: Added TODO for double loop Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698