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 eb85cccae0d449b9a687ccd2ed1a0f4e29fcbeca..9d210d8e6eedfa153ca1463a9c8b045fe5c9ef9c 100644 |
--- a/components/offline_pages/offline_page_metadata_store_sql.cc |
+++ b/components/offline_pages/offline_page_metadata_store_sql.cc |
@@ -296,14 +296,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( |
@@ -376,14 +397,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( |