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

Unified Diff: components/offline_pages/offline_page_metadata_store_sql.cc

Issue 2489443002: Move all components/offline_pages/ files into component/offline_pages/core (Closed)
Patch Set: more rebase Created 4 years, 1 month 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
deleted file mode 100644
index 4fbd76519f5823d7e65fe7d19a132a6f3db15266..0000000000000000000000000000000000000000
--- a/components/offline_pages/offline_page_metadata_store_sql.cc
+++ /dev/null
@@ -1,603 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/offline_pages/offline_page_metadata_store_sql.h"
-
-#include "base/bind.h"
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/location.h"
-#include "base/logging.h"
-#include "base/metrics/histogram_macros.h"
-#include "base/sequenced_task_runner.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "components/offline_pages/offline_page_item.h"
-#include "sql/connection.h"
-#include "sql/statement.h"
-#include "sql/transaction.h"
-
-namespace offline_pages {
-
-namespace {
-
-// This is a macro instead of a const so that
-// it can be used inline in other SQL statements below.
-#define OFFLINE_PAGES_TABLE_NAME "offlinepages_v1"
-
-bool CreateOfflinePagesTable(sql::Connection* db) {
- const char kSql[] = "CREATE TABLE IF NOT EXISTS " OFFLINE_PAGES_TABLE_NAME
- "(offline_id INTEGER PRIMARY KEY NOT NULL,"
- " creation_time INTEGER NOT NULL,"
- " file_size INTEGER NOT NULL,"
- " last_access_time INTEGER NOT NULL,"
- " access_count INTEGER NOT NULL,"
- " expiration_time INTEGER NOT NULL DEFAULT 0,"
- " client_namespace VARCHAR NOT NULL,"
- " client_id VARCHAR NOT NULL,"
- " online_url VARCHAR NOT NULL,"
- " file_path VARCHAR NOT NULL,"
- " title VARCHAR NOT NULL DEFAULT '',"
- " original_url VARCHAR NOT NULL DEFAULT ''"
- ")";
- return db->Execute(kSql);
-}
-
-bool UpgradeWithQuery(sql::Connection* db, const char* upgrade_sql) {
- if (!db->Execute("ALTER TABLE " OFFLINE_PAGES_TABLE_NAME
- " RENAME TO temp_" OFFLINE_PAGES_TABLE_NAME)) {
- return false;
- }
- if (!CreateOfflinePagesTable(db))
- return false;
- if (!db->Execute(upgrade_sql))
- return false;
- if (!db->Execute("DROP TABLE IF EXISTS temp_" OFFLINE_PAGES_TABLE_NAME))
- return false;
- return true;
-}
-
-bool UpgradeFrom52(sql::Connection* db) {
- const char kSql[] =
- "INSERT INTO " OFFLINE_PAGES_TABLE_NAME
- " (offline_id, creation_time, file_size, last_access_time, "
- "access_count, client_namespace, client_id, "
- "online_url, file_path) "
- "SELECT "
- "offline_id, creation_time, file_size, last_access_time, "
- "access_count, client_namespace, client_id, "
- "online_url, file_path "
- "FROM temp_" OFFLINE_PAGES_TABLE_NAME;
- return UpgradeWithQuery(db, kSql);
-}
-
-bool UpgradeFrom53(sql::Connection* db) {
- const char kSql[] =
- "INSERT INTO " OFFLINE_PAGES_TABLE_NAME
- " (offline_id, creation_time, file_size, last_access_time, "
- "access_count, expiration_time, client_namespace, client_id, "
- "online_url, file_path) "
- "SELECT "
- "offline_id, creation_time, file_size, last_access_time, "
- "access_count, expiration_time, client_namespace, client_id, "
- "online_url, file_path "
- "FROM temp_" OFFLINE_PAGES_TABLE_NAME;
- return UpgradeWithQuery(db, kSql);
-}
-
-bool UpgradeFrom54(sql::Connection* db) {
- const char kSql[] =
- "INSERT INTO " OFFLINE_PAGES_TABLE_NAME
- " (offline_id, creation_time, file_size, last_access_time, "
- "access_count, expiration_time, client_namespace, client_id, "
- "online_url, file_path, title) "
- "SELECT "
- "offline_id, creation_time, file_size, last_access_time, "
- "access_count, expiration_time, client_namespace, client_id, "
- "online_url, file_path, title "
- "FROM temp_" OFFLINE_PAGES_TABLE_NAME;
- return UpgradeWithQuery(db, kSql);
-}
-
-bool UpgradeFrom55(sql::Connection* db) {
- const char kSql[] =
- "INSERT INTO " OFFLINE_PAGES_TABLE_NAME
- " (offline_id, creation_time, file_size, last_access_time, "
- "access_count, expiration_time, client_namespace, client_id, "
- "online_url, file_path, title) "
- "SELECT "
- "offline_id, creation_time, file_size, last_access_time, "
- "access_count, expiration_time, client_namespace, client_id, "
- "online_url, file_path, title "
- "FROM temp_" OFFLINE_PAGES_TABLE_NAME;
- return UpgradeWithQuery(db, kSql);
-}
-
-bool CreateSchema(sql::Connection* db) {
- // If you create a transaction but don't Commit() it is automatically
- // rolled back by its destructor when it falls out of scope.
- sql::Transaction transaction(db);
- if (!transaction.Begin())
- return false;
-
- if (!db->DoesTableExist(OFFLINE_PAGES_TABLE_NAME)) {
- if (!CreateOfflinePagesTable(db))
- return false;
- }
-
- // Upgrade section. Details are described in the header file.
- if (!db->DoesColumnExist(OFFLINE_PAGES_TABLE_NAME, "expiration_time")) {
- if (!UpgradeFrom52(db))
- return false;
- } else if (!db->DoesColumnExist(OFFLINE_PAGES_TABLE_NAME, "title")) {
- if (!UpgradeFrom53(db))
- return false;
- } else if (db->DoesColumnExist(OFFLINE_PAGES_TABLE_NAME, "offline_url")) {
- if (!UpgradeFrom54(db))
- return false;
- } else if (!db->DoesColumnExist(OFFLINE_PAGES_TABLE_NAME, "original_url")) {
- if (!UpgradeFrom55(db))
- return false;
- }
-
- // TODO(fgorski): Add indices here.
- return transaction.Commit();
-}
-
-bool DeleteByOfflineId(sql::Connection* db, int64_t offline_id) {
- static const char kSql[] =
- "DELETE FROM " OFFLINE_PAGES_TABLE_NAME " WHERE offline_id=?";
- sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
- statement.BindInt64(0, offline_id);
- return statement.Run();
-}
-
-base::FilePath GetPathFromUTF8String(const std::string& path_string) {
-#if defined(OS_POSIX)
- return base::FilePath(path_string);
-#elif defined(OS_WIN)
- return base::FilePath(base::UTF8ToWide(path_string));
-#else
-#error Unknown OS
-#endif
-}
-
-std::string GetUTF8StringFromPath(const base::FilePath& path) {
-#if defined(OS_POSIX)
- return path.value();
-#elif defined(OS_WIN)
- return base::WideToUTF8(path.value());
-#else
-#error Unknown OS
-#endif
-}
-
-// Create an offline page item from a SQL result. Expects complete rows with
-// all columns present.
-OfflinePageItem MakeOfflinePageItem(sql::Statement* statement) {
- int64_t id = statement->ColumnInt64(0);
- base::Time creation_time =
- base::Time::FromInternalValue(statement->ColumnInt64(1));
- int64_t file_size = statement->ColumnInt64(2);
- base::Time last_access_time =
- base::Time::FromInternalValue(statement->ColumnInt64(3));
- int access_count = statement->ColumnInt(4);
- base::Time expiration_time =
- base::Time::FromInternalValue(statement->ColumnInt64(5));
- ClientId client_id(statement->ColumnString(6), statement->ColumnString(7));
- GURL url(statement->ColumnString(8));
- base::FilePath path(GetPathFromUTF8String(statement->ColumnString(9)));
- base::string16 title = statement->ColumnString16(10);
- GURL original_url(statement->ColumnString(11));
-
- OfflinePageItem item(url, id, client_id, path, file_size, creation_time);
- item.last_access_time = last_access_time;
- item.access_count = access_count;
- item.expiration_time = expiration_time;
- item.title = title;
- item.original_url = original_url;
- 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, original_url)"
- " 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);
- statement.BindString(11, item.original_url.spec());
- if (!statement.Run())
- return ItemActionStatus::STORE_ERROR;
- if (db->GetLastChangeCount() == 0)
- return ItemActionStatus::ALREADY_EXISTS;
- return ItemActionStatus::SUCCESS;
-}
-
-bool Update(sql::Connection* db, const OfflinePageItem& item) {
- const char kSql[] =
- "UPDATE OR IGNORE " OFFLINE_PAGES_TABLE_NAME
- " SET online_url = ?, client_namespace = ?, client_id = ?, file_path = ?,"
- " file_size = ?, creation_time = ?, last_access_time = ?,"
- " access_count = ?, expiration_time = ?, title = ?, original_url = ?"
- " WHERE offline_id = ?";
-
- sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
- statement.BindString(0, item.url.spec());
- statement.BindString(1, item.client_id.name_space);
- statement.BindString(2, item.client_id.id);
- statement.BindString(3, GetUTF8StringFromPath(item.file_path));
- statement.BindInt64(4, item.file_size);
- statement.BindInt64(5, item.creation_time.ToInternalValue());
- statement.BindInt64(6, item.last_access_time.ToInternalValue());
- statement.BindInt(7, item.access_count);
- statement.BindInt64(8, item.expiration_time.ToInternalValue());
- statement.BindString16(9, item.title);
- statement.BindString(10, item.original_url.spec());
- statement.BindInt64(11, item.offline_id);
- return statement.Run() && db->GetLastChangeCount() > 0;
-}
-
-bool InitDatabase(sql::Connection* db, base::FilePath path) {
- db->set_page_size(4096);
- db->set_cache_size(500);
- db->set_histogram_tag("OfflinePageMetadata");
- db->set_exclusive_locking();
-
- base::File::Error err;
- if (!base::CreateDirectoryAndGetError(path.DirName(), &err)) {
- LOG(ERROR) << "Failed to create offline pages db directory: "
- << base::File::ErrorToString(err);
- return false;
- }
- if (!db->Open(path)) {
- LOG(ERROR) << "Failed to open database";
- return false;
- }
- db->Preload();
-
- return CreateSchema(db);
-}
-
-void NotifyLoadResult(scoped_refptr<base::SingleThreadTaskRunner> runner,
- const OfflinePageMetadataStore::LoadCallback& callback,
- OfflinePageMetadataStore::LoadStatus status,
- const std::vector<OfflinePageItem>& result) {
- // TODO(fgorski): Switch to SQL specific UMA metrics.
- UMA_HISTOGRAM_ENUMERATION("OfflinePages.LoadStatus", status,
- OfflinePageMetadataStore::LOAD_STATUS_COUNT);
- if (status == OfflinePageMetadataStore::LOAD_SUCCEEDED) {
- UMA_HISTOGRAM_COUNTS("OfflinePages.SavedPageCount",
- static_cast<int32_t>(result.size()));
- } else {
- DVLOG(1) << "Offline pages database loading failed: " << status;
- }
- runner->PostTask(FROM_HERE, base::Bind(callback, result));
-}
-
-void OpenConnectionSync(sql::Connection* db,
- scoped_refptr<base::SingleThreadTaskRunner> runner,
- const base::FilePath& path,
- const base::Callback<void(bool)>& callback) {
- bool success = InitDatabase(db, path);
- runner->PostTask(FROM_HERE, base::Bind(callback, success));
-}
-
-bool GetPageByOfflineIdSync(sql::Connection* db,
- int64_t offline_id,
- OfflinePageItem* item) {
- const char kSql[] =
- "SELECT * FROM " OFFLINE_PAGES_TABLE_NAME " WHERE offline_id = ?";
- sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
- statement.BindInt64(0, offline_id);
-
- if (statement.Step()) {
- *item = MakeOfflinePageItem(&statement);
- return true;
- }
-
- return false;
-}
-
-void GetOfflinePagesSync(
- sql::Connection* db,
- scoped_refptr<base::SingleThreadTaskRunner> runner,
- const OfflinePageMetadataStore::LoadCallback& callback) {
- const char kSql[] = "SELECT * FROM " OFFLINE_PAGES_TABLE_NAME;
-
- sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
-
- std::vector<OfflinePageItem> result;
- while (statement.Step())
- result.push_back(MakeOfflinePageItem(&statement));
-
- if (statement.Succeeded()) {
- NotifyLoadResult(runner, callback, OfflinePageMetadataStore::LOAD_SUCCEEDED,
- result);
- } else {
- result.clear();
- NotifyLoadResult(runner, callback,
- OfflinePageMetadataStore::STORE_LOAD_FAILED, result);
- }
-}
-
-void AddOfflinePageSync(sql::Connection* db,
- scoped_refptr<base::SingleThreadTaskRunner> runner,
- const OfflinePageItem& offline_page,
- const OfflinePageMetadataStore::AddCallback& callback) {
- ItemActionStatus status = Insert(db, offline_page);
- runner->PostTask(FROM_HERE, base::Bind(callback, status));
-}
-
-void PostStoreUpdateResultForIds(
- scoped_refptr<base::SingleThreadTaskRunner> runner,
- StoreState store_state,
- const std::vector<int64_t>& offline_ids,
- ItemActionStatus action_status,
- const OfflinePageMetadataStore::UpdateCallback& callback) {
- std::unique_ptr<OfflinePagesUpdateResult> result(
- new OfflinePagesUpdateResult(store_state));
- for (const auto& offline_id : offline_ids)
- result->item_statuses.push_back(std::make_pair(offline_id, action_status));
- runner->PostTask(FROM_HERE, base::Bind(callback, base::Passed(&result)));
-}
-
-void PostStoreErrorForAllPages(
- scoped_refptr<base::SingleThreadTaskRunner> runner,
- const std::vector<OfflinePageItem>& pages,
- const OfflinePageMetadataStore::UpdateCallback& callback) {
- std::vector<int64_t> offline_ids;
- for (const auto& page : pages)
- offline_ids.push_back(page.offline_id);
- PostStoreUpdateResultForIds(runner, StoreState::LOADED, offline_ids,
- ItemActionStatus::STORE_ERROR, callback);
-}
-
-void PostStoreErrorForAllIds(
- scoped_refptr<base::SingleThreadTaskRunner> runner,
- const std::vector<int64_t>& offline_ids,
- const OfflinePageMetadataStore::UpdateCallback& callback) {
- PostStoreUpdateResultForIds(runner, StoreState::LOADED, offline_ids,
- ItemActionStatus::STORE_ERROR, callback);
-}
-
-void UpdateOfflinePagesSync(
- sql::Connection* db,
- scoped_refptr<base::SingleThreadTaskRunner> runner,
- const std::vector<OfflinePageItem>& pages,
- const OfflinePageMetadataStore::UpdateCallback& callback) {
- std::unique_ptr<OfflinePagesUpdateResult> result(
- new OfflinePagesUpdateResult(StoreState::LOADED));
-
- sql::Transaction transaction(db);
- if (!transaction.Begin()) {
- PostStoreErrorForAllPages(runner, pages, callback);
- return;
- }
-
- for (const auto& page : pages) {
- if (Update(db, page)) {
- result->updated_items.push_back(page);
- result->item_statuses.push_back(
- std::make_pair(page.offline_id, ItemActionStatus::SUCCESS));
- } else {
- result->item_statuses.push_back(
- std::make_pair(page.offline_id, ItemActionStatus::NOT_FOUND));
- }
- }
-
- if (!transaction.Commit()) {
- PostStoreErrorForAllPages(runner, pages, callback);
- return;
- }
- runner->PostTask(FROM_HERE, base::Bind(callback, base::Passed(&result)));
-}
-
-void RemoveOfflinePagesSync(
- const std::vector<int64_t>& offline_ids,
- sql::Connection* db,
- scoped_refptr<base::SingleThreadTaskRunner> runner,
- const OfflinePageMetadataStore::UpdateCallback& callback) {
- // TODO(fgorski): Perhaps add metrics here.
- std::unique_ptr<OfflinePagesUpdateResult> result(
- new OfflinePagesUpdateResult(StoreState::LOADED));
-
- // If you create a transaction but don't Commit() it is automatically
- // rolled back by its destructor when it falls out of scope.
- sql::Transaction transaction(db);
- if (!transaction.Begin()) {
- PostStoreErrorForAllIds(runner, offline_ids, callback);
- return;
- }
-
- for (int64_t offline_id : offline_ids) {
- OfflinePageItem page;
- ItemActionStatus status;
- if (!GetPageByOfflineIdSync(db, offline_id, &page)) {
- status = ItemActionStatus::NOT_FOUND;
- } else if (!DeleteByOfflineId(db, offline_id)) {
- status = ItemActionStatus::STORE_ERROR;
- } else {
- status = ItemActionStatus::SUCCESS;
- result->updated_items.push_back(page);
- }
-
- result->item_statuses.push_back(std::make_pair(offline_id, status));
- }
-
- if (!transaction.Commit()) {
- PostStoreErrorForAllIds(runner, offline_ids, callback);
- return;
- }
-
- runner->PostTask(FROM_HERE, base::Bind(callback, base::Passed(&result)));
-}
-
-void ResetSync(sql::Connection* db,
- const base::FilePath& db_file_path,
- scoped_refptr<base::SingleThreadTaskRunner> runner,
- const base::Callback<void(bool)>& callback) {
- // This method deletes the content of the whole store and reinitializes it.
- bool success = true;
- if (db) {
- success = db->Raze();
- db->Close();
- }
- success = base::DeleteFile(db_file_path, true /*recursive*/) && success;
- runner->PostTask(FROM_HERE, base::Bind(callback, success));
-}
-
-} // anonymous namespace
-
-OfflinePageMetadataStoreSQL::OfflinePageMetadataStoreSQL(
- scoped_refptr<base::SequencedTaskRunner> background_task_runner,
- const base::FilePath& path)
- : background_task_runner_(std::move(background_task_runner)),
- db_file_path_(path.AppendASCII("OfflinePages.db")),
- state_(StoreState::NOT_LOADED),
- weak_ptr_factory_(this) {
-}
-
-OfflinePageMetadataStoreSQL::~OfflinePageMetadataStoreSQL() {
- if (db_.get() &&
- !background_task_runner_->DeleteSoon(FROM_HERE, db_.release())) {
- DLOG(WARNING) << "SQL database will not be deleted.";
- }
-}
-
-void OfflinePageMetadataStoreSQL::Initialize(
- const InitializeCallback& callback) {
- DCHECK(!db_);
- db_.reset(new sql::Connection());
- background_task_runner_->PostTask(
- FROM_HERE,
- base::Bind(&OpenConnectionSync, db_.get(),
- base::ThreadTaskRunnerHandle::Get(), db_file_path_,
- base::Bind(&OfflinePageMetadataStoreSQL::OnOpenConnectionDone,
- weak_ptr_factory_.GetWeakPtr(), callback)));
-}
-
-void OfflinePageMetadataStoreSQL::GetOfflinePages(
- const LoadCallback& callback) {
- if (!CheckDb()) {
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::Bind(callback, std::vector<OfflinePageItem>()));
- return;
- }
-
- background_task_runner_->PostTask(
- FROM_HERE, base::Bind(&GetOfflinePagesSync, db_.get(),
- base::ThreadTaskRunnerHandle::Get(), callback));
-}
-
-void OfflinePageMetadataStoreSQL::AddOfflinePage(
- const OfflinePageItem& offline_page,
- const AddCallback& callback) {
- if (!CheckDb()) {
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::Bind(callback, ItemActionStatus::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) {
- if (!CheckDb()) {
- PostStoreErrorForAllPages(base::ThreadTaskRunnerHandle::Get(), pages,
- callback);
- return;
- }
-
- background_task_runner_->PostTask(
- FROM_HERE,
- base::Bind(&UpdateOfflinePagesSync, db_.get(),
- base::ThreadTaskRunnerHandle::Get(), pages, callback));
-}
-
-void OfflinePageMetadataStoreSQL::RemoveOfflinePages(
- const std::vector<int64_t>& offline_ids,
- const UpdateCallback& callback) {
- if (!CheckDb()) {
- PostStoreErrorForAllIds(base::ThreadTaskRunnerHandle::Get(), offline_ids,
- callback);
- return;
- }
-
- if (offline_ids.empty()) {
- // Nothing to do, but post a callback instead of calling directly
- // to preserve the async style behavior to prevent bugs.
- PostStoreUpdateResultForIds(
- base::ThreadTaskRunnerHandle::Get(), state(), offline_ids,
- ItemActionStatus::NOT_FOUND /* will be ignored */, callback);
- return;
- }
-
- background_task_runner_->PostTask(
- FROM_HERE, base::Bind(&RemoveOfflinePagesSync, offline_ids, db_.get(),
- base::ThreadTaskRunnerHandle::Get(), callback));
-}
-
-void OfflinePageMetadataStoreSQL::Reset(const ResetCallback& callback) {
- background_task_runner_->PostTask(
- FROM_HERE,
- base::Bind(&ResetSync, db_.get(), db_file_path_,
- base::ThreadTaskRunnerHandle::Get(),
- base::Bind(&OfflinePageMetadataStoreSQL::OnResetDone,
- weak_ptr_factory_.GetWeakPtr(), callback)));
-}
-
-StoreState OfflinePageMetadataStoreSQL::state() const {
- return state_;
-}
-
-void OfflinePageMetadataStoreSQL::SetStateForTesting(StoreState state,
- bool reset_db) {
- state_ = state;
- if (reset_db)
- db_.reset(nullptr);
-}
-
-void OfflinePageMetadataStoreSQL::OnOpenConnectionDone(
- const InitializeCallback& callback,
- bool success) {
- DCHECK(db_.get());
- state_ = success ? StoreState::LOADED : StoreState::FAILED_LOADING;
- callback.Run(success);
-}
-
-void OfflinePageMetadataStoreSQL::OnResetDone(const ResetCallback& callback,
- bool success) {
- state_ = success ? StoreState::NOT_LOADED : StoreState::FAILED_RESET;
- db_.reset();
- base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
- base::Bind(callback, success));
-}
-
-bool OfflinePageMetadataStoreSQL::CheckDb() {
- return db_ && state_ == StoreState::LOADED;
-}
-
-} // namespace offline_pages

Powered by Google App Engine
This is Rietveld 408576698