Chromium Code Reviews| 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 908516979b02260248e911a998c68e824cddd455..9e7d29f3fdb71a4b0e882fcc4500b9d495e331a2 100644 |
| --- a/components/offline_pages/background/request_queue_store_sql.cc |
| +++ b/components/offline_pages/background/request_queue_store_sql.cc |
| @@ -20,6 +20,8 @@ namespace offline_pages { |
| namespace { |
| +using UpdateStatus = RequestQueueStore::UpdateStatus; |
| + |
| // This is a macro instead of a const so that |
| // it can be used inline in other SQL statements below. |
| #define REQUEST_QUEUE_TABLE_NAME "request_queue_v1" |
| @@ -108,6 +110,36 @@ std::unique_ptr<SavePageRequest> GetOneRequest(sql::Connection* db, |
| return MakeSavePageRequest(statement); |
| } |
| +ItemActionStatus Insert(sql::Connection* db, const SavePageRequest& request) { |
|
Pete Williamson
2016/09/21 00:00:08
Nit - should we place this just above InsertOrRepl
fgorski
2016/09/21 05:07:50
Done. To be honest I am not very fond of the curre
|
| + const char kSql[] = |
| + "INSERT OR IGNORE INTO " REQUEST_QUEUE_TABLE_NAME |
| + " (request_id, creation_time, activation_time," |
|
Pete Williamson
2016/09/21 00:00:08
I remember DewittJ suggesting in the OfflinePageMo
fgorski
2016/09/21 05:07:50
No, update will have a different form. Please comp
|
| + " last_attempt_time, started_attempt_count, completed_attempt_count," |
| + " state, url, client_namespace, client_id)" |
| + " VALUES " |
| + " (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; |
| + |
| + sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); |
| + statement.BindInt64(0, request.request_id()); |
| + statement.BindInt64(1, request.creation_time().ToInternalValue()); |
| + statement.BindInt64(2, request.activation_time().ToInternalValue()); |
| + statement.BindInt64(3, request.last_attempt_time().ToInternalValue()); |
| + statement.BindInt64(4, request.started_attempt_count()); |
| + statement.BindInt64(5, request.completed_attempt_count()); |
| + statement.BindInt64(6, static_cast<int64_t>(request.request_state())); |
| + statement.BindString(7, request.url().spec()); |
| + statement.BindString(8, request.client_id().name_space); |
| + statement.BindString(9, request.client_id().id); |
| + |
| + // TODO(fgorski): This will be an ItemActionStatus, with ALREADY_EXISTS as a |
| + // return value for second if. |
|
Pete Williamson
2016/09/21 00:00:08
Is this TODO already TODONE? If not, add a bit mo
fgorski
2016/09/21 05:07:50
Done.
|
| + if (!statement.Run()) |
| + return ItemActionStatus::STORE_ERROR; |
| + if (db->GetLastChangeCount() == 0) |
| + return ItemActionStatus::ALREADY_EXISTS; |
| + return ItemActionStatus::SUCCESS; |
| +} |
| + |
| void BuildFailedResultList(const std::vector<int64_t>& request_ids, |
| RequestQueue::UpdateMultipleRequestResults results) { |
| results.clear(); |
| @@ -281,6 +313,14 @@ void GetRequestsSync(sql::Connection* db, |
| base::Passed(&requests))); |
| } |
| +void AddRequestSync(sql::Connection* db, |
| + scoped_refptr<base::SingleThreadTaskRunner> runner, |
| + const SavePageRequest& request, |
| + const RequestQueueStore::AddCallback& callback) { |
|
Pete Williamson
2016/09/21 00:00:08
Should we also have a TODO for UMA here?
fgorski
2016/09/21 05:07:50
Done.
|
| + ItemActionStatus status = Insert(db, request); |
| + runner->PostTask(FROM_HERE, base::Bind(callback, status)); |
| +} |
| + |
| void AddOrUpdateRequestSync(sql::Connection* db, |
| scoped_refptr<base::SingleThreadTaskRunner> runner, |
| const SavePageRequest& request, |
| @@ -376,6 +416,17 @@ void RequestQueueStoreSQL::GetRequests(const GetRequestsCallback& callback) { |
| base::ThreadTaskRunnerHandle::Get(), callback)); |
| } |
| +void RequestQueueStoreSQL::AddRequest(const SavePageRequest& request, |
| + const AddCallback& callback) { |
| + if (!CheckDb(base::Bind(callback, ItemActionStatus::STORE_ERROR))) |
| + return; |
| + |
| + background_task_runner_->PostTask( |
| + FROM_HERE, |
| + base::Bind(&AddRequestSync, db_.get(), |
| + base::ThreadTaskRunnerHandle::Get(), request, callback)); |
| +} |
| + |
| void RequestQueueStoreSQL::AddOrUpdateRequest(const SavePageRequest& request, |
| const UpdateCallback& callback) { |
| DCHECK(db_.get()); |
| @@ -388,7 +439,7 @@ void RequestQueueStoreSQL::AddOrUpdateRequest(const SavePageRequest& request, |
| base::ThreadTaskRunnerHandle::Get(), request, callback)); |
| } |
| -// RemoveRequestsByRequestId to be more parallell with RemoveRequestsByClientId. |
| +// RemoveRequestsByRequestId to be more parallel with RemoveRequestsByClientId. |
|
Pete Williamson
2016/09/21 00:00:08
Should we add "TODO" to this comment?
fgorski
2016/09/21 05:07:51
Done. It should be actually gone. Thanks for point
|
| void RequestQueueStoreSQL::RemoveRequests( |
| const std::vector<int64_t>& request_ids, |
| const RemoveCallback& callback) { |