#include "net/dns/host_resolver_cache.h"
#include <cstddef>
#include <memory>
#include <optional>
#include <string>
#include <string_view>
#include <utility>
#include <vector>
#include "base/check_op.h"
#include "base/numerics/safe_conversions.h"
#include "base/time/clock.h"
#include "base/time/time.h"
#include "net/base/network_anonymization_key.h"
#include "net/dns/host_resolver_internal_result.h"
#include "net/dns/public/dns_query_type.h"
#include "net/dns/public/host_resolver_source.h"
#include "url/third_party/mozilla/url_parse.h"
#include "url/url_canon.h"
#include "url/url_canon_stdstring.h"
namespace net {
namespace {
constexpr std::string_view kNakKey = …;
constexpr std::string_view kSourceKey = …;
constexpr std::string_view kSecureKey = …;
constexpr std::string_view kResultKey = …;
constexpr std::string_view kStalenessGenerationKey = …;
constexpr std::string_view kMaxEntriesKey = …;
constexpr std::string_view kEntriesKey = …;
}
HostResolverCache::Key::~Key() = default;
HostResolverCache::StaleLookupResult::StaleLookupResult(
const HostResolverInternalResult& result,
std::optional<base::TimeDelta> expired_by,
bool stale_by_generation)
: … { … }
HostResolverCache::HostResolverCache(size_t max_results,
const base::Clock& clock,
const base::TickClock& tick_clock)
: … { … }
HostResolverCache::~HostResolverCache() = default;
HostResolverCache::HostResolverCache(HostResolverCache&&) = default;
HostResolverCache& HostResolverCache::operator=(HostResolverCache&&) = default;
const HostResolverInternalResult* HostResolverCache::Lookup(
std::string_view domain_name,
const NetworkAnonymizationKey& network_anonymization_key,
DnsQueryType query_type,
HostResolverSource source,
std::optional<bool> secure) const { … }
std::optional<HostResolverCache::StaleLookupResult>
HostResolverCache::LookupStale(
std::string_view domain_name,
const NetworkAnonymizationKey& network_anonymization_key,
DnsQueryType query_type,
HostResolverSource source,
std::optional<bool> secure) const { … }
void HostResolverCache::Set(
std::unique_ptr<HostResolverInternalResult> result,
const NetworkAnonymizationKey& network_anonymization_key,
HostResolverSource source,
bool secure) { … }
void HostResolverCache::MakeAllResultsStale() { … }
base::Value HostResolverCache::Serialize() const { … }
bool HostResolverCache::RestoreFromValue(const base::Value& value) { … }
base::Value HostResolverCache::SerializeForLogging() const { … }
HostResolverCache::Entry::Entry(
std::unique_ptr<HostResolverInternalResult> result,
HostResolverSource source,
bool secure,
int staleness_generation)
: … { … }
HostResolverCache::Entry::~Entry() = default;
HostResolverCache::Entry::Entry(Entry&&) = default;
HostResolverCache::Entry& HostResolverCache::Entry::operator=(Entry&&) =
default;
bool HostResolverCache::Entry::IsStale(base::Time now,
base::TimeTicks now_ticks,
int current_staleness_generation) const { … }
base::TimeDelta HostResolverCache::Entry::TimeUntilExpiration(
base::Time now,
base::TimeTicks now_ticks) const { … }
std::vector<HostResolverCache::EntryMap::const_iterator>
HostResolverCache::LookupInternal(
std::string_view domain_name,
const NetworkAnonymizationKey& network_anonymization_key,
DnsQueryType query_type,
HostResolverSource source,
std::optional<bool> secure) const { … }
void HostResolverCache::Set(
std::unique_ptr<HostResolverInternalResult> result,
const NetworkAnonymizationKey& network_anonymization_key,
HostResolverSource source,
bool secure,
bool replace_existing,
int staleness_generation) { … }
void HostResolverCache::EvictEntries() { … }
base::Value HostResolverCache::SerializeEntries(
bool serialize_staleness_generation,
bool require_persistable_anonymization_key) const { … }
}