blob: ee6b577b5ed70c7ab587b6fd1fede28eb0f301d7 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/tab/tab_state_storage_backend.h"
#include "base/functional/bind.h"
#include "base/task/thread_pool.h"
#include "chrome/browser/tab/tab_state_storage_database.h"
namespace tabs {
namespace {
constexpr base::TaskTraits kDBTaskTraits = {
base::MayBlock(), base::TaskPriority::BEST_EFFORT,
base::TaskShutdownBehavior::BLOCK_SHUTDOWN};
} // namespace
TabStateStorageBackend::TabStateStorageBackend(
const base::FilePath& profile_path)
: profile_path_(profile_path),
db_task_runner_(
base::ThreadPool::CreateSequencedTaskRunner(kDBTaskTraits)) {}
TabStateStorageBackend::~TabStateStorageBackend() {
if (database_) {
db_task_runner_->DeleteSoon(FROM_HERE, std::move(database_));
}
}
void TabStateStorageBackend::Initialize() {
database_ = std::make_unique<TabStateStorageDatabase>(profile_path_);
db_task_runner_->PostTaskAndReplyWithResult(
FROM_HERE,
base::BindOnce(&TabStateStorageDatabase::Initialize,
base::Unretained(database_.get())),
base::BindOnce(&TabStateStorageBackend::OnDBReady,
weak_ptr_factory_.GetWeakPtr()));
}
void TabStateStorageBackend::SaveNode(int id,
int type,
std::string payload,
std::string children) {
db_task_runner_->PostTaskAndReplyWithResult(
FROM_HERE,
base::BindOnce(&TabStateStorageDatabase::SaveNode,
base::Unretained(database_.get()), id, type,
std::move(payload), std::move(children)),
base::BindOnce(&TabStateStorageBackend::OnWrite,
weak_ptr_factory_.GetWeakPtr()));
}
void TabStateStorageBackend::LoadAllNodes(
base::OnceCallback<void(std::vector<NodeState>)> callback) {
db_task_runner_->PostTaskAndReplyWithResult(
FROM_HERE,
base::BindOnce(&TabStateStorageDatabase::LoadAllNodes,
base::Unretained(database_.get())),
base::BindOnce(&TabStateStorageBackend::OnAllTabsRead,
weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
}
void TabStateStorageBackend::OnDBReady(bool success) {}
void TabStateStorageBackend::OnWrite(bool success) {}
void TabStateStorageBackend::OnAllTabsRead(
base::OnceCallback<void(std::vector<NodeState>)> callback,
std::vector<NodeState> result) {
std::move(callback).Run(std::move(result));
}
} // namespace tabs