#include "components/history/core/browser/history_database.h"
#include <stdint.h>
#include <algorithm>
#include <set>
#include <string>
#include <tuple>
#include <utility>
#include <vector>
#include "base/files/file_util.h"
#include "base/logging.h"
#include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "base/rand_util.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "components/history/core/browser/history_types.h"
#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
#include "sql/database.h"
#include "sql/meta_table.h"
#include "sql/statement.h"
#include "sql/transaction.h"
#if BUILDFLAG(IS_APPLE)
#include "base/apple/backup_util.h"
#endif
namespace history {
namespace {
const int kCurrentVersionNumber = …;
const int kCompatibleVersionNumber = …;
const char kEarlyExpirationThresholdKey[] = …;
const char kMayContainForeignVisits[] = …;
const char kDeleteForeignVisitsUntilId[] = …;
const char kKnownToSyncVisitsExist[] = …;
sql::InitStatus LogMigrationFailure(int from_version) { … }
enum class InitStep { … };
sql::InitStatus LogInitFailure(InitStep what) { … }
}
HistoryDatabase::HistoryDatabase(
DownloadInterruptReason download_interrupt_reason_none,
DownloadInterruptReason download_interrupt_reason_crash)
: … { … }
HistoryDatabase::~HistoryDatabase() = default;
sql::InitStatus HistoryDatabase::Init(const base::FilePath& history_name) { … }
void HistoryDatabase::ComputeDatabaseMetrics(
const base::FilePath& history_name) { … }
int HistoryDatabase::CountUniqueHostsVisitedLastMonth() { … }
DomainsVisitedResult HistoryDatabase::GetUniqueDomainsVisited(
base::Time begin_time,
base::Time end_time) { … }
std::pair<int, int> HistoryDatabase::CountUniqueDomainsVisited(
base::Time begin_time,
base::Time end_time) { … }
void HistoryDatabase::BeginExclusiveMode() { … }
int HistoryDatabase::GetCurrentVersion() { … }
std::unique_ptr<sql::Transaction> HistoryDatabase::CreateTransaction() { … }
bool HistoryDatabase::RecreateAllTablesButURL() { … }
void HistoryDatabase::Vacuum() { … }
void HistoryDatabase::TrimMemory() { … }
bool HistoryDatabase::Raze() { … }
std::string HistoryDatabase::GetDiagnosticInfo(
int extended_error,
sql::Statement* statement,
sql::DatabaseDiagnostics* diagnostics) { … }
bool HistoryDatabase::SetSegmentID(VisitID visit_id, SegmentID segment_id) { … }
SegmentID HistoryDatabase::GetSegmentID(VisitID visit_id) { … }
base::Time HistoryDatabase::GetEarlyExpirationThreshold() { … }
void HistoryDatabase::UpdateEarlyExpirationThreshold(base::Time threshold) { … }
bool HistoryDatabase::MayContainForeignVisits() { … }
void HistoryDatabase::SetMayContainForeignVisits(
bool may_contain_foreign_visits) { … }
VisitID HistoryDatabase::GetDeleteForeignVisitsUntilId() { … }
void HistoryDatabase::SetDeleteForeignVisitsUntilId(VisitID visit_id) { … }
bool HistoryDatabase::KnownToSyncVisitsExist() { … }
void HistoryDatabase::SetKnownToSyncVisitsExist(bool exist) { … }
HistorySyncMetadataDatabase* HistoryDatabase::GetHistoryMetadataDB() { … }
sql::Database& HistoryDatabase::GetDBForTesting() { … }
sql::Database& HistoryDatabase::GetDB() { … }
sql::InitStatus HistoryDatabase::EnsureCurrentVersion() { … }
#if !BUILDFLAG(IS_WIN)
void HistoryDatabase::MigrateTimeEpoch() { … }
#endif
bool HistoryDatabase::MigrateRemoveTypedUrlMetadata() { … }
}