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

Unified Diff: components/offline_pages/offline_page_metadata_store_sql.cc

Issue 2339693002: [Offline pages] Splitting Add and Update methods in OPMStore (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
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 27d90bcf30f18911b20f3a14b6fe2a3d60b764e7..6cf2f21c14e5a8b212c42fc347fc52c8c38b86e3 100644
--- a/components/offline_pages/offline_page_metadata_store_sql.cc
+++ b/components/offline_pages/offline_page_metadata_store_sql.cc
@@ -275,14 +275,35 @@ void GetOfflinePagesSync(
}
}
-void AddOrUpdateOfflinePageSync(
- const OfflinePageItem& offline_page,
+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));
+}
+
+void UpdateOfflinePagesSync(
sql::Connection* db,
scoped_refptr<base::SingleThreadTaskRunner> runner,
+ const std::vector<OfflinePageItem>& pages,
const OfflinePageMetadataStore::UpdateCallback& callback) {
- // TODO(bburns): add UMA metrics here (and for levelDB).
- bool ok = InsertOrReplace(db, offline_page);
- runner->PostTask(FROM_HERE, base::Bind(callback, ok));
+ // TODO(fgorski): Update the callback to provide information about all items
+ // and not just a high level boolean.
+ sql::Transaction transaction(db);
+ if (!transaction.Begin()) {
+ runner->PostTask(FROM_HERE, base::Bind(callback, false));
+ return;
+ }
+
+ // TODO(fgorski): Switch to only accept updates and not create new items.
+ for (auto& page : pages)
+ InsertOrReplace(db, page);
+
+ bool result = transaction.Commit();
+ runner->PostTask(FROM_HERE, base::Bind(callback, result));
}
void RemoveOfflinePagesSync(
@@ -355,14 +376,28 @@ void OfflinePageMetadataStoreSQL::GetOfflinePages(
base::ThreadTaskRunnerHandle::Get(), callback));
}
-void OfflinePageMetadataStoreSQL::AddOrUpdateOfflinePage(
+void OfflinePageMetadataStoreSQL::AddOfflinePage(
const OfflinePageItem& offline_page,
+ const AddCallback& callback) {
+ if (!CheckDb(base::Bind(callback, STORE_ERROR)))
+ return;
+
+ background_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&AddOfflinePageSync, db_.get(),
+ base::ThreadTaskRunnerHandle::Get(), offline_page, callback));
+}
+
+void OfflinePageMetadataStoreSQL::UpdateOfflinePages(
+ const std::vector<OfflinePageItem>& pages,
const UpdateCallback& callback) {
- DCHECK(db_.get());
+ if (!CheckDb(base::Bind(callback, false)))
+ return;
+
background_task_runner_->PostTask(
FROM_HERE,
- base::Bind(&AddOrUpdateOfflinePageSync, offline_page, db_.get(),
- base::ThreadTaskRunnerHandle::Get(), callback));
+ base::Bind(&UpdateOfflinePagesSync, db_.get(),
+ base::ThreadTaskRunnerHandle::Get(), pages, callback));
}
void OfflinePageMetadataStoreSQL::RemoveOfflinePages(
« no previous file with comments | « components/offline_pages/offline_page_metadata_store_sql.h ('k') | components/offline_pages/offline_page_model_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698