| 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..0fa9e7ba702502e1c9f72e0642f6f8842cd2bedb 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"
|
| @@ -215,6 +217,34 @@ bool ChangeRequestsState(
|
| return true;
|
| }
|
|
|
| +ItemActionStatus Insert(sql::Connection* db, const SavePageRequest& request) {
|
| + const char kSql[] =
|
| + "INSERT OR IGNORE INTO " REQUEST_QUEUE_TABLE_NAME
|
| + " (request_id, creation_time, activation_time,"
|
| + " 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);
|
| +
|
| + if (!statement.Run())
|
| + return ItemActionStatus::STORE_ERROR;
|
| + if (db->GetLastChangeCount() == 0)
|
| + return ItemActionStatus::ALREADY_EXISTS;
|
| + return ItemActionStatus::SUCCESS;
|
| +}
|
| +
|
| RequestQueueStore::UpdateStatus InsertOrReplace(
|
| sql::Connection* db,
|
| const SavePageRequest& request) {
|
| @@ -281,6 +311,15 @@ 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) {
|
| + // TODO(fgorski): add UMA metrics here.
|
| + 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 +415,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 +438,6 @@ void RequestQueueStoreSQL::AddOrUpdateRequest(const SavePageRequest& request,
|
| base::ThreadTaskRunnerHandle::Get(), request, callback));
|
| }
|
|
|
| -// RemoveRequestsByRequestId to be more parallell with RemoveRequestsByClientId.
|
| void RequestQueueStoreSQL::RemoveRequests(
|
| const std::vector<int64_t>& request_ids,
|
| const RemoveCallback& callback) {
|
|
|