| Index: components/precache/core/precache_session_table.cc
|
| diff --git a/components/precache/core/precache_session_table.cc b/components/precache/core/precache_session_table.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8537b199025d38aaa2a064d59fc60613989f581f
|
| --- /dev/null
|
| +++ b/components/precache/core/precache_session_table.cc
|
| @@ -0,0 +1,70 @@
|
| +// 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/precache/core/precache_session_table.h"
|
| +
|
| +#include <string>
|
| +
|
| +#include "base/logging.h"
|
| +#include "base/time/time.h"
|
| +#include "components/precache/core/proto/unfinished_work.pb.h"
|
| +#include "sql/connection.h"
|
| +#include "sql/statement.h"
|
| +
|
| +using sql::Statement;
|
| +
|
| +namespace precache {
|
| +
|
| +PrecacheSessionTable::PrecacheSessionTable() : db_(nullptr) {}
|
| +
|
| +PrecacheSessionTable::~PrecacheSessionTable() {}
|
| +
|
| +bool PrecacheSessionTable::Init(sql::Connection* db) {
|
| + DCHECK(!db_); // Init must only be called once.
|
| + DCHECK(db); // The database connection must be non-NULL.
|
| + db_ = db;
|
| + return CreateTableIfNonExistent();
|
| +}
|
| +
|
| +// Store unfinished work.
|
| +void PrecacheSessionTable::SaveUnfinishedWork(
|
| + std::unique_ptr<PrecacheUnfinishedWork> unfinished_work) {
|
| + Statement statement(db_->GetCachedStatement(
|
| + SQL_FROM_HERE,
|
| + "INSERT OR REPLACE INTO precache_session (type, value) VALUES(?,?)"));
|
| + statement.BindInt(0, static_cast<int>(UNFINISHED_WORK));
|
| + statement.BindString(1, unfinished_work->SerializeAsString());
|
| + statement.Run();
|
| +}
|
| +
|
| +// Retrieve unfinished work.
|
| +std::unique_ptr<PrecacheUnfinishedWork>
|
| +PrecacheSessionTable::GetUnfinishedWork() {
|
| + Statement statement(db_->GetCachedStatement(
|
| + SQL_FROM_HERE, "SELECT value from precache_session where type=?"));
|
| + statement.BindInt(0, static_cast<int>(UNFINISHED_WORK));
|
| + std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
|
| + new PrecacheUnfinishedWork());
|
| + if (statement.Step())
|
| + unfinished_work->ParseFromString(statement.ColumnString(0));
|
| + return unfinished_work;
|
| +}
|
| +
|
| +
|
| +
|
| +void PrecacheSessionTable::DeleteUnfinishedWork() {
|
| + Statement statement(
|
| + db_->GetCachedStatement(
|
| + SQL_FROM_HERE, "DELETE FROM precache_session where type=?"));
|
| + statement.BindInt(0, static_cast<int>(UNFINISHED_WORK));
|
| + statement.Run();
|
| +}
|
| +
|
| +bool PrecacheSessionTable::CreateTableIfNonExistent() {
|
| + return db_->Execute(
|
| + "CREATE TABLE IF NOT EXISTS precache_session (type INTEGER PRIMARY KEY, "
|
| + "value STRING)");
|
| +}
|
| +
|
| +} // namespace precache
|
|
|