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

Unified Diff: components/offline_pages/background/request_queue_store_sql.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: Merge 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_queue_store_sql.cc
diff --git a/components/offline_pages/background/request_queue_store_sql.cc b/components/offline_pages/background/request_queue_store_sql.cc
index 164207aaf18616200dc18a48490abfea835941ab..149744910e9d3c3ea5d485b310cbc9fd2b75e95e 100644
--- a/components/offline_pages/background/request_queue_store_sql.cc
+++ b/components/offline_pages/background/request_queue_store_sql.cc
@@ -61,7 +61,8 @@ bool CreateSchema(sql::Connection* db) {
// Create a save page request from a SQL result. Expects complete rows with
// all columns present. Columns are in order they are defined in select query
// in |RequestQueueStore::RequestSync| method.
-SavePageRequest MakeSavePageRequest(const sql::Statement& statement) {
+std::unique_ptr<SavePageRequest> MakeSavePageRequest(
+ const sql::Statement& statement) {
const int64_t id = statement.ColumnInt64(0);
const base::Time creation_time =
base::Time::FromInternalValue(statement.ColumnInt64(1));
@@ -82,17 +83,18 @@ SavePageRequest MakeSavePageRequest(const sql::Statement& statement) {
<< " creation time " << creation_time << " user requested "
<< kUserRequested;
- SavePageRequest request(id, url, client_id, creation_time, activation_time,
- kUserRequested);
- request.set_last_attempt_time(last_attempt_time);
- request.set_started_attempt_count(started_attempt_count);
- request.set_completed_attempt_count(completed_attempt_count);
- request.set_request_state(state);
+ std::unique_ptr<SavePageRequest> request(new SavePageRequest(
+ id, url, client_id, creation_time, activation_time, kUserRequested));
+ request->set_last_attempt_time(last_attempt_time);
+ request->set_started_attempt_count(started_attempt_count);
+ request->set_completed_attempt_count(completed_attempt_count);
+ request->set_request_state(state);
return request;
}
// Get a request for a specific id.
-SavePageRequest GetOneRequest(sql::Connection* db, const int64_t request_id) {
+std::unique_ptr<SavePageRequest> GetOneRequest(sql::Connection* db,
+ const int64_t request_id) {
const char kSql[] =
"SELECT request_id, creation_time, activation_time,"
" last_attempt_time, started_attempt_count, completed_attempt_count,"
@@ -109,9 +111,10 @@ SavePageRequest GetOneRequest(sql::Connection* db, const int64_t request_id) {
void BuildFailedResultList(const std::vector<int64_t>& request_ids,
RequestQueue::UpdateMultipleRequestResults results) {
results.clear();
- for (int64_t request_id : request_ids)
+ for (int64_t request_id : request_ids) {
results.push_back(std::make_pair(
request_id, RequestQueue::UpdateRequestResult::STORE_FAILURE));
+ }
}
RequestQueue::UpdateRequestResult DeleteRequestById(sql::Connection* db,
@@ -140,10 +143,13 @@ bool ChangeRequestState(sql::Connection* db,
return statement.Run();
}
-bool DeleteRequestsByIds(sql::Connection* db,
- const std::vector<int64_t>& request_ids,
- RequestQueue::UpdateMultipleRequestResults& results,
- std::vector<SavePageRequest>& requests) {
+// Helper function to delete requests corresponding to passed in requestIds,
+// and fill an outparam with the removed requests.
+bool DeleteRequestsByIds(
+ sql::Connection* db,
+ const std::vector<int64_t>& request_ids,
+ RequestQueue::UpdateMultipleRequestResults& results,
+ std::vector<std::unique_ptr<SavePageRequest>>* requests) {
// If you create a transaction but don't Commit() it is automatically
// rolled back by its destructor when it falls out of scope.
sql::Transaction transaction(db);
@@ -155,16 +161,16 @@ bool DeleteRequestsByIds(sql::Connection* db,
// Read the request before we delete it, and if the delete worked, put it on
// the queue of requests that got deleted.
for (int64_t request_id : request_ids) {
- SavePageRequest request = GetOneRequest(db, request_id);
+ std::unique_ptr<SavePageRequest> request = GetOneRequest(db, request_id);
RequestQueue::UpdateRequestResult result =
DeleteRequestById(db, request_id);
results.push_back(std::make_pair(request_id, result));
if (result == RequestQueue::UpdateRequestResult::SUCCESS)
- requests.push_back(request);
+ requests->push_back(std::move(request));
}
if (!transaction.Commit()) {
- requests.clear();
+ requests->clear();
BuildFailedResultList(request_ids, results);
return false;
}
@@ -172,11 +178,12 @@ bool DeleteRequestsByIds(sql::Connection* db,
return true;
}
-bool ChangeRequestsState(sql::Connection* db,
- const std::vector<int64_t>& request_ids,
- SavePageRequest::RequestState new_state,
- RequestQueue::UpdateMultipleRequestResults& results,
- std::vector<SavePageRequest>& requests) {
+bool ChangeRequestsState(
+ sql::Connection* db,
+ const std::vector<int64_t>& request_ids,
+ SavePageRequest::RequestState new_state,
+ RequestQueue::UpdateMultipleRequestResults& results,
+ std::vector<std::unique_ptr<SavePageRequest>>& requests) {
// If you create a transaction but don't Commit() it is automatically
// rolled back by its destructor when it falls out of scope.
sql::Transaction transaction(db);
@@ -294,12 +301,12 @@ void RequestQueueStoreSQL::GetRequestsSync(
sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
- std::vector<SavePageRequest> result;
+ std::vector<std::unique_ptr<SavePageRequest>> requests;
while (statement.Step())
- result.push_back(MakeSavePageRequest(statement));
+ requests.push_back(MakeSavePageRequest(statement));
- runner->PostTask(FROM_HERE,
- base::Bind(callback, statement.Succeeded(), result));
+ runner->PostTask(FROM_HERE, base::Bind(callback, statement.Succeeded(),
+ base::Passed(&requests)));
}
// static
@@ -320,10 +327,11 @@ void RequestQueueStoreSQL::RemoveRequestsSync(
const std::vector<int64_t>& request_ids,
const RemoveCallback& callback) {
RequestQueue::UpdateMultipleRequestResults results;
- std::vector<SavePageRequest> requests;
+ std::vector<std::unique_ptr<SavePageRequest>> requests;
// TODO(fgorski): add UMA metrics here.
- DeleteRequestsByIds(db, request_ids, results, requests);
- runner->PostTask(FROM_HERE, base::Bind(callback, results, requests));
+ DeleteRequestsByIds(db, request_ids, results, &requests);
+ runner->PostTask(FROM_HERE,
+ base::Bind(callback, results, base::Passed(&requests)));
}
// static
@@ -334,11 +342,12 @@ void RequestQueueStoreSQL::ChangeRequestsStateSync(
const SavePageRequest::RequestState new_state,
const UpdateMultipleRequestsCallback& callback) {
RequestQueue::UpdateMultipleRequestResults results;
- std::vector<SavePageRequest> requests;
+ std::vector<std::unique_ptr<SavePageRequest>> requests;
// TODO(fgorski): add UMA metrics here.
offline_pages::ChangeRequestsState(db, request_ids, new_state, results,
requests);
- runner->PostTask(FROM_HERE, base::Bind(callback, results, requests));
+ runner->PostTask(FROM_HERE,
+ base::Bind(callback, results, base::Passed(&requests)));
}
// static
@@ -369,7 +378,8 @@ bool RequestQueueStoreSQL::CheckDb(const base::Closure& callback) {
void RequestQueueStoreSQL::GetRequests(const GetRequestsCallback& callback) {
DCHECK(db_.get());
- if (!CheckDb(base::Bind(callback, false, std::vector<SavePageRequest>())))
+ std::vector<std::unique_ptr<SavePageRequest>> requests;
+ if (!CheckDb(base::Bind(callback, false, base::Passed(&requests))))
return;
background_task_runner_->PostTask(
@@ -395,13 +405,16 @@ void RequestQueueStoreSQL::RemoveRequests(
const RemoveCallback& callback) {
// Set up a failed set of results in case we fail the DB check.
RequestQueue::UpdateMultipleRequestResults results;
- std::vector<SavePageRequest> requests;
- for (int64_t request_id : request_ids)
+ for (int64_t request_id : request_ids) {
results.push_back(std::make_pair(
request_id, RequestQueue::UpdateRequestResult::STORE_FAILURE));
+ }
- if (!CheckDb(base::Bind(callback, results, requests)))
+ if (!CheckDb(base::Bind(
+ callback, results,
+ base::Passed(std::vector<std::unique_ptr<SavePageRequest>>())))) {
return;
+ }
background_task_runner_->PostTask(
FROM_HERE,
@@ -414,9 +427,10 @@ void RequestQueueStoreSQL::ChangeRequestsState(
const SavePageRequest::RequestState new_state,
const UpdateMultipleRequestsCallback& callback) {
RequestQueue::UpdateMultipleRequestResults results;
- std::vector<SavePageRequest> requests;
- if (!CheckDb(base::Bind(callback, results, requests)))
+ std::vector<std::unique_ptr<SavePageRequest>> requests;
+ if (!CheckDb(base::Bind(callback, results, base::Passed(&requests)))) {
return;
+ }
background_task_runner_->PostTask(
FROM_HERE, base::Bind(&RequestQueueStoreSQL::ChangeRequestsStateSync,

Powered by Google App Engine
This is Rietveld 408576698