Index: components/offline_pages/background/request_picker.cc |
diff --git a/components/offline_pages/background/request_picker.cc b/components/offline_pages/background/request_picker.cc |
index 02515425d37f7e198169698437b5c60e1342a7aa..a19357074a551f4088de909f7dc5e0b48c78ef8c 100644 |
--- a/components/offline_pages/background/request_picker.cc |
+++ b/components/offline_pages/background/request_picker.cc |
@@ -50,7 +50,7 @@ void RequestPicker::ChooseNextRequest( |
// request to operate on (if any). |
void RequestPicker::GetRequestResultCallback( |
RequestQueue::GetRequestsResult, |
- const std::vector<SavePageRequest>& requests) { |
+ std::vector<std::unique_ptr<SavePageRequest>> requests) { |
// If there is nothing to do, return right away. |
if (requests.size() == 0) { |
not_picked_callback_.Run(false); |
@@ -59,12 +59,14 @@ void RequestPicker::GetRequestResultCallback( |
// Get the expired requests to be removed from the queue, and the valid ones |
// from which to pick the next request. |
- std::vector<SavePageRequest> valid_requests; |
- std::vector<SavePageRequest> expired_requests; |
- SplitRequests(requests, valid_requests, expired_requests); |
+ std::vector<std::unique_ptr<SavePageRequest>> valid_requests; |
+ std::vector<std::unique_ptr<SavePageRequest>> expired_requests; |
+ SplitRequests(std::move(requests), &valid_requests, &expired_requests); |
std::vector<int64_t> expired_request_ids; |
- for (auto request : expired_requests) |
- expired_request_ids.push_back(request.request_id()); |
+ std::vector<std::unique_ptr<SavePageRequest>>::iterator request; |
Bernhard Bauer
2016/09/08 09:01:57
Here you could also use the C++-11-style loop.
Pete Williamson
2016/09/08 17:27:00
Done.
|
+ for (request = expired_requests.begin(); request != expired_requests.end(); |
+ ++request) |
+ expired_request_ids.push_back(request->get()->request_id()); |
queue_->RemoveRequests(expired_request_ids, |
base::Bind(&RequestPicker::OnRequestExpired, |
@@ -84,12 +86,12 @@ void RequestPicker::GetRequestResultCallback( |
// Iterate once through the requests, keeping track of best candidate. |
bool non_user_requested_tasks_remaining = false; |
for (unsigned i = 0; i < valid_requests.size(); ++i) { |
- if (!valid_requests[i].user_requested()) |
+ if (!valid_requests[i]->user_requested()) |
non_user_requested_tasks_remaining = true; |
- if (!RequestConditionsSatisfied(valid_requests[i])) |
+ if (!RequestConditionsSatisfied(valid_requests[i].get())) |
continue; |
- if (IsNewRequestBetter(picked_request, &(valid_requests[i]), comparator)) |
- picked_request = &(valid_requests[i]); |
+ if (IsNewRequestBetter(picked_request, valid_requests[i].get(), comparator)) |
+ picked_request = valid_requests[i].get(); |
} |
// If we have a best request to try next, get the request coodinator to |
@@ -104,24 +106,24 @@ void RequestPicker::GetRequestResultCallback( |
// Filter out requests that don't meet the current conditions. For instance, if |
// this is a predictive request, and we are not on WiFi, it should be ignored |
// this round. |
-bool RequestPicker::RequestConditionsSatisfied(const SavePageRequest& request) { |
+bool RequestPicker::RequestConditionsSatisfied(const SavePageRequest* request) { |
// If the user did not request the page directly, make sure we are connected |
// to power and have WiFi and sufficient battery remaining before we take this |
// request. |
if (!current_conditions_->IsPowerConnected() && |
- policy_->PowerRequired(request.user_requested())) { |
+ policy_->PowerRequired(request->user_requested())) { |
return false; |
} |
if (current_conditions_->GetNetConnectionType() != |
net::NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI && |
- policy_->UnmeteredNetworkRequired(request.user_requested())) { |
+ policy_->UnmeteredNetworkRequired(request->user_requested())) { |
return false; |
} |
if (current_conditions_->GetBatteryPercentage() < |
- policy_->BatteryPercentageRequired(request.user_requested())) { |
+ policy_->BatteryPercentageRequired(request->user_requested())) { |
return false; |
} |
@@ -129,23 +131,23 @@ bool RequestPicker::RequestConditionsSatisfied(const SavePageRequest& request) { |
// eligible to try again. |
// TODO(petewil): We should have code to remove the page from the |
// queue after the last retry. |
- if (request.started_attempt_count() >= policy_->GetMaxStartedTries()) |
+ if (request->started_attempt_count() >= policy_->GetMaxStartedTries()) |
return false; |
// If we have already completed trying this page the max number of times, it |
// is not eligible to try again. |
// TODO(petewil): We should have code to remove the page from the |
// queue after the last retry. |
- if (request.completed_attempt_count() >= policy_->GetMaxCompletedTries()) |
+ if (request->completed_attempt_count() >= policy_->GetMaxCompletedTries()) |
return false; |
// If the request is paused, do not consider it. |
- if (request.request_state() == SavePageRequest::RequestState::PAUSED) |
+ if (request->request_state() == SavePageRequest::RequestState::PAUSED) |
return false; |
// If the request is expired, do not consider it. |
// TODO(petewil): We need to remove this from the queue. |
- base::TimeDelta requestAge = base::Time::Now() - request.creation_time(); |
+ base::TimeDelta requestAge = base::Time::Now() - request->creation_time(); |
if (requestAge > |
base::TimeDelta::FromSeconds( |
policy_->GetRequestExpirationTimeInSeconds())) |
@@ -155,7 +157,7 @@ bool RequestPicker::RequestConditionsSatisfied(const SavePageRequest& request) { |
// TODO(petewil): If the only reason we return nothing to do is that we have |
// inactive requests, we still want to try again later after their activation |
// time elapses, we shouldn't take ourselves completely off the scheduler. |
- if (request.activation_time() > base::Time::Now()) |
+ if (request->activation_time() > base::Time::Now()) |
return false; |
return true; |
@@ -241,17 +243,17 @@ int RequestPicker::CompareCreationTime( |
return result; |
} |
-// Split all requests into expired ones and still valid ones. |
void RequestPicker::SplitRequests( |
- const std::vector<SavePageRequest>& requests, |
- std::vector<SavePageRequest>& valid_requests, |
- std::vector<SavePageRequest>& expired_requests) { |
- for (SavePageRequest request : requests) { |
- if (base::Time::Now() - request.creation_time() >= |
+ std::vector<std::unique_ptr<SavePageRequest>> requests, |
+ std::vector<std::unique_ptr<SavePageRequest>>* valid_requests, |
+ std::vector<std::unique_ptr<SavePageRequest>>* expired_requests) { |
+ std::vector<std::unique_ptr<SavePageRequest>>::iterator request; |
+ for (request = requests.begin(); request != requests.end(); ++request) { |
+ if (base::Time::Now() - request->get()->creation_time() >= |
Bernhard Bauer
2016/09/08 09:01:57
And here as well (which would also remove one leve
Pete Williamson
2016/09/08 17:27:00
Done.
|
base::TimeDelta::FromSeconds(kRequestExpirationTimeInSeconds)) { |
- expired_requests.push_back(request); |
+ expired_requests->push_back(std::move(*request)); |
} else { |
- valid_requests.push_back(request); |
+ valid_requests->push_back(std::move(*request)); |
} |
} |
} |
@@ -260,10 +262,12 @@ void RequestPicker::SplitRequests( |
// the coordinator. |
void RequestPicker::OnRequestExpired( |
const RequestQueue::UpdateMultipleRequestResults& results, |
- const std::vector<SavePageRequest>& requests) { |
- for (auto request : requests) |
+ const std::vector<std::unique_ptr<SavePageRequest>> requests) { |
+ std::vector<std::unique_ptr<SavePageRequest>>::const_iterator request; |
+ for (request = requests.begin(); request != requests.end(); ++request) |
notifier_->NotifyCompleted( |
- request, RequestCoordinator::BackgroundSavePageResult::EXPIRED); |
+ *(request->get()), |
+ RequestCoordinator::BackgroundSavePageResult::EXPIRED); |
} |
} // namespace offline_pages |