| 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(
|
|
|