#include "components/performance_manager/persistence/site_data/leveldb_site_data_store.h"
#include <atomic>
#include <limits>
#include <string>
#include "base/files/file_util.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/functional/callback_helpers.h"
#include "base/hash/md5.h"
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "base/metrics/histogram_functions.h"
#include "base/run_loop.h"
#include "base/strings/string_number_conversions.h"
#include "base/task/thread_pool.h"
#include "base/threading/scoped_blocking_call.h"
#include "build/build_config.h"
#include "third_party/leveldatabase/env_chromium.h"
#include "third_party/leveldatabase/leveldb_chrome.h"
#include "third_party/leveldatabase/src/include/leveldb/env.h"
#include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
namespace performance_manager {
namespace {
std::atomic<bool> g_use_in_memory_db_for_testing = …;
const char kInitStatusHistogramLabel[] = …;
const char kInitStatusAfterRepairHistogramLabel[] = …;
const char kInitStatusAfterDeleteHistogramLabel[] = …;
enum class InitStatus { … };
void ReportInitStatus(const char* histogram_name,
const leveldb::Status& status) { … }
bool RepairDatabase(const std::string& db_path) { … }
bool ShouldAttemptDbRepair(const leveldb::Status& status) { … }
struct DatabaseSizeResult { … };
std::string SerializeOriginIntoDatabaseKey(const url::Origin& origin) { … }
}
const size_t LevelDBSiteDataStore::kDbVersion = …;
const char LevelDBSiteDataStore::kDbMetadataKey[] = …;
class LevelDBSiteDataStore::AsyncHelper { … };
void LevelDBSiteDataStore::AsyncHelper::OpenOrCreateDatabase() { … }
std::optional<SiteDataProto>
LevelDBSiteDataStore::AsyncHelper::ReadSiteDataFromDB(
const url::Origin& origin) { … }
void LevelDBSiteDataStore::AsyncHelper::WriteSiteDataIntoDB(
const url::Origin& origin,
const SiteDataProto& site_characteristic_proto) { … }
void LevelDBSiteDataStore::AsyncHelper::RemoveSiteDataFromDB(
const std::vector<url::Origin>& site_origins) { … }
void LevelDBSiteDataStore::AsyncHelper::ClearDatabase() { … }
DatabaseSizeResult LevelDBSiteDataStore::AsyncHelper::GetDatabaseSize() { … }
LevelDBSiteDataStore::AsyncHelper::OpeningType
LevelDBSiteDataStore::AsyncHelper::OpenOrCreateDatabaseImpl() { … }
void LevelDBSiteDataStore::AsyncHelper::ClearDatabaseImpl() { … }
LevelDBSiteDataStore::LevelDBSiteDataStore(const base::FilePath& db_path)
: … { … }
LevelDBSiteDataStore::~LevelDBSiteDataStore() = default;
void LevelDBSiteDataStore::ReadSiteDataFromStore(
const url::Origin& origin,
SiteDataStore::ReadSiteDataFromStoreCallback callback) { … }
void LevelDBSiteDataStore::WriteSiteDataIntoStore(
const url::Origin& origin,
const SiteDataProto& site_characteristic_proto) { … }
void LevelDBSiteDataStore::RemoveSiteDataFromStore(
const std::vector<url::Origin>& site_origins) { … }
void LevelDBSiteDataStore::ClearStore() { … }
void LevelDBSiteDataStore::GetStoreSize(GetStoreSizeCallback callback) { … }
void LevelDBSiteDataStore::SetInitializationCallbackForTesting(
base::OnceClosure callback) { … }
void LevelDBSiteDataStore::DatabaseIsInitializedForTesting(
base::OnceCallback<void(bool)> reply_cb) { … }
void LevelDBSiteDataStore::RunTaskWithRawDBForTesting(
base::OnceCallback<void(leveldb::DB*)> task,
base::OnceClosure after_task_run_closure) { … }
base::ScopedClosureRunner LevelDBSiteDataStore::UseInMemoryDBForTesting() { … }
}