// Copyright 2021 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "components/privacy_sandbox/privacy_sandbox_test_util.h" #include "base/feature_list.h" #include "components/content_settings/core/browser/cookie_settings.h" #include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/content_settings/core/common/pref_names.h" #include "components/content_settings/core/test/content_settings_mock_provider.h" #include "components/content_settings/core/test/content_settings_test_utils.h" #include "components/privacy_sandbox/privacy_sandbox_features.h" #include "components/privacy_sandbox/privacy_sandbox_prefs.h" #include "components/sync_preferences/testing_pref_service_syncable.h" namespace privacy_sandbox_test_util { MockPrivacySandboxObserver::MockPrivacySandboxObserver() = default; MockPrivacySandboxObserver::~MockPrivacySandboxObserver() = default; MockPrivacySandboxSettingsDelegate::MockPrivacySandboxSettingsDelegate() = default; MockPrivacySandboxSettingsDelegate::~MockPrivacySandboxSettingsDelegate() = default; void SetupTestState( sync_preferences::TestingPrefServiceSyncable* testing_pref_service, HostContentSettingsMap* map, bool privacy_sandbox_enabled, bool block_third_party_cookies, ContentSetting default_cookie_setting, const std::vector& user_cookie_exceptions, ContentSetting managed_cookie_setting, const std::vector& managed_cookie_exceptions) { // Setup block-third-party-cookies settings. testing_pref_service->SetUserPref( prefs::kCookieControlsMode, std::make_unique(static_cast( block_third_party_cookies ? content_settings::CookieControlsMode::kBlockThirdParty : content_settings::CookieControlsMode::kOff))); // Setup cookie content settings. auto user_provider = std::make_unique(); auto managed_provider = std::make_unique(); if (default_cookie_setting != kNoSetting) { user_provider->SetWebsiteSetting( ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), ContentSettingsType::COOKIES, base::Value(default_cookie_setting)); } for (const auto& exception : user_cookie_exceptions) { user_provider->SetWebsiteSetting( ContentSettingsPattern::FromString(exception.primary_pattern), ContentSettingsPattern::FromString(exception.secondary_pattern), ContentSettingsType::COOKIES, base::Value(exception.content_setting)); } if (managed_cookie_setting != kNoSetting) { managed_provider->SetWebsiteSetting( ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), ContentSettingsType::COOKIES, base::Value(managed_cookie_setting)); } for (const auto& exception : managed_cookie_exceptions) { managed_provider->SetWebsiteSetting( ContentSettingsPattern::FromString(exception.primary_pattern), ContentSettingsPattern::FromString(exception.secondary_pattern), ContentSettingsType::COOKIES, base::Value(exception.content_setting)); } content_settings::TestUtils::OverrideProvider( map, std::move(user_provider), HostContentSettingsMap::DEFAULT_PROVIDER); content_settings::TestUtils::OverrideProvider( map, std::move(managed_provider), HostContentSettingsMap::POLICY_PROVIDER); // Only adjust the Privacy Sandbox preference which should be being consulted // based on feature state. if (base::FeatureList::IsEnabled(privacy_sandbox::kPrivacySandboxSettings3)) { testing_pref_service->SetUserPref( prefs::kPrivacySandboxApisEnabledV2, std::make_unique(privacy_sandbox_enabled)); } else { testing_pref_service->SetUserPref( prefs::kPrivacySandboxApisEnabled, std::make_unique(privacy_sandbox_enabled)); } } } // namespace privacy_sandbox_test_util