#include "content/browser/indexed_db/indexed_db_leveldb_operations.h"
#include <string_view>
#include "base/compiler_specific.h"
#include "base/files/file_util.h"
#include "base/json/json_reader.h"
#include "base/no_destructor.h"
#include "base/values.h"
#include "build/build_config.h"
#include "components/services/storage/indexed_db/scopes/leveldb_scopes.h"
#include "components/services/storage/indexed_db/scopes/varint_coding.h"
#include "components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_database.h"
#include "components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_iterator.h"
#include "components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_transaction.h"
#include "components/services/storage/public/cpp/buckets/bucket_locator.h"
#include "components/services/storage/public/cpp/constants.h"
#include "content/browser/indexed_db/file_path_util.h"
#include "content/browser/indexed_db/indexed_db_data_format_version.h"
#include "content/browser/indexed_db/indexed_db_data_loss_info.h"
#include "content/browser/indexed_db/indexed_db_reporting.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "third_party/leveldatabase/env_chromium.h"
IndexedDBKeyPath;
Status;
namespace content {
namespace indexed_db {
namespace {
class LDBComparator : public leveldb::Comparator { … };
}
base::FilePath ComputeCorruptionFileName(
const storage::BucketLocator& bucket_locator) { … }
std::string ReadCorruptionInfo(const base::FilePath& path_base,
const storage::BucketLocator& bucket_locator) { … }
leveldb::Status InternalInconsistencyStatus() { … }
leveldb::Status InvalidDBKeyStatus() { … }
leveldb::Status IOErrorStatus() { … }
leveldb::Status PutBool(TransactionalLevelDBTransaction* transaction,
std::string_view key,
bool value) { … }
template <typename DBOrTransaction>
Status GetVarInt(DBOrTransaction* db,
std::string_view key,
int64_t* found_int,
bool* found) { … }
template Status GetVarInt<TransactionalLevelDBTransaction>(
TransactionalLevelDBTransaction* txn,
std::string_view key,
int64_t* found_int,
bool* found);
template Status GetVarInt<TransactionalLevelDBDatabase>(
TransactionalLevelDBDatabase* db,
std::string_view key,
int64_t* found_int,
bool* found);
template <typename TransactionOrWriteBatch>
leveldb::Status PutVarInt(TransactionOrWriteBatch* transaction_or_write_batch,
std::string_view key,
int64_t value) { … }
template leveldb::Status PutVarInt<TransactionalLevelDBTransaction>(
TransactionalLevelDBTransaction* transaction,
std::string_view key,
int64_t value);
template leveldb::Status PutVarInt<LevelDBDirectTransaction>(
LevelDBDirectTransaction* transaction,
std::string_view key,
int64_t value);
template leveldb::Status PutVarInt<LevelDBWriteBatch>(
LevelDBWriteBatch* transaction,
std::string_view key,
int64_t value);
template <typename DBOrTransaction>
Status GetString(DBOrTransaction* db,
std::string_view key,
std::u16string* found_string,
bool* found) { … }
template Status GetString<TransactionalLevelDBTransaction>(
TransactionalLevelDBTransaction* txn,
std::string_view key,
std::u16string* found_string,
bool* found);
template Status GetString<TransactionalLevelDBDatabase>(
TransactionalLevelDBDatabase* db,
std::string_view key,
std::u16string* found_string,
bool* found);
leveldb::Status PutString(TransactionalLevelDBTransaction* transaction,
std::string_view key,
const std::u16string& value) { … }
leveldb::Status PutIDBKeyPath(TransactionalLevelDBTransaction* transaction,
std::string_view key,
const IndexedDBKeyPath& value) { … }
template <typename DBOrTransaction>
Status GetMaxObjectStoreId(DBOrTransaction* db,
int64_t database_id,
int64_t* max_object_store_id) { … }
template Status GetMaxObjectStoreId<TransactionalLevelDBTransaction>(
TransactionalLevelDBTransaction* db,
int64_t database_id,
int64_t* max_object_store_id);
template Status GetMaxObjectStoreId<TransactionalLevelDBDatabase>(
TransactionalLevelDBDatabase* db,
int64_t database_id,
int64_t* max_object_store_id);
Status SetMaxObjectStoreId(TransactionalLevelDBTransaction* transaction,
int64_t database_id,
int64_t object_store_id) { … }
Status GetNewVersionNumber(TransactionalLevelDBTransaction* transaction,
int64_t database_id,
int64_t object_store_id,
int64_t* new_version_number) { … }
Status SetMaxIndexId(TransactionalLevelDBTransaction* transaction,
int64_t database_id,
int64_t object_store_id,
int64_t index_id) { … }
Status VersionExists(TransactionalLevelDBTransaction* transaction,
int64_t database_id,
int64_t object_store_id,
int64_t version,
const std::string& encoded_primary_key,
bool* exists) { … }
template Status GetNewDatabaseId<LevelDBDirectTransaction>(
LevelDBDirectTransaction* transaction,
int64_t* new_id);
template Status GetNewDatabaseId<TransactionalLevelDBTransaction>(
TransactionalLevelDBTransaction* transaction,
int64_t* new_id);
template <typename Transaction>
Status GetNewDatabaseId(Transaction* transaction, int64_t* new_id) { … }
bool CheckObjectStoreAndMetaDataType(const TransactionalLevelDBIterator* it,
const std::string& stop_key,
int64_t object_store_id,
int64_t meta_data_type) { … }
bool CheckIndexAndMetaDataKey(const TransactionalLevelDBIterator* it,
const std::string& stop_key,
int64_t index_id,
unsigned char meta_data_type) { … }
bool FindGreatestKeyLessThanOrEqual(
TransactionalLevelDBTransaction* transaction,
const std::string& target,
std::string* found_key,
Status* s) { … }
bool GetBlobNumberGeneratorCurrentNumber(
LevelDBDirectTransaction* leveldb_transaction,
int64_t database_id,
int64_t* blob_number_generator_current_number) { … }
bool UpdateBlobNumberGeneratorCurrentNumber(
LevelDBDirectTransaction* leveldb_transaction,
int64_t database_id,
int64_t blob_number_generator_current_number) { … }
Status GetEarliestSweepTime(TransactionalLevelDBDatabase* db,
base::Time* earliest_sweep) { … }
template leveldb::Status SetEarliestSweepTime<TransactionalLevelDBTransaction>(
TransactionalLevelDBTransaction* db,
base::Time earliest_sweep);
template leveldb::Status SetEarliestSweepTime<LevelDBDirectTransaction>(
LevelDBDirectTransaction* db,
base::Time earliest_sweep);
template <typename Transaction>
leveldb::Status SetEarliestSweepTime(Transaction* txn,
base::Time earliest_sweep) { … }
Status GetEarliestCompactionTime(TransactionalLevelDBDatabase* db,
base::Time* earliest_compaction) { … }
template leveldb::Status SetEarliestCompactionTime<
TransactionalLevelDBTransaction>(TransactionalLevelDBTransaction* db,
base::Time earliest_compaction);
template leveldb::Status SetEarliestCompactionTime<LevelDBDirectTransaction>(
LevelDBDirectTransaction* db,
base::Time earliest_compaction);
template <typename Transaction>
leveldb::Status SetEarliestCompactionTime(Transaction* txn,
base::Time earliest_compaction) { … }
const leveldb::Comparator* GetDefaultLevelDBComparator() { … }
}
}