#include "components/content_settings/core/browser/host_content_settings_map.h"
#include <stddef.h>
#include <algorithm>
#include <memory>
#include <utility>
#include <vector>
#include "base/check.h"
#include "base/command_line.h"
#include "base/containers/contains.h"
#include "base/containers/fixed_flat_map.h"
#include "base/containers/flat_map.h"
#include "base/feature_list.h"
#include "base/functional/bind.h"
#include "base/metrics/histogram_functions.h"
#include "base/observer_list.h"
#include "base/ranges/algorithm.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/task/single_thread_task_runner.h"
#include "base/time/clock.h"
#include "base/time/default_clock.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
#include "base/trace_event/trace_event.h"
#include "base/values.h"
#include "build/build_config.h"
#include "components/content_settings/core/browser/content_settings_default_provider.h"
#include "components/content_settings/core/browser/content_settings_info.h"
#include "components/content_settings/core/browser/content_settings_observable_provider.h"
#include "components/content_settings/core/browser/content_settings_observer.h"
#include "components/content_settings/core/browser/content_settings_policy_provider.h"
#include "components/content_settings/core/browser/content_settings_pref_provider.h"
#include "components/content_settings/core/browser/content_settings_provider.h"
#include "components/content_settings/core/browser/content_settings_registry.h"
#include "components/content_settings/core/browser/content_settings_rule.h"
#include "components/content_settings/core/browser/content_settings_uma_util.h"
#include "components/content_settings/core/browser/content_settings_utils.h"
#include "components/content_settings/core/browser/user_modifiable_provider.h"
#include "components/content_settings/core/browser/website_settings_info.h"
#include "components/content_settings/core/browser/website_settings_registry.h"
#include "components/content_settings/core/common/content_settings.h"
#include "components/content_settings/core/common/content_settings_constraints.h"
#include "components/content_settings/core/common/content_settings_enums.mojom-shared.h"
#include "components/content_settings/core/common/content_settings_metadata.h"
#include "components/content_settings/core/common/content_settings_partition_key.h"
#include "components/content_settings/core/common/content_settings_pattern.h"
#include "components/content_settings/core/common/content_settings_types.h"
#include "components/content_settings/core/common/content_settings_utils.h"
#include "components/content_settings/core/common/features.h"
#include "components/content_settings/core/common/pref_names.h"
#include "components/pref_registry/pref_registry_syncable.h"
#include "components/prefs/pref_service.h"
#include "net/base/net_errors.h"
#include "net/cookies/static_cookie_policy.h"
#include "url/gurl.h"
ContentSettingsInfo;
SettingSource;
WebsiteSettingsInfo;
namespace {
Rules;
StringPair;
ProviderType;
struct ProviderNamesSourceMapEntry { … };
const ProviderType kFirstProvider = …;
const ProviderType kFirstUserModifiableProvider = …;
constexpr bool FirstUserModifiableProviderIsHighestPrecedence() { … }
static_assert …;
bool SchemeCanBeAllowlisted(const std::string& scheme) { … }
base::Value ProcessIncognitoInheritanceBehavior(
ContentSettingsType content_type,
base::Value value) { … }
content_settings::PatternPair GetPatternsFromScopingType(
WebsiteSettingsInfo::ScopingType scoping_type,
const GURL& primary_url,
const GURL& secondary_url) { … }
enum class FlashPermissions { … };
bool ShouldCollectFineGrainedExceptionHistograms(ContentSettingsType type) { … }
bool ShouldCollectRequesterAndEmbedderHistograms(ContentSettingsType type) { … }
const char* ContentSettingToString(ContentSetting setting) { … }
struct ContentSettingEntry { … };
}
HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs,
bool is_off_the_record,
bool store_last_modified,
bool restore_session,
bool should_record_metrics)
: … { … }
void HostContentSettingsMap::RegisterProfilePrefs(
user_prefs::PrefRegistrySyncable* registry) { … }
void HostContentSettingsMap::RegisterUserModifiableProvider(
ProviderType type,
std::unique_ptr<content_settings::UserModifiableProvider> provider) { … }
void HostContentSettingsMap::RegisterProvider(
ProviderType type,
std::unique_ptr<content_settings::ObservableProvider> provider) { … }
ContentSetting HostContentSettingsMap::GetDefaultContentSettingFromProvider(
ContentSettingsType content_type,
content_settings::ProviderInterface* provider) const { … }
ContentSetting HostContentSettingsMap::GetDefaultContentSettingInternal(
ContentSettingsType content_type,
ProviderType* provider_type) const { … }
ContentSetting HostContentSettingsMap::GetDefaultContentSetting(
ContentSettingsType content_type,
ProviderType* provider_id) const { … }
ContentSetting HostContentSettingsMap::GetContentSetting(
const GURL& primary_url,
const GURL& secondary_url,
ContentSettingsType content_type,
content_settings::SettingInfo* info) const { … }
ContentSetting HostContentSettingsMap::GetUserModifiableContentSetting(
const GURL& primary_url,
const GURL& secondary_url,
ContentSettingsType content_type) const { … }
ContentSettingsForOneType HostContentSettingsMap::GetSettingsForOneType(
ContentSettingsType content_type,
std::optional<content_settings::mojom::SessionModel> session_model) const { … }
void HostContentSettingsMap::SetDefaultContentSetting(
ContentSettingsType content_type,
ContentSetting setting) { … }
void HostContentSettingsMap::SetWebsiteSettingDefaultScope(
const GURL& primary_url,
const GURL& secondary_url,
ContentSettingsType content_type,
base::Value value,
const content_settings::ContentSettingConstraints& constraints) { … }
void HostContentSettingsMap::SetWebsiteSettingCustomScope(
const ContentSettingsPattern& primary_pattern,
const ContentSettingsPattern& secondary_pattern,
ContentSettingsType content_type,
base::Value value,
const content_settings::ContentSettingConstraints& constraints) { … }
bool HostContentSettingsMap::CanSetNarrowestContentSetting(
const GURL& primary_url,
const GURL& secondary_url,
ContentSettingsType type) const { … }
bool HostContentSettingsMap::IsRestrictedToSecureOrigins(
ContentSettingsType type) const { … }
void HostContentSettingsMap::SetNarrowestContentSetting(
const GURL& primary_url,
const GURL& secondary_url,
ContentSettingsType type,
ContentSetting setting,
const content_settings::ContentSettingConstraints& constraints) { … }
content_settings::PatternPair HostContentSettingsMap::GetNarrowestPatterns(
const GURL& primary_url,
const GURL& secondary_url,
ContentSettingsType type) const { … }
content_settings::PatternPair
HostContentSettingsMap::GetPatternsForContentSettingsType(
const GURL& primary_url,
const GURL& secondary_url,
ContentSettingsType type) { … }
void HostContentSettingsMap::SetContentSettingCustomScope(
const ContentSettingsPattern& primary_pattern,
const ContentSettingsPattern& secondary_pattern,
ContentSettingsType content_type,
ContentSetting setting,
const content_settings::ContentSettingConstraints& constraints) { … }
void HostContentSettingsMap::SetContentSettingDefaultScope(
const GURL& primary_url,
const GURL& secondary_url,
ContentSettingsType content_type,
ContentSetting setting,
const content_settings::ContentSettingConstraints& constraints) { … }
base::WeakPtr<HostContentSettingsMap> HostContentSettingsMap::GetWeakPtr() { … }
void HostContentSettingsMap::SetClockForTesting(base::Clock* clock) { … }
void HostContentSettingsMap::RecordExceptionMetrics() { … }
void HostContentSettingsMap::RecordThirdPartyCookieMetrics(
const ContentSettingsForOneType& settings) { … }
void HostContentSettingsMap::AddObserver(content_settings::Observer* observer) { … }
void HostContentSettingsMap::RemoveObserver(
content_settings::Observer* observer) { … }
void HostContentSettingsMap::FlushLossyWebsiteSettings() { … }
void HostContentSettingsMap::UpdateLastUsedTime(const GURL& primary_url,
const GURL& secondary_url,
ContentSettingsType type,
const base::Time time) { … }
void HostContentSettingsMap::ResetLastVisitedTime(
const ContentSettingsPattern& primary_pattern,
const ContentSettingsPattern& secondary_pattern,
ContentSettingsType type) { … }
void HostContentSettingsMap::UpdateLastVisitedTime(
const ContentSettingsPattern& primary_pattern,
const ContentSettingsPattern& secondary_pattern,
ContentSettingsType type) { … }
std::optional<base::TimeDelta> HostContentSettingsMap::RenewContentSetting(
const GURL& primary_url,
const GURL& secondary_url,
ContentSettingsType type,
std::optional<ContentSetting> setting_to_match) { … }
void HostContentSettingsMap::ClearSettingsForOneType(
ContentSettingsType content_type) { … }
void HostContentSettingsMap::ClearSettingsForOneTypeWithPredicate(
ContentSettingsType content_type,
base::Time begin_time,
base::Time end_time,
PatternSourcePredicate pattern_predicate) { … }
void HostContentSettingsMap::ClearSettingsForOneTypeWithPredicate(
ContentSettingsType content_type,
base::FunctionRef<bool(const ContentSettingPatternSource&)> predicate) { … }
void HostContentSettingsMap::OnContentSettingChanged(
const ContentSettingsPattern& primary_pattern,
const ContentSettingsPattern& secondary_pattern,
ContentSettingsTypeSet content_type_set) { … }
HostContentSettingsMap::~HostContentSettingsMap() { … }
void HostContentSettingsMap::ShutdownOnUIThread() { … }
void HostContentSettingsMap::AddSettingsForOneType(
const content_settings::ProviderInterface* provider,
ProviderType provider_type,
ContentSettingsType content_type,
ContentSettingsForOneType* settings,
bool incognito,
std::optional<content_settings::mojom::SessionModel> session_model) const { … }
void HostContentSettingsMap::UsedContentSettingsProviders() const { … }
base::Value HostContentSettingsMap::GetWebsiteSetting(
const GURL& primary_url,
const GURL& secondary_url,
ContentSettingsType content_type,
content_settings::SettingInfo* info) const { … }
base::Value HostContentSettingsMap::GetWebsiteSettingInternal(
const GURL& primary_url,
const GURL& secondary_url,
ContentSettingsType content_type,
ProviderType first_provider_to_search,
content_settings::SettingInfo* info) const { … }
base::Value HostContentSettingsMap::GetContentSettingValueAndPatterns(
const content_settings::ProviderInterface* provider,
const GURL& primary_url,
const GURL& secondary_url,
ContentSettingsType content_type,
bool include_incognito,
ContentSettingsPattern* primary_pattern,
ContentSettingsPattern* secondary_pattern,
content_settings::RuleMetaData* metadata) { … }
base::Value HostContentSettingsMap::GetContentSettingValueAndPatterns(
content_settings::Rule* rule,
ContentSettingsPattern* primary_pattern,
ContentSettingsPattern* secondary_pattern,
content_settings::RuleMetaData* metadata) { … }
void HostContentSettingsMap::
MigrateSettingsPrecedingPermissionDelegationActivation() { … }
void HostContentSettingsMap::
MigrateSingleSettingPrecedingPermissionDelegationActivation(
const content_settings::WebsiteSettingsInfo* info) { … }
bool HostContentSettingsMap::IsSecondaryPatternAllowed(
const ContentSettingsPattern& primary_pattern,
const ContentSettingsPattern& secondary_pattern,
ContentSettingsType content_type,
const base::Value& value) { … }
void HostContentSettingsMap::UpdateExpiryEnforcementTimer(
ContentSettingsType content_type,
base::Time expiration) { … }
void HostContentSettingsMap::DeleteNearlyExpiredSettingsAndMaybeScheduleNextRun(
ContentSettingsType content_setting_type) { … }