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

Unified Diff: components/offline_pages/offline_page_metadata_store_sql.cc

Issue 2331343007: [Offline pages] OPMStoreSQL implementation of Add disabling updates (Closed)
Patch Set: Addressing feedback 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
« no previous file with comments | « components/offline_pages/offline_page_metadata_store_impl_unittest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/offline_pages/offline_page_metadata_store_sql.cc
diff --git a/components/offline_pages/offline_page_metadata_store_sql.cc b/components/offline_pages/offline_page_metadata_store_sql.cc
index 6cf2f21c14e5a8b212c42fc347fc52c8c38b86e3..bb313c621bf12e5578e5fe7c5f764bf72edea9d0 100644
--- a/components/offline_pages/offline_page_metadata_store_sql.cc
+++ b/components/offline_pages/offline_page_metadata_store_sql.cc
@@ -21,6 +21,7 @@
namespace offline_pages {
using StoreState = OfflinePageMetadataStore::StoreState;
+using ItemActionStatus = OfflinePageMetadataStore::ItemActionStatus;
namespace {
@@ -182,6 +183,36 @@ OfflinePageItem MakeOfflinePageItem(sql::Statement* statement) {
return item;
}
+ItemActionStatus Insert(sql::Connection* db, const OfflinePageItem& item) {
+ // Using 'INSERT OR FAIL' or 'INSERT OR ABORT' in the query below causes debug
+ // builds to DLOG.
+ const char kSql[] =
+ "INSERT OR IGNORE INTO " OFFLINE_PAGES_TABLE_NAME
+ " (offline_id, online_url, client_namespace, client_id, file_path, "
+ "file_size, creation_time, last_access_time, access_count, "
+ "expiration_time, title)"
+ " VALUES "
+ " (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+
+ sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
+ statement.BindInt64(0, item.offline_id);
+ statement.BindString(1, item.url.spec());
+ statement.BindString(2, item.client_id.name_space);
+ statement.BindString(3, item.client_id.id);
+ statement.BindString(4, GetUTF8StringFromPath(item.file_path));
+ statement.BindInt64(5, item.file_size);
+ statement.BindInt64(6, item.creation_time.ToInternalValue());
+ statement.BindInt64(7, item.last_access_time.ToInternalValue());
+ statement.BindInt(8, item.access_count);
+ statement.BindInt64(9, item.expiration_time.ToInternalValue());
+ statement.BindString16(10, item.title);
+ if (!statement.Run())
+ return ItemActionStatus::STORE_ERROR;
+ if (db->GetLastChangeCount() == 0)
+ return ItemActionStatus::ALREADY_EXISTS;
+ return ItemActionStatus::SUCCESS;
+}
+
bool InsertOrReplace(sql::Connection* db, const OfflinePageItem& item) {
const char kSql[] =
"INSERT OR REPLACE INTO " OFFLINE_PAGES_TABLE_NAME
@@ -279,10 +310,8 @@ void AddOfflinePageSync(sql::Connection* db,
scoped_refptr<base::SingleThreadTaskRunner> runner,
const OfflinePageItem& offline_page,
const OfflinePageMetadataStore::AddCallback& callback) {
- // TODO(fgorski): Only insert should happen here.
- InsertOrReplace(db, offline_page);
- runner->PostTask(FROM_HERE,
- base::Bind(callback, OfflinePageMetadataStore::SUCCESS));
+ ItemActionStatus status = Insert(db, offline_page);
+ runner->PostTask(FROM_HERE, base::Bind(callback, status));
}
void UpdateOfflinePagesSync(
« no previous file with comments | « components/offline_pages/offline_page_metadata_store_impl_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698