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

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

Issue 2262423002: Use a vector of smart pointers for callback return type. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: CR feedback per BauerB Created 4 years, 3 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_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

Powered by Google App Engine
This is Rietveld 408576698