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

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

Issue 2365653002: [Offline pages] Removing RequestQueueStore::UpdateMultipleRequestsCallback (Closed)
Patch Set: 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 0b51142f416a4d913ad840da1d3b95aa4bacec93..4cec340493122651f5e99ae7305a898c80367ed8 100644
--- a/components/offline_pages/background/request_queue_store_sql.cc
+++ b/components/offline_pages/background/request_queue_store_sql.cc
@@ -135,16 +135,22 @@ RequestQueue::UpdateRequestResult DeleteRequestById(sql::Connection* db,
return RequestQueue::UpdateRequestResult::SUCCESS;
}
-bool ChangeRequestState(sql::Connection* db,
- const int64_t request_id,
- const SavePageRequest::RequestState new_state) {
+ItemActionStatus ChangeRequestState(
+ sql::Connection* db,
+ const int64_t request_id,
+ const SavePageRequest::RequestState new_state) {
const char kSql[] = "UPDATE " REQUEST_QUEUE_TABLE_NAME
" SET state=?"
" WHERE request_id=?";
sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
statement.BindInt64(0, static_cast<int64_t>(new_state));
statement.BindInt64(1, request_id);
- return statement.Run();
+
+ if (!statement.Run())
+ return ItemActionStatus::STORE_ERROR;
+ if (db->GetLastChangeCount() == 0)
+ return ItemActionStatus::NOT_FOUND;
+ return ItemActionStatus::SUCCESS;
}
// Helper function to delete requests corresponding to passed in requestIds,
@@ -182,43 +188,6 @@ bool DeleteRequestsByIds(
return true;
}
-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);
- if (!transaction.Begin()) {
- BuildFailedResultList(request_ids, results);
- return false;
- }
-
- // Update a request, then get it, and put the item we got on the output list.
- for (const auto& request_id : request_ids) {
- RequestQueue::UpdateRequestResult status;
- if (!ChangeRequestState(db, request_id, new_state))
- status = RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST;
- else
- status = RequestQueue::UpdateRequestResult::SUCCESS;
-
- // Make output request_id/status pair, and put a copy of the updated request
- // on output list.
- results.push_back(std::make_pair(request_id, status));
- requests.push_back(GetOneRequest(db, request_id));
- }
-
- if (!transaction.Commit()) {
- requests.clear();
- BuildFailedResultList(request_ids, results);
- return false;
- }
-
- return true;
-}
-
ItemActionStatus Insert(sql::Connection* db, const SavePageRequest& request) {
const char kSql[] =
"INSERT OR IGNORE INTO " REQUEST_QUEUE_TABLE_NAME
@@ -298,6 +267,14 @@ void PostStoreErrorForAllRequests(
ItemActionStatus::STORE_ERROR, callback);
}
+void PostStoreErrorForAllIds(
+ scoped_refptr<base::SingleThreadTaskRunner> runner,
+ const std::vector<int64_t>& item_ids,
+ const RequestQueueStore::UpdateCallback& callback) {
+ PostStoreUpdateResultForIds(runner, StoreState::LOADED, item_ids,
+ ItemActionStatus::STORE_ERROR, callback);
+}
+
bool InitDatabase(sql::Connection* db, const base::FilePath& path) {
db->set_page_size(4096);
db->set_cache_size(500);
@@ -314,6 +291,20 @@ bool InitDatabase(sql::Connection* db, const base::FilePath& path) {
return CreateSchema(db);
}
+std::unique_ptr<SavePageRequest> GetRequestByIdSync(sql::Connection* db,
+ int64_t item_id) {
+ const char kSql[] =
+ "SELECT * FROM " REQUEST_QUEUE_TABLE_NAME " WHERE request_id = ?";
+ sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
+ statement.BindInt64(0, item_id);
+
+ if (statement.Step()) {
+ return MakeSavePageRequest(statement);
+ }
+
+ return std::unique_ptr<SavePageRequest>(nullptr);
+}
+
void GetRequestsSync(sql::Connection* db,
scoped_refptr<base::SingleThreadTaskRunner> runner,
const RequestQueueStore::GetRequestsCallback& callback) {
@@ -384,19 +375,44 @@ void RemoveRequestsSync(sql::Connection* db,
base::Bind(callback, results, base::Passed(&requests)));
}
+// TODO(fgorski): This method is to be completely removed by petewil's patch.
void ChangeRequestsStateSync(
sql::Connection* db,
scoped_refptr<base::SingleThreadTaskRunner> runner,
const std::vector<int64_t>& request_ids,
const SavePageRequest::RequestState new_state,
- const RequestQueue::UpdateMultipleRequestsCallback& callback) {
- RequestQueue::UpdateMultipleRequestResults results;
- std::vector<std::unique_ptr<SavePageRequest>> requests;
+ const RequestQueueStore::UpdateCallback& callback) {
// TODO(fgorski): add UMA metrics here.
- offline_pages::ChangeRequestsState(db, request_ids, new_state, results,
- requests);
- runner->PostTask(FROM_HERE,
- base::Bind(callback, results, base::Passed(&requests)));
+ std::unique_ptr<UpdateRequestsResult> result(
+ new UpdateRequestsResult(StoreState::LOADED));
+
+ sql::Transaction transaction(db);
+ if (!transaction.Begin()) {
+ PostStoreErrorForAllIds(runner, request_ids, callback);
+ return;
+ }
+
+ // Update a request, then get it, and put the item we got on the output list.
+ for (const auto& request_id : request_ids) {
+ ItemActionStatus status = ChangeRequestState(db, request_id, new_state);
+ if (status == ItemActionStatus::SUCCESS) {
+ std::unique_ptr<SavePageRequest> request =
+ GetRequestByIdSync(db, request_id);
+ if (request.get())
+ result->updated_items.push_back(*request);
+ else
+ status = ItemActionStatus::STORE_ERROR;
+ }
+
+ result->item_statuses.push_back(std::make_pair(request_id, status));
+ }
+
+ if (!transaction.Commit()) {
+ PostStoreErrorForAllIds(runner, request_ids, callback);
+ return;
+ }
+
+ runner->PostTask(FROM_HERE, base::Bind(callback, base::Passed(&result)));
}
void OpenConnectionSync(sql::Connection* db,
@@ -509,10 +525,10 @@ void RequestQueueStoreSQL::RemoveRequests(
void RequestQueueStoreSQL::ChangeRequestsState(
const std::vector<int64_t>& request_ids,
const SavePageRequest::RequestState new_state,
- const UpdateMultipleRequestsCallback& callback) {
- RequestQueue::UpdateMultipleRequestResults results;
- std::vector<std::unique_ptr<SavePageRequest>> requests;
- if (!CheckDb(base::Bind(callback, results, base::Passed(&requests)))) {
+ const UpdateCallback& callback) {
+ if (!db_.get()) {
+ PostStoreErrorForAllIds(base::ThreadTaskRunnerHandle::Get(), request_ids,
+ callback);
return;
}

Powered by Google App Engine
This is Rietveld 408576698