#include "components/browsing_data/content/browsing_data_model.h"
#include <set>
#include <string>
#include "base/barrier_closure.h"
#include "base/check.h"
#include "base/containers/contains.h"
#include "base/containers/enum_set.h"
#include "base/feature_list.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/functional/overloaded.h"
#include "base/memory/weak_ptr.h"
#include "base/not_fatal_until.h"
#include "components/attribution_reporting/features.h"
#include "components/browsing_data/content/browsing_data_quota_helper.h"
#include "components/browsing_data/content/shared_worker_info.h"
#include "components/browsing_data/core/browsing_data_utils.h"
#include "components/services/storage/public/mojom/storage_usage_info.mojom.h"
#include "components/services/storage/shared_storage/shared_storage_manager.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/dom_storage_context.h"
#include "content/public/browser/private_aggregation_data_model.h"
#include "content/public/browser/session_storage_usage_info.h"
#include "content/public/browser/shared_worker_service.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/browser/storage_partition_config.h"
#include "content/public/browser/storage_usage_info.h"
#include "content/public/common/content_features.h"
#include "mojo/public/cpp/bindings/callback_helpers.h"
#include "net/cookies/canonical_cookie.h"
#include "net/cookies/cookie_util.h"
#include "services/network/network_context.h"
#include "services/network/public/cpp/features.h"
#include "services/network/public/mojom/clear_data_filter.mojom.h"
#include "services/network/public/mojom/network_context.mojom.h"
#include "services/network/public/mojom/trust_tokens.mojom.h"
#include "third_party/abseil-cpp/absl/types/variant.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/common/interest_group/interest_group.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "url/origin.h"
#include "url/url_util.h"
namespace {
constexpr int kSmallAmountOfDataInBytes = …;
constexpr int kModerateAmountOfDataInBytes = …;
struct GetDataOwner { … };
template <>
BrowsingDataModel::DataOwner GetDataOwner::GetOwningOriginOrHost<url::Origin>(
const url::Origin& data_key) const { … }
template <>
BrowsingDataModel::DataOwner
GetDataOwner::GetOwningOriginOrHost<blink::StorageKey>(
const blink::StorageKey& data_key) const { … }
template <>
BrowsingDataModel::DataOwner
GetDataOwner::GetOwningOriginOrHost<content::SessionStorageUsageInfo>(
const content::SessionStorageUsageInfo& session_storage_usage_info) const { … }
template <>
BrowsingDataModel::DataOwner GetDataOwner::GetOwningOriginOrHost<
content::InterestGroupManager::InterestGroupDataKey>(
const content::InterestGroupManager::InterestGroupDataKey& data_key) const { … }
template <>
BrowsingDataModel::DataOwner
GetDataOwner::GetOwningOriginOrHost<content::AttributionDataModel::DataKey>(
const content::AttributionDataModel::DataKey& data_key) const { … }
template <>
BrowsingDataModel::DataOwner GetDataOwner::GetOwningOriginOrHost<
content::PrivateAggregationDataModel::DataKey>(
const content::PrivateAggregationDataModel::DataKey& data_key) const { … }
template <>
BrowsingDataModel::DataOwner
GetDataOwner::GetOwningOriginOrHost<net::SharedDictionaryIsolationKey>(
const net::SharedDictionaryIsolationKey& isolation_key) const { … }
template <>
BrowsingDataModel::DataOwner
GetDataOwner::GetOwningOriginOrHost<browsing_data::SharedWorkerInfo>(
const browsing_data::SharedWorkerInfo& shared_worker_info) const { … }
template <>
BrowsingDataModel::DataOwner
GetDataOwner::GetOwningOriginOrHost<net::CanonicalCookie>(
const net::CanonicalCookie& cookie) const { … }
template <>
BrowsingDataModel::DataOwner
GetDataOwner::GetOwningOriginOrHost<webid::FederatedIdentityDataModel::DataKey>(
const webid::FederatedIdentityDataModel::DataKey& data_key) const { … }
struct StorageRemoverHelper { … };
template <>
void StorageRemoverHelper::Visitor::operator()<url::Origin>(
const url::Origin& origin) { … }
template <>
void StorageRemoverHelper::Visitor::operator()<blink::StorageKey>(
const blink::StorageKey& storage_key) { … }
template <>
void StorageRemoverHelper::Visitor::operator()<
content::SessionStorageUsageInfo>(
const content::SessionStorageUsageInfo& session_storage_usage_info) { … }
template <>
void StorageRemoverHelper::Visitor::operator()<browsing_data::SharedWorkerInfo>(
const browsing_data::SharedWorkerInfo& shared_worker_info) { … }
template <>
void StorageRemoverHelper::Visitor::operator()<
content::InterestGroupManager::InterestGroupDataKey>(
const content::InterestGroupManager::InterestGroupDataKey& data_key) { … }
template <>
void StorageRemoverHelper::Visitor::operator()<
content::AttributionDataModel::DataKey>(
const content::AttributionDataModel::DataKey& data_key) { … }
template <>
void StorageRemoverHelper::Visitor::operator()<
content::PrivateAggregationDataModel::DataKey>(
const content::PrivateAggregationDataModel::DataKey& data_key) { … }
template <>
void StorageRemoverHelper::Visitor::operator()<
net::SharedDictionaryIsolationKey>(
const net::SharedDictionaryIsolationKey& isolation_key) { … }
template <>
void StorageRemoverHelper::Visitor::operator()<net::CanonicalCookie>(
const net::CanonicalCookie& cookie) { … }
template <>
void StorageRemoverHelper::Visitor::operator()<
webid::FederatedIdentityDataModel::DataKey>(
const webid::FederatedIdentityDataModel::DataKey& data_key) { … }
void StorageRemoverHelper::RemoveDataKeyEntries(
const BrowsingDataModel::DataKeyEntries& data_key_entries,
base::OnceClosure completed) { … }
base::OnceClosure StorageRemoverHelper::GetCompleteCallback() { … }
void StorageRemoverHelper::BackendFinished() { … }
bool HasStorageScheme(const url::Origin& origin) { … }
void OnTrustTokenIssuanceInfoLoaded(
BrowsingDataModel* model,
base::OnceClosure loaded_callback,
std::vector<::network::mojom::StoredTrustTokensForIssuerPtr> tokens) { … }
void OnSharedStorageLoaded(
BrowsingDataModel* model,
base::OnceClosure loaded_callback,
std::vector<::storage::mojom::StorageUsageInfoPtr> storage_usage_info) { … }
void OnInterestGroupsLoaded(
BrowsingDataModel* model,
base::OnceClosure loaded_callback,
std::vector<content::InterestGroupManager::InterestGroupDataKey>
interest_groups) { … }
void OnAttributionReportingLoaded(
BrowsingDataModel* model,
base::OnceClosure loaded_callback,
std::set<content::AttributionDataModel::DataKey> attribution_reporting) { … }
void OnPrivateAggregationLoaded(
BrowsingDataModel* model,
base::OnceClosure loaded_callback,
std::set<content::PrivateAggregationDataModel::DataKey>
private_aggregation) { … }
void OnQuotaStorageLoaded(
BrowsingDataModel* model,
base::OnceClosure loaded_callback,
const std::list<BrowsingDataQuotaHelper::QuotaInfo>& quota_info) { … }
void OnLocalStorageLoaded(
BrowsingDataModel* model,
base::OnceClosure loaded_callback,
const std::vector<content::StorageUsageInfo>& storage_usage_info) { … }
void OnSharedDictionaryUsageLoaded(
BrowsingDataModel* model,
base::OnceClosure loaded_callback,
const std::vector<net::SharedDictionaryUsageInfo>& usage_info) { … }
void OnCookiesLoaded(BrowsingDataModel* model,
base::OnceClosure loaded_callback,
const net::CookieList& cookie_list) { … }
void OnDelegateDataLoaded(
BrowsingDataModel* model,
base::OnceClosure loaded_callback,
std::vector<BrowsingDataModel::Delegate::DelegateEntry> delegated_entries) { … }
#if BUILDFLAG(ENABLE_LIBRARY_CDMS)
void OnCdmStorageLoaded(BrowsingDataModel* model,
base::OnceClosure loaded_callback,
const CdmStorageKeyUsageSize& usage_for_storage_keys) { … }
#endif
std::optional<net::SchemefulSite> GetThirdPartyPartitioningSite(
const BrowsingDataModel::DataKey& data_key) { … }
}
BrowsingDataModel::DataDetails::~DataDetails() = default;
bool BrowsingDataModel::DataDetails::operator==(
const DataDetails& other) const { … }
BrowsingDataModel::BrowsingDataEntryView::BrowsingDataEntryView(
const DataOwner& data_owner,
const DataKey& data_key,
const DataDetails& data_details)
: … { … }
BrowsingDataModel::BrowsingDataEntryView::~BrowsingDataEntryView() = default;
const std::string BrowsingDataModel::GetHost(const DataOwner& data_owner) { … }
const url::Origin BrowsingDataModel::GetOriginForDataKey(
const BrowsingDataModel::DataKey& data_key) { … }
bool BrowsingDataModel::BrowsingDataEntryView::Matches(
const url::Origin& origin) const { … }
std::optional<net::SchemefulSite>
BrowsingDataModel::BrowsingDataEntryView::GetThirdPartyPartitioningSite()
const { … }
BrowsingDataModel::Delegate::DelegateEntry::DelegateEntry(
const DataKey& data_key,
StorageType storage_type,
uint64_t storage_size)
: … { … }
BrowsingDataModel::Delegate::DelegateEntry::DelegateEntry(
const DelegateEntry& other) = default;
BrowsingDataModel::Delegate::DelegateEntry::~DelegateEntry() = default;
BrowsingDataModel::Iterator::Iterator(const Iterator& iterator) = default;
BrowsingDataModel::Iterator::~Iterator() = default;
bool BrowsingDataModel::Iterator::operator==(const Iterator& other) const { … }
bool BrowsingDataModel::Iterator::operator!=(const Iterator& other) const { … }
BrowsingDataModel::BrowsingDataEntryView
BrowsingDataModel::Iterator::operator*() const { … }
BrowsingDataModel::Iterator& BrowsingDataModel::Iterator::operator++() { … }
BrowsingDataModel::Iterator::Iterator(
BrowsingDataEntries::const_iterator outer_iterator,
BrowsingDataEntries::const_iterator outer_end_iterator)
: … { … }
BrowsingDataModel::Iterator BrowsingDataModel::begin() const { … }
BrowsingDataModel::Iterator BrowsingDataModel::end() const { … }
BrowsingDataModel::~BrowsingDataModel() = default;
void BrowsingDataModel::BuildFromDisk(
content::BrowserContext* browser_context,
std::unique_ptr<Delegate> delegate,
base::OnceCallback<void(std::unique_ptr<BrowsingDataModel>)>
complete_callback) { … }
void BrowsingDataModel::BuildFromNonDefaultStoragePartition(
content::StoragePartition* storage_partition,
std::unique_ptr<Delegate> delegate,
base::OnceCallback<void(std::unique_ptr<BrowsingDataModel>)>
complete_callback) { … }
void BrowsingDataModel::BuildFromStoragePartition(
content::StoragePartition* storage_partition,
std::unique_ptr<Delegate> delegate,
base::OnceCallback<void(std::unique_ptr<BrowsingDataModel>)>
complete_callback) { … }
void BrowsingDataModel::RemoveBrowsingDataEntriesFromDisk(
const BrowsingDataModel::DataKeyEntries& browsing_data_entries,
base::OnceClosure completed) { … }
std::unique_ptr<BrowsingDataModel> BrowsingDataModel::BuildEmpty(
content::StoragePartition* storage_partition,
std::unique_ptr<Delegate> delegate) { … }
void BrowsingDataModel::AddBrowsingData(const DataKey& data_key,
StorageType storage_type,
uint64_t storage_size,
uint64_t cookie_count,
bool blocked_third_party) { … }
void BrowsingDataModel::RemoveBrowsingData(const DataOwner& data_owner,
base::OnceClosure completed) { … }
void BrowsingDataModel::RemovePartitionedBrowsingData(
const DataOwner& data_owner,
const net::SchemefulSite& top_level_site,
base::OnceClosure completed) { … }
void BrowsingDataModel::RemoveUnpartitionedBrowsingData(
const DataOwner& data_owner,
base::OnceClosure completed) { … }
bool BrowsingDataModel::IsStorageTypeCookieLike(
StorageType storage_type) const { … }
bool BrowsingDataModel::IsBlockedByThirdPartyCookieBlocking(
const DataKey& data_key,
StorageType storage_type) const { … }
void BrowsingDataModel::PopulateFromDisk(base::OnceClosure finished_callback) { … }
BrowsingDataModel::BrowsingDataModel(
content::StoragePartition* storage_partition,
std::unique_ptr<Delegate> delegate)
: … { … }
void BrowsingDataModel::
GetAffectedDataKeyEntriesForRemovePartitionedBrowsingData(
const DataOwner& data_owner,
const net::SchemefulSite& top_level_site,
DataKeyEntries& affected_data_key_entries) { … }