blob: 67744d733d700dde99b6afe30caeb902a7198e9f [file] [log] [blame]
// Copyright 2020 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 "chrome/browser/content_settings/generated_cookie_prefs.h"
#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
#include "chrome/browser/extensions/api/settings_private/generated_pref.h"
#include "chrome/browser/extensions/api/settings_private/generated_pref_test_base.h"
#include "chrome/common/extensions/api/settings_private.h"
#include "chrome/test/base/testing_profile.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/sync_preferences/testing_pref_service_syncable.h"
#include "content/public/test/browser_task_environment.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace settings_api = extensions::api::settings_private;
namespace settings_private = extensions::settings_private;
namespace content_settings {
namespace {
// Sets the value of |generated_pref| to |pref_value| and then ensures that
// the cookie content settings and preferences match |expected_content_setting|,
// |expected_block_third_party|, and |expected_cookie_controls_mode|.
// The value of the new PrefObject returned by the |generated_pref| is then
// checked against |expected_pref_value|.
void ValidatePrimarySettingPrefValue(
HostContentSettingsMap* map,
sync_preferences::TestingPrefServiceSyncable* prefs,
GeneratedCookiePrimarySettingPref* generated_pref,
CookiePrimarySetting pref_value,
ContentSetting expected_content_setting,
CookieControlsMode expected_cookie_controls_mode) {
EXPECT_EQ(
generated_pref->SetPref(
std::make_unique<base::Value>(static_cast<int>(pref_value)).get()),
extensions::settings_private::SetPrefResult::SUCCESS);
EXPECT_EQ(
map->GetDefaultContentSetting(ContentSettingsType::COOKIES, nullptr),
expected_content_setting);
EXPECT_EQ(static_cast<CookieControlsMode>(
prefs->GetUserPref(prefs::kCookieControlsMode)->GetInt()),
expected_cookie_controls_mode);
EXPECT_EQ(static_cast<CookiePrimarySetting>(
generated_pref->GetPrefObject()->value->GetInt()),
pref_value);
}
// Define additional unused values of Enforcement, ControlledBy and
// CookiePrimarySetting, to support testing not set values.
const settings_api::ControlledBy kNoControlledBy =
static_cast<settings_api::ControlledBy>(-1);
const settings_api::Enforcement kNoEnforcement =
static_cast<settings_api::Enforcement>(-1);
const CookiePrimarySetting kNoRecommendedValue =
static_cast<CookiePrimarySetting>(-1);
// Represents a set of settings, preferences and the associated expected
// fields for the returned preference object.
struct PrimaryCookieSettingManagedTestCase {
ContentSetting default_content_setting;
content_settings::SettingSource default_content_setting_source;
settings_private::PrefSetting block_third_party;
settings_private::PrefSource block_third_party_source;
settings_api::ControlledBy expected_controlled_by;
settings_api::Enforcement expected_enforcement;
CookiePrimarySetting expected_recommended_value;
std::vector<CookiePrimarySetting> expected_user_selectable_values;
};
const std::vector<PrimaryCookieSettingManagedTestCase> managed_test_cases = {
{CONTENT_SETTING_DEFAULT,
content_settings::SETTING_SOURCE_NONE,
settings_private::PrefSetting::kEnforcedOff,
settings_private::PrefSource::kExtension,
settings_api::ControlledBy::CONTROLLED_BY_EXTENSION,
settings_api::Enforcement::ENFORCEMENT_ENFORCED,
kNoRecommendedValue,
{CookiePrimarySetting::ALLOW_ALL, CookiePrimarySetting::BLOCK_ALL}},
{CONTENT_SETTING_DEFAULT,
content_settings::SETTING_SOURCE_NONE,
settings_private::PrefSetting::kEnforcedOn,
settings_private::PrefSource::kDevicePolicy,
settings_api::ControlledBy::CONTROLLED_BY_DEVICE_POLICY,
settings_api::Enforcement::ENFORCEMENT_ENFORCED,
kNoRecommendedValue,
{CookiePrimarySetting::BLOCK_THIRD_PARTY,
CookiePrimarySetting::BLOCK_ALL}},
{CONTENT_SETTING_DEFAULT,
content_settings::SETTING_SOURCE_NONE,
settings_private::PrefSetting::kRecommendedOff,
settings_private::PrefSource::kRecommended,
kNoControlledBy,
settings_api::Enforcement::ENFORCEMENT_RECOMMENDED,
CookiePrimarySetting::ALLOW_ALL,
{}},
{CONTENT_SETTING_DEFAULT,
content_settings::SETTING_SOURCE_NONE,
settings_private::PrefSetting::kRecommendedOn,
settings_private::PrefSource::kRecommended,
kNoControlledBy,
settings_api::Enforcement::ENFORCEMENT_RECOMMENDED,
CookiePrimarySetting::BLOCK_THIRD_PARTY,
{}},
{CONTENT_SETTING_DEFAULT,
content_settings::SETTING_SOURCE_NONE,
settings_private::PrefSetting::kNotSet,
settings_private::PrefSource::kNone,
kNoControlledBy,
kNoEnforcement,
kNoRecommendedValue,
{}},
{CONTENT_SETTING_ALLOW,
content_settings::SETTING_SOURCE_POLICY,
settings_private::PrefSetting::kEnforcedOff,
settings_private::PrefSource::kExtension,
settings_api::ControlledBy::CONTROLLED_BY_EXTENSION,
settings_api::Enforcement::ENFORCEMENT_ENFORCED,
kNoRecommendedValue,
{}},
{CONTENT_SETTING_ALLOW,
content_settings::SETTING_SOURCE_EXTENSION,
settings_private::PrefSetting::kEnforcedOn,
settings_private::PrefSource::kDevicePolicy,
settings_api::ControlledBy::CONTROLLED_BY_DEVICE_POLICY,
settings_api::Enforcement::ENFORCEMENT_ENFORCED,
kNoRecommendedValue,
{}},
{CONTENT_SETTING_ALLOW,
content_settings::SETTING_SOURCE_SUPERVISED,
settings_private::PrefSetting::kRecommendedOff,
settings_private::PrefSource::kRecommended,
settings_api::ControlledBy::CONTROLLED_BY_CHILD_RESTRICTION,
settings_api::Enforcement::ENFORCEMENT_ENFORCED,
CookiePrimarySetting::ALLOW_ALL,
{CookiePrimarySetting::ALLOW_ALL,
CookiePrimarySetting::BLOCK_THIRD_PARTY_INCOGNITO,
CookiePrimarySetting::BLOCK_THIRD_PARTY}},
{CONTENT_SETTING_ALLOW,
content_settings::SETTING_SOURCE_POLICY,
settings_private::PrefSetting::kRecommendedOn,
settings_private::PrefSource::kRecommended,
settings_api::ControlledBy::CONTROLLED_BY_DEVICE_POLICY,
settings_api::Enforcement::ENFORCEMENT_ENFORCED,
CookiePrimarySetting::BLOCK_THIRD_PARTY,
{CookiePrimarySetting::ALLOW_ALL,
CookiePrimarySetting::BLOCK_THIRD_PARTY_INCOGNITO,
CookiePrimarySetting::BLOCK_THIRD_PARTY}},
{CONTENT_SETTING_ALLOW,
content_settings::SETTING_SOURCE_EXTENSION,
settings_private::PrefSetting::kNotSet,
settings_private::PrefSource::kNone,
settings_api::ControlledBy::CONTROLLED_BY_EXTENSION,
settings_api::Enforcement::ENFORCEMENT_ENFORCED,
kNoRecommendedValue,
{CookiePrimarySetting::ALLOW_ALL,
CookiePrimarySetting::BLOCK_THIRD_PARTY_INCOGNITO,
CookiePrimarySetting::BLOCK_THIRD_PARTY}},
{CONTENT_SETTING_BLOCK,
content_settings::SETTING_SOURCE_SUPERVISED,
settings_private::PrefSetting::kEnforcedOff,
settings_private::PrefSource::kDevicePolicy,
settings_api::ControlledBy::CONTROLLED_BY_CHILD_RESTRICTION,
settings_api::Enforcement::ENFORCEMENT_ENFORCED,
kNoRecommendedValue,
{}},
{CONTENT_SETTING_BLOCK,
content_settings::SETTING_SOURCE_POLICY,
settings_private::PrefSetting::kEnforcedOn,
settings_private::PrefSource::kExtension,
settings_api::ControlledBy::CONTROLLED_BY_DEVICE_POLICY,
settings_api::Enforcement::ENFORCEMENT_ENFORCED,
kNoRecommendedValue,
{}},
{CONTENT_SETTING_BLOCK,
content_settings::SETTING_SOURCE_EXTENSION,
settings_private::PrefSetting::kRecommendedOff,
settings_private::PrefSource::kRecommended,
settings_api::ControlledBy::CONTROLLED_BY_EXTENSION,
settings_api::Enforcement::ENFORCEMENT_ENFORCED,
kNoRecommendedValue,
{}},
{CONTENT_SETTING_BLOCK,
content_settings::SETTING_SOURCE_SUPERVISED,
settings_private::PrefSetting::kRecommendedOn,
settings_private::PrefSource::kRecommended,
settings_api::ControlledBy::CONTROLLED_BY_CHILD_RESTRICTION,
settings_api::Enforcement::ENFORCEMENT_ENFORCED,
kNoRecommendedValue,
{}},
{CONTENT_SETTING_BLOCK,
content_settings::SETTING_SOURCE_POLICY,
settings_private::PrefSetting::kNotSet,
settings_private::PrefSource::kNone,
settings_api::ControlledBy::CONTROLLED_BY_DEVICE_POLICY,
settings_api::Enforcement::ENFORCEMENT_ENFORCED,
kNoRecommendedValue,
{}},
{CONTENT_SETTING_SESSION_ONLY,
content_settings::SETTING_SOURCE_EXTENSION,
settings_private::PrefSetting::kEnforcedOff,
settings_private::PrefSource::kDevicePolicy,
settings_api::ControlledBy::CONTROLLED_BY_DEVICE_POLICY,
settings_api::Enforcement::ENFORCEMENT_ENFORCED,
kNoRecommendedValue,
{}},
{CONTENT_SETTING_SESSION_ONLY,
content_settings::SETTING_SOURCE_SUPERVISED,
settings_private::PrefSetting::kEnforcedOn,
settings_private::PrefSource::kExtension,
settings_api::ControlledBy::CONTROLLED_BY_EXTENSION,
settings_api::Enforcement::ENFORCEMENT_ENFORCED,
kNoRecommendedValue,
{}},
{CONTENT_SETTING_SESSION_ONLY,
content_settings::SETTING_SOURCE_POLICY,
settings_private::PrefSetting::kRecommendedOff,
settings_private::PrefSource::kRecommended,
settings_api::ControlledBy::CONTROLLED_BY_DEVICE_POLICY,
settings_api::Enforcement::ENFORCEMENT_ENFORCED,
CookiePrimarySetting::ALLOW_ALL,
{CookiePrimarySetting::ALLOW_ALL,
CookiePrimarySetting::BLOCK_THIRD_PARTY_INCOGNITO,
CookiePrimarySetting::BLOCK_THIRD_PARTY}},
{CONTENT_SETTING_SESSION_ONLY,
content_settings::SETTING_SOURCE_EXTENSION,
settings_private::PrefSetting::kRecommendedOn,
settings_private::PrefSource::kRecommended,
settings_api::ControlledBy::CONTROLLED_BY_EXTENSION,
settings_api::Enforcement::ENFORCEMENT_ENFORCED,
CookiePrimarySetting::BLOCK_THIRD_PARTY,
{CookiePrimarySetting::ALLOW_ALL,
CookiePrimarySetting::BLOCK_THIRD_PARTY_INCOGNITO,
CookiePrimarySetting::BLOCK_THIRD_PARTY}},
{CONTENT_SETTING_SESSION_ONLY,
content_settings::SETTING_SOURCE_SUPERVISED,
settings_private::PrefSetting::kNotSet,
settings_private::PrefSource::kNone,
settings_api::ControlledBy::CONTROLLED_BY_CHILD_RESTRICTION,
settings_api::Enforcement::ENFORCEMENT_ENFORCED,
kNoRecommendedValue,
{CookiePrimarySetting::ALLOW_ALL,
CookiePrimarySetting::BLOCK_THIRD_PARTY_INCOGNITO,
CookiePrimarySetting::BLOCK_THIRD_PARTY}},
};
void SetupManagedTestConditions(
HostContentSettingsMap* map,
sync_preferences::TestingPrefServiceSyncable* prefs,
const PrimaryCookieSettingManagedTestCase& test_case) {
auto provider = std::make_unique<content_settings::MockProvider>();
provider->SetWebsiteSetting(
ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(),
ContentSettingsType::COOKIES,
std::make_unique<base::Value>(test_case.default_content_setting));
if (test_case.default_content_setting != CONTENT_SETTING_DEFAULT) {
auto mock_provider = std::make_unique<content_settings::MockProvider>();
mock_provider->SetWebsiteSetting(
ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(),
ContentSettingsType::COOKIES,
std::make_unique<base::Value>(test_case.default_content_setting));
HostContentSettingsMap::ProviderType provider_type;
switch (test_case.default_content_setting_source) {
case content_settings::SETTING_SOURCE_POLICY:
provider_type = HostContentSettingsMap::POLICY_PROVIDER;
break;
case content_settings::SETTING_SOURCE_EXTENSION:
provider_type = HostContentSettingsMap::CUSTOM_EXTENSION_PROVIDER;
break;
case content_settings::SETTING_SOURCE_SUPERVISED:
provider_type = HostContentSettingsMap::SUPERVISED_PROVIDER;
break;
case content_settings::SETTING_SOURCE_NONE:
default:
provider_type = HostContentSettingsMap::DEFAULT_PROVIDER;
}
content_settings::TestUtils::OverrideProvider(map, std::move(mock_provider),
provider_type);
}
if (test_case.block_third_party != settings_private::PrefSetting::kNotSet) {
CookieControlsMode cookie_controls_mode = CookieControlsMode::kOff;
if (test_case.block_third_party ==
settings_private::PrefSetting::kRecommendedOn ||
test_case.block_third_party ==
settings_private::PrefSetting::kEnforcedOn) {
cookie_controls_mode = CookieControlsMode::kBlockThirdParty;
}
auto cookie_controls_mode_value =
std::make_unique<base::Value>(static_cast<int>(cookie_controls_mode));
if (test_case.block_third_party_source ==
settings_private::PrefSource::kExtension) {
prefs->SetExtensionPref(prefs::kCookieControlsMode,
std::move(cookie_controls_mode_value));
} else if (test_case.block_third_party_source ==
settings_private::PrefSource::kDevicePolicy) {
prefs->SetManagedPref(prefs::kCookieControlsMode,
std::move(cookie_controls_mode_value));
} else if (test_case.block_third_party_source ==
settings_private::PrefSource::kRecommended) {
prefs->SetRecommendedPref(prefs::kCookieControlsMode,
std::move(cookie_controls_mode_value));
}
}
}
void ValidateManagedPreference(
settings_api::PrefObject* pref,
const PrimaryCookieSettingManagedTestCase& test_case) {
if (test_case.expected_controlled_by != kNoControlledBy)
EXPECT_EQ(pref->controlled_by, test_case.expected_controlled_by);
if (test_case.expected_enforcement != kNoEnforcement)
EXPECT_EQ(pref->enforcement, test_case.expected_enforcement);
if (test_case.expected_recommended_value != kNoRecommendedValue)
EXPECT_EQ(
static_cast<CookiePrimarySetting>(pref->recommended_value->GetInt()),
test_case.expected_recommended_value);
// Ensure user selectable values are as expected. Ordering is enforced here
// despite not being required by the SettingsPrivate API.
// First convert std::vector<std::unique_ptr<base::value(T)>> to
// std::vector<T> for easier comparison.
std::vector<CookiePrimarySetting> pref_user_selectable_values;
if (pref->user_selectable_values) {
for (const auto& value : *pref->user_selectable_values) {
pref_user_selectable_values.push_back(
static_cast<CookiePrimarySetting>(value->GetInt()));
}
}
EXPECT_EQ(pref_user_selectable_values.size(),
test_case.expected_user_selectable_values.size());
// Avoid crashing the test if the previous check fails.
if (pref_user_selectable_values.size() ==
test_case.expected_user_selectable_values.size())
EXPECT_TRUE(std::equal(pref_user_selectable_values.begin(),
pref_user_selectable_values.end(),
test_case.expected_user_selectable_values.begin()));
}
} // namespace
typedef extensions::settings_private::GeneratedPrefTestBase
GeneratedCookiePrefsTest;
TEST_F(GeneratedCookiePrefsTest, PrimarySettingPref) {
auto pref =
std::make_unique<content_settings::GeneratedCookiePrimarySettingPref>(
profile());
HostContentSettingsMap* map =
HostContentSettingsMapFactory::GetForProfile(profile());
// Setup a baseline content setting and preference state.
map->SetDefaultContentSetting(ContentSettingsType::COOKIES,
ContentSetting::CONTENT_SETTING_ALLOW);
prefs()->SetDefaultPrefValue(
prefs::kCookieControlsMode,
base::Value(static_cast<int>(CookieControlsMode::kOff)));
// Check that each of the four possible preference values sets the correct
// state and is correctly reflected in a newly returned PrefObject.
// First test this without the improved cookie controls enabled.
ValidatePrimarySettingPrefValue(map, prefs(), pref.get(),
CookiePrimarySetting::BLOCK_ALL,
ContentSetting::CONTENT_SETTING_BLOCK,
CookieControlsMode::kBlockThirdParty);
ValidatePrimarySettingPrefValue(map, prefs(), pref.get(),
CookiePrimarySetting::BLOCK_THIRD_PARTY,
ContentSetting::CONTENT_SETTING_ALLOW,
CookieControlsMode::kBlockThirdParty);
ValidatePrimarySettingPrefValue(
map, prefs(), pref.get(), CookiePrimarySetting::ALLOW_ALL,
ContentSetting::CONTENT_SETTING_ALLOW, CookieControlsMode::kOff);
ValidatePrimarySettingPrefValue(
map, prefs(), pref.get(),
CookiePrimarySetting::BLOCK_THIRD_PARTY_INCOGNITO,
ContentSetting::CONTENT_SETTING_ALLOW,
CookieControlsMode::kIncognitoOnly);
// Confirm that a type mismatch is reported as such.
EXPECT_EQ(pref->SetPref(std::make_unique<base::Value>(true).get()),
extensions::settings_private::SetPrefResult::PREF_TYPE_MISMATCH);
// Check a numerical value outside of the acceptable range.
EXPECT_EQ(
pref->SetPref(std::make_unique<base::Value>(
static_cast<int>(CookiePrimarySetting::BLOCK_ALL) + 1)
.get()),
extensions::settings_private::SetPrefResult::PREF_TYPE_MISMATCH);
// Confirm that when content settings are managed, un-managed preferences are
// still set.
auto provider = std::make_unique<content_settings::MockProvider>();
provider->SetWebsiteSetting(
ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(),
ContentSettingsType::COOKIES,
std::make_unique<base::Value>(ContentSetting::CONTENT_SETTING_ALLOW));
content_settings::TestUtils::OverrideProvider(
map, std::move(provider), HostContentSettingsMap::POLICY_PROVIDER);
ValidatePrimarySettingPrefValue(map, prefs(), pref.get(),
CookiePrimarySetting::BLOCK_THIRD_PARTY,
ContentSetting::CONTENT_SETTING_ALLOW,
CookieControlsMode::kBlockThirdParty);
// Update source preferences and ensure that an observer is fired.
settings_private::TestGeneratedPrefObserver test_observer;
pref->AddObserver(&test_observer);
prefs()->SetUserPref(prefs::kCookieControlsMode,
std::make_unique<base::Value>(static_cast<int>(
CookieControlsMode::kIncognitoOnly)));
EXPECT_EQ(test_observer.GetUpdatedPrefName(), kCookiePrimarySetting);
test_observer.Reset();
prefs()->SetUserPref(prefs::kCookieControlsMode,
std::make_unique<base::Value>(
static_cast<int>(CookieControlsMode::kOff)));
EXPECT_EQ(test_observer.GetUpdatedPrefName(), kCookiePrimarySetting);
}
TEST_F(GeneratedCookiePrefsTest, PrimarySettingPrefManagedState) {
for (const auto& test_case : managed_test_cases) {
TestingProfile profile;
HostContentSettingsMap* map =
HostContentSettingsMapFactory::GetForProfile(&profile);
testing::Message scope_message;
scope_message << "Content Setting:" << test_case.default_content_setting
<< " Block Third Party:"
<< static_cast<int>(test_case.block_third_party);
SCOPED_TRACE(scope_message);
SetupManagedTestConditions(map, profile.GetTestingPrefService(), test_case);
auto pref =
std::make_unique<content_settings::GeneratedCookiePrimarySettingPref>(
&profile);
auto pref_object = pref->GetPrefObject();
ValidateManagedPreference(pref_object.get(), test_case);
}
}
TEST_F(GeneratedCookiePrefsTest, SessionOnlyPref) {
auto pref =
std::make_unique<content_settings::GeneratedCookieSessionOnlyPref>(
profile());
HostContentSettingsMap* map =
HostContentSettingsMapFactory::GetForProfile(profile());
// Ensure an allow content setting sets the preference to false and enabled.
map->SetDefaultContentSetting(ContentSettingsType::COOKIES,
ContentSetting::CONTENT_SETTING_ALLOW);
auto pref_object = pref->GetPrefObject();
EXPECT_FALSE(pref_object->value->GetBool());
EXPECT_FALSE(*pref_object->user_control_disabled);
// Ensure setting the preference correctly updates content settings and the
// preference state.
EXPECT_EQ(pref->SetPref(std::make_unique<base::Value>(true).get()),
extensions::settings_private::SetPrefResult::SUCCESS);
EXPECT_EQ(
map->GetDefaultContentSetting(ContentSettingsType::COOKIES, nullptr),
ContentSetting::CONTENT_SETTING_SESSION_ONLY);
pref_object = pref->GetPrefObject();
EXPECT_TRUE(pref_object->value->GetBool());
EXPECT_FALSE(*pref_object->user_control_disabled);
EXPECT_EQ(pref->SetPref(std::make_unique<base::Value>(false).get()),
extensions::settings_private::SetPrefResult::SUCCESS);
EXPECT_EQ(
map->GetDefaultContentSetting(ContentSettingsType::COOKIES, nullptr),
ContentSetting::CONTENT_SETTING_ALLOW);
pref_object = pref->GetPrefObject();
EXPECT_FALSE(pref_object->value->GetBool());
EXPECT_FALSE(*pref_object->user_control_disabled);
// Ensure a block content setting results in a disabled and false pref.
map->SetDefaultContentSetting(ContentSettingsType::COOKIES,
ContentSetting::CONTENT_SETTING_BLOCK);
pref_object = pref->GetPrefObject();
EXPECT_FALSE(pref_object->value->GetBool());
EXPECT_TRUE(*pref_object->user_control_disabled);
// Confirm that the pref cannot be changed while the content setting is block.
EXPECT_EQ(pref->SetPref(std::make_unique<base::Value>(true).get()),
extensions::settings_private::SetPrefResult::PREF_NOT_MODIFIABLE);
// Confirm that a type mismatch is reported as such.
EXPECT_EQ(pref->SetPref(std::make_unique<base::Value>(2).get()),
extensions::settings_private::SetPrefResult::PREF_TYPE_MISMATCH);
// Ensure management state is correctly reported for all possible content
// setting management sources.
auto provider = std::make_unique<content_settings::MockProvider>();
provider->SetWebsiteSetting(
ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(),
ContentSettingsType::COOKIES,
std::make_unique<base::Value>(ContentSetting::CONTENT_SETTING_ALLOW));
content_settings::TestUtils::OverrideProvider(
map, std::move(provider),
HostContentSettingsMap::CUSTOM_EXTENSION_PROVIDER);
pref_object = pref->GetPrefObject();
EXPECT_EQ(pref_object->controlled_by,
settings_api::ControlledBy::CONTROLLED_BY_EXTENSION);
EXPECT_EQ(pref_object->enforcement,
settings_api::Enforcement::ENFORCEMENT_ENFORCED);
provider = std::make_unique<content_settings::MockProvider>();
provider->SetWebsiteSetting(
ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(),
ContentSettingsType::COOKIES,
std::make_unique<base::Value>(ContentSetting::CONTENT_SETTING_ALLOW));
content_settings::TestUtils::OverrideProvider(
map, std::move(provider), HostContentSettingsMap::SUPERVISED_PROVIDER);
pref_object = pref->GetPrefObject();
EXPECT_EQ(pref_object->controlled_by,
settings_api::ControlledBy::CONTROLLED_BY_CHILD_RESTRICTION);
EXPECT_EQ(pref_object->enforcement,
settings_api::Enforcement::ENFORCEMENT_ENFORCED);
provider = std::make_unique<content_settings::MockProvider>();
provider->SetWebsiteSetting(
ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(),
ContentSettingsType::COOKIES,
std::make_unique<base::Value>(ContentSetting::CONTENT_SETTING_ALLOW));
content_settings::TestUtils::OverrideProvider(
map, std::move(provider), HostContentSettingsMap::POLICY_PROVIDER);
pref_object = pref->GetPrefObject();
EXPECT_EQ(pref_object->controlled_by,
settings_api::ControlledBy::CONTROLLED_BY_DEVICE_POLICY);
EXPECT_EQ(pref_object->enforcement,
settings_api::Enforcement::ENFORCEMENT_ENFORCED);
// Ensure the preference cannot be changed when it is enforced.
EXPECT_EQ(pref->SetPref(std::make_unique<base::Value>(true).get()),
extensions::settings_private::SetPrefResult::PREF_NOT_MODIFIABLE);
EXPECT_EQ(
map->GetDefaultContentSetting(ContentSettingsType::COOKIES, nullptr),
ContentSetting::CONTENT_SETTING_ALLOW);
}
} // namespace content_settings