Add admin policies for disabling P3A and usage ping (#30022)

Add admin policies for disabling P3A and usage ping (#30022)

* Init P3A admin policy

* Complete P3A admin policy

* Add stats ping admin policy

* Add tests for new P3A/Stats policy prefs

* Update P3A/Stats policy descriptions

* Address P3A admin policy feedback

* Mark P3A/Usage ping policies as pending development for Android

Co-authored-by: Brian Clifton <brian@clifton.me>
This commit is contained in:
Darnell Andries
2025-07-28 17:05:21 -07:00
committed by GitHub
co-authored by Brian Clifton
parent 73bb6378d2
commit 3a17e78e09
20 changed files with 220 additions and 46 deletions
+2 -1
View File
@@ -230,7 +230,7 @@ void BraveStatsUpdater::OnServerPingTimerFired() {
return;
const bool reporting_enabled =
pref_service_->GetBoolean(kStatsReportingEnabled);
brave_stats::IsStatsReportingEnabled(*pref_service_);
if (!reporting_enabled) {
if (g_testing_stats_updated_callback)
g_testing_stats_updated_callback->Run(GURL(kInvalidUrl));
@@ -353,6 +353,7 @@ void BraveStatsUpdater::SendServerPing() {
void RegisterLocalStatePrefs(PrefRegistrySimple* registry) {
registry->RegisterBooleanPref(kFirstCheckMade, false);
registry->RegisterBooleanPref(kStatsReportingEnabled, true);
registry->RegisterBooleanPref(kStatsReportingDisabledByPolicy, false);
registry->RegisterIntegerPref(kLastCheckWOY, 0);
registry->RegisterIntegerPref(kLastCheckMonth, 0);
registry->RegisterStringPref(kLastCheckYMD, std::string());
@@ -139,10 +139,6 @@ class BraveStatsUpdaterBrowserTest : public PlatformBrowserTest {
wait_for_standard_stats_updated_loop_->Run();
}
void DisableStatsUsagePing() {
g_browser_process->local_state()->SetBoolean(kStatsReportingEnabled, false);
}
private:
std::unique_ptr<base::RunLoop> wait_for_referral_initialized_loop_;
std::unique_ptr<base::RunLoop> wait_for_standard_stats_updated_loop_;
@@ -169,7 +165,7 @@ IN_PROC_BROWSER_TEST_F(BraveStatsUpdaterBrowserTest,
// The stats updater should not reach the endpoint
IN_PROC_BROWSER_TEST_F(BraveStatsUpdaterBrowserTest,
StatsUpdaterUsagePingDisabledFirstCheck) {
DisableStatsUsagePing();
g_browser_process->local_state()->SetBoolean(kStatsReportingEnabled, false);
WaitForReferralInitializeCallback();
WaitForStandardStatsUpdatedCallback();
@@ -181,6 +177,19 @@ IN_PROC_BROWSER_TEST_F(BraveStatsUpdaterBrowserTest,
EXPECT_FALSE(g_browser_process->local_state()->GetBoolean(kFirstCheckMade));
}
IN_PROC_BROWSER_TEST_F(BraveStatsUpdaterBrowserTest,
StatsUpdaterUsagePingDisabledViaPolicyFirstCheck) {
g_browser_process->local_state()->SetBoolean(kStatsReportingDisabledByPolicy,
true);
WaitForReferralInitializeCallback();
WaitForStandardStatsUpdatedCallback();
EXPECT_EQ(GetUpdateURL().host(), "no-thanks.invalid");
EXPECT_FALSE(g_browser_process->local_state()->GetBoolean(kFirstCheckMade));
}
// Run the stats updater with no active referral and verify that the
// update url specifies the default referral code
IN_PROC_BROWSER_TEST_F(BraveStatsUpdaterBrowserTest,
+5
View File
@@ -12,6 +12,7 @@
#include "brave/components/brave_wayback_machine/buildflags/buildflags.h"
#include "brave/components/constants/pref_names.h"
#include "brave/components/ipfs/buildflags/buildflags.h"
#include "brave/components/p3a/pref_names.h"
#include "brave/components/speedreader/common/buildflags/buildflags.h"
#include "brave/components/tor/buildflags/buildflags.h"
#include "build/build_config.h"
@@ -70,6 +71,10 @@ inline constexpr PolicyToPreferenceMapEntry kBraveSimplePolicyMap[] = {
#endif
{policy::key::kBraveAIChatEnabled, ai_chat::prefs::kEnabledByPolicy,
base::Value::Type::BOOLEAN},
{policy::key::kBraveP3ADisabled, p3a::kP3ADisabledByPolicy,
base::Value::Type::BOOLEAN},
{policy::key::kBraveStatsPingDisabled, kStatsReportingDisabledByPolicy,
base::Value::Type::BOOLEAN},
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
{policy::key::kBraveNewsDisabled,
brave_news::prefs::kBraveNewsDisabledByPolicy, base::Value::Type::BOOLEAN},
@@ -1,17 +1,21 @@
<settings-toggle-button id="p3aEnabled"
class="cr-row"
pref="[[p3aEnabledPref_]]"
label="$i18n{p3aEnableTitle}"
sub-label="$i18n{p3aEnabledDesc}"
on-settings-boolean-control-change="onP3AEnabledChange_">
</settings-toggle-button>
<settings-toggle-button id="statsUsagePingEnabled"
class="cr-row"
pref="[[statsUsagePingEnabledPref_]]"
label="$i18n{statsUsagePingEnabledTitle}"
sub-label="$i18n{statsUsagePingEnabledDesc}"
on-settings-boolean-control-change="onStatsUsagePingEnabledChange_">
</settings-toggle-button>
<template is="dom-if" if="[[!isP3ADisabledByPolicy_]]">
<settings-toggle-button id="p3aEnabled"
class="cr-row"
pref="[[p3aEnabledPref_]]"
label="$i18n{p3aEnableTitle}"
sub-label="$i18n{p3aEnabledDesc}"
on-settings-boolean-control-change="onP3AEnabledChange_">
</settings-toggle-button>
</template>
<template is="dom-if" if="[[!isStatsReportingDisabledByPolicy_]]">
<settings-toggle-button id="statsUsagePingEnabled"
class="cr-row"
pref="[[statsUsagePingEnabledPref_]]"
label="$i18n{statsUsagePingEnabledTitle}"
sub-label="$i18n{statsUsagePingEnabledDesc}"
on-settings-boolean-control-change="onStatsUsagePingEnabledChange_">
</settings-toggle-button>
</template>
<settings-toggle-button id="metricsReportingControl"
class="hr"
pref="[[metricsReportingPref_]]"
@@ -6,6 +6,7 @@
import {PrefsMixin} from '/shared/settings/prefs/prefs_mixin.js'
import {WebUiListenerMixin} from 'chrome://resources/cr_elements/web_ui_listener_mixin.js'
import { assert } from 'chrome://resources/js/assert.js'
import {SettingsToggleButtonElement} from '../controls/settings_toggle_button.js'
import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'
@@ -72,6 +73,8 @@ extends SettingBraveDataCollectionPageElementBase
},
showRestartForMetricsReporting_: Boolean,
showSurveyPanelist_: Boolean,
isP3ADisabledByPolicy_: Boolean,
isStatsReportingDisabledByPolicy_: Boolean,
}
}
@@ -80,6 +83,8 @@ extends SettingBraveDataCollectionPageElementBase
private declare metricsReportingPref_: chrome.settingsPrivate.PrefObject<boolean>
private declare showRestartForMetricsReporting_: boolean
private declare showSurveyPanelist_: boolean
private declare isP3ADisabledByPolicy_: boolean
private declare isStatsReportingDisabledByPolicy_: boolean
browserProxy_ = BraveDataCollectionBrowserProxyImpl.getInstance()
@@ -90,52 +95,62 @@ extends SettingBraveDataCollectionPageElementBase
// Can't use `prefs` property of `settings-toggle-button` directly
// because p3a enabled is a local state setting, but PrefControlMixin
// checks for a pref being valid, so have to fake it, same as upstream.
const setP3AEnabledPref = (enabled: boolean) =>
this.setP3AEnabledPref_(enabled)
const setP3AEnabledPref = (userEnabled: boolean, policyDisabled: boolean) =>
this.setP3AEnabledPref_(userEnabled, policyDisabled)
this.isP3ADisabledByPolicy_ = loadTimeData.getBoolean('isP3ADisabledByPolicy')
this.isStatsReportingDisabledByPolicy_ = loadTimeData.getBoolean('isStatsReportingDisabledByPolicy')
this.addWebUiListener('p3a-enabled-changed', setP3AEnabledPref)
this.browserProxy_.getP3AEnabled().then(
(enabled: boolean) => setP3AEnabledPref(enabled))
(enabled: boolean) => setP3AEnabledPref(enabled, this.isP3ADisabledByPolicy_))
const setMetricsReportingPref = (metricsReporting: MetricsReporting) =>
this.setMetricsReportingPref_(metricsReporting)
this.addWebUiListener('metrics-reporting-change', setMetricsReportingPref)
this.browserProxy_.getMetricsReporting().then(setMetricsReportingPref)
const setStatsUsagePingEnabledPref = (enabled: boolean) =>
this.setStatsUsagePingEnabledPref_(enabled)
const setStatsUsagePingEnabledPref = (userEnabled: boolean, policyDisabled: boolean) =>
this.setStatsUsagePingEnabledPref_(userEnabled, policyDisabled)
this.addWebUiListener(
'stats-usage-ping-enabled-changed', setStatsUsagePingEnabledPref)
this.browserProxy_.getStatsUsagePingEnabled().then(
(enabled: boolean) => setStatsUsagePingEnabledPref(enabled))
(enabled: boolean) => setStatsUsagePingEnabledPref(enabled, this.isStatsReportingDisabledByPolicy_))
this.showSurveyPanelist_ = loadTimeData.getBoolean('isSurveyPanelistAllowed')
}
setP3AEnabledPref_(enabled: boolean) {
setP3AEnabledPref_(userEnabled: boolean, policyDisabled: boolean) {
const pref = {
key: '',
type: chrome.settingsPrivate.PrefType.BOOLEAN,
value: enabled,
value: userEnabled,
}
this.p3aEnabledPref_ = pref
this.isP3ADisabledByPolicy_ = policyDisabled
}
onP3AEnabledChange_() {
this.browserProxy_.setP3AEnabled(this.$.p3aEnabled.checked)
onP3AEnabledChange_(event: Event) {
const target = event.target
assert(target instanceof SettingsToggleButtonElement)
this.browserProxy_.setP3AEnabled(target.checked)
}
setStatsUsagePingEnabledPref_(enabled: boolean) {
setStatsUsagePingEnabledPref_(userEnabled: boolean, policyDisabled: boolean) {
const pref = {
key: '',
type: chrome.settingsPrivate.PrefType.BOOLEAN,
value: enabled,
value: userEnabled,
}
this.statsUsagePingEnabledPref_ = pref
this.isStatsReportingDisabledByPolicy_ = policyDisabled
}
onStatsUsagePingEnabledChange_() {
onStatsUsagePingEnabledChange_(event: Event) {
const target = event.target
assert(target instanceof SettingsToggleButtonElement)
this.browserProxy_.
setStatsUsagePingEnabled(this.$.statsUsagePingEnabled.checked)
setStatsUsagePingEnabled(target.checked)
}
// Metrics related code is copied from
@@ -44,10 +44,18 @@ BravePrivacyHandler::BravePrivacyHandler() {
kStatsReportingEnabled,
base::BindRepeating(&BravePrivacyHandler::OnStatsUsagePingEnabledChanged,
base::Unretained(this)));
local_state_change_registrar_.Add(
kStatsReportingDisabledByPolicy,
base::BindRepeating(&BravePrivacyHandler::OnStatsUsagePingEnabledChanged,
base::Unretained(this)));
local_state_change_registrar_.Add(
p3a::kP3AEnabled,
base::BindRepeating(&BravePrivacyHandler::OnP3AEnabledChanged,
base::Unretained(this)));
local_state_change_registrar_.Add(
p3a::kP3ADisabledByPolicy,
base::BindRepeating(&BravePrivacyHandler::OnP3AEnabledChanged,
base::Unretained(this)));
#if BUILDFLAG(IS_WIN)
if (windows_recall::IsWindowsRecallAvailable()) {
local_state_change_registrar_.Add(
@@ -131,6 +139,13 @@ void BravePrivacyHandler::AddLoadTimeData(content::WebUIDataSource* data_source,
"isOpenAIChatFromBraveSearchEnabled",
ai_chat::IsAIChatEnabled(profile->GetPrefs()) &&
ai_chat::features::IsOpenAIChatFromBraveSearchEnabled());
auto* local_state = g_browser_process->local_state();
data_source->AddBoolean("isP3ADisabledByPolicy",
local_state->GetBoolean(p3a::kP3ADisabledByPolicy));
data_source->AddBoolean(
"isStatsReportingDisabledByPolicy",
local_state->GetBoolean(kStatsReportingDisabledByPolicy));
#if BUILDFLAG(IS_WIN)
{
data_source->AddBoolean("isWindowsRecallAvailable",
@@ -182,9 +197,12 @@ void BravePrivacyHandler::GetStatsUsagePingEnabled(
void BravePrivacyHandler::OnStatsUsagePingEnabledChanged() {
if (IsJavascriptAllowed()) {
PrefService* local_state = g_browser_process->local_state();
bool enabled = local_state->GetBoolean(kStatsReportingEnabled);
bool user_enabled = local_state->GetBoolean(kStatsReportingEnabled);
bool policy_disabled =
local_state->GetBoolean(kStatsReportingDisabledByPolicy);
FireWebUIListener("stats-usage-ping-enabled-changed", base::Value(enabled));
FireWebUIListener("stats-usage-ping-enabled-changed", user_enabled,
policy_disabled);
}
}
@@ -199,9 +217,10 @@ void BravePrivacyHandler::GetP3AEnabled(const base::Value::List& args) {
void BravePrivacyHandler::OnP3AEnabledChanged() {
if (IsJavascriptAllowed()) {
PrefService* local_state = g_browser_process->local_state();
bool enabled = local_state->GetBoolean(p3a::kP3AEnabled);
bool user_enabled = local_state->GetBoolean(p3a::kP3AEnabled);
bool policy_disabled = local_state->GetBoolean(p3a::kP3ADisabledByPolicy);
FireWebUIListener("p3a-enabled-changed", base::Value(enabled));
FireWebUIListener("p3a-enabled-changed", user_enabled, policy_disabled);
}
}
@@ -22,6 +22,7 @@
#include "base/values.h"
#include "brave/brave_domains/service_domains.h"
#include "brave/components/brave_referrals/common/pref_names.h"
#include "brave/components/brave_stats/browser/brave_stats_updater_util.h"
#include "brave/components/constants/network_constants.h"
#include "brave/components/constants/pref_names.h"
#include "brave/vendor/brave_base/random.h"
@@ -412,7 +413,7 @@ void BraveReferralsService::MaybeCheckForReferralFinalization() {
return;
bool stats_reporting_enabled =
pref_service_->GetBoolean(kStatsReportingEnabled);
brave_stats::IsStatsReportingEnabled(*pref_service_);
// Only check for referral finalization 30 times, with a 24-hour
// wait between checks or if stats reporting is disabled.
base::Time timestamp = pref_service_->GetTime(kReferralAttemptTimestamp);
@@ -473,7 +474,7 @@ std::string BraveReferralsService::BuildReferralFinalizationCheckPayload()
}
void BraveReferralsService::InitReferral() {
if (!pref_service_->GetBoolean(kStatsReportingEnabled)) {
if (!brave_stats::IsStatsReportingEnabled(*pref_service_)) {
pref_service_->SetBoolean(kReferralInitialization, true);
if (g_testing_referral_initialized_callback) {
g_testing_referral_initialized_callback->Run(std::string());
@@ -46,6 +46,8 @@ class BraveReferralsServiceTest : public testing::Test {
// Set up environment for testing
RegisterPrefsForBraveReferralsService(pref_service_.registry());
pref_service_.registry()->RegisterBooleanPref(kStatsReportingEnabled, true);
pref_service_.registry()->RegisterBooleanPref(
kStatsReportingDisabledByPolicy, false);
// Create a test promo code file
auto promo_code_file_path = temp_dir_.GetPath().AppendASCII("promoCode");
+1
View File
@@ -18,6 +18,7 @@ static_library("browser") {
deps = [
":buildflags",
"//base",
"//brave/components/constants",
"//components/prefs",
]
}
+3
View File
@@ -0,0 +1,3 @@
include_rules = [
"+components/prefs",
]
@@ -16,7 +16,9 @@
#include "base/strings/string_split.h"
#include "base/strings/stringprintf.h"
#include "brave/components/brave_stats/browser/buildflags.h"
#include "brave/components/constants/pref_names.h"
#include "build/build_config.h"
#include "components/prefs/pref_service.h"
namespace brave_stats {
@@ -171,4 +173,9 @@ uint8_t UsageBitfieldFromTimestamp(const base::Time& last_usage_time,
return result;
}
bool IsStatsReportingEnabled(PrefService& pref_service) {
return pref_service.GetBoolean(kStatsReportingEnabled) &&
!pref_service.GetBoolean(kStatsReportingDisabledByPolicy);
}
} // namespace brave_stats
@@ -12,6 +12,8 @@
#include "base/system/sys_info.h"
#include "base/time/time.h"
class PrefService;
namespace brave_stats {
enum class ProcessArch {
@@ -46,6 +48,11 @@ enum : uint8_t {
uint8_t UsageBitfieldFromTimestamp(const base::Time& last_usage_time,
const base::Time& last_reported_usage_time);
// Returns true if stats reporting is enabled by user preference and not
// disabled by policy. Use this instead of reading kStatsReportingEnabled
// directly.
bool IsStatsReportingEnabled(PrefService& pref_service);
} // namespace brave_stats
#endif // BRAVE_COMPONENTS_BRAVE_STATS_BROWSER_BRAVE_STATS_UPDATER_UTIL_H_
+3
View File
@@ -35,6 +35,9 @@ inline constexpr char kThresholdCheckMade[] =
// Anonymous usage pings enabled
inline constexpr char kStatsReportingEnabled[] =
"brave.stats.reporting_enabled";
// Used to enable/disable stats reporting via a policy.
inline constexpr char kStatsReportingDisabledByPolicy[] =
"brave.stats.reporting_disabled_by_policy";
// Serialized query for to send to the stats-updater server. Needs to be saved
// in the case that the user sends the standard usage ping, stops the browser,
// meets the threshold requirements, and then starts the browser before the
+9 -6
View File
@@ -91,6 +91,7 @@ void P3AService::RegisterPrefs(PrefRegistrySimple* registry, bool first_run) {
registry->RegisterDictionaryPref(kDynamicMetricsDictPref);
registry->RegisterDictionaryPref(kActivationDatesDictPref);
registry->RegisterBooleanPref(kP3ADisabledByPolicy, false);
}
void P3AService::InitCallback(std::string_view histogram_name) {
@@ -165,7 +166,8 @@ base::CallbackListSubscription P3AService::RegisterMetricCycledCallback(
}
bool P3AService::IsP3AEnabled() const {
return local_state_->GetBoolean(kP3AEnabled);
return local_state_->GetBoolean(kP3AEnabled) &&
!local_state_->GetBoolean(kP3ADisabledByPolicy);
}
void P3AService::Init(
@@ -181,9 +183,10 @@ void P3AService::Init(
if (pref_change_registrar_.IsEmpty()) {
pref_change_registrar_.Init(&*local_state_);
pref_change_registrar_.Add(
kP3AEnabled, base::BindRepeating(&P3AService::OnP3AEnabledChanged,
base::Unretained(this)));
auto callback = base::BindRepeating(&P3AService::OnP3AEnabledChanged,
base::Unretained(this));
pref_change_registrar_.Add(kP3AEnabled, callback);
pref_change_registrar_.Add(kP3ADisabledByPolicy, callback);
}
if (initialized_ || !url_loader_factory_ ||
@@ -199,7 +202,7 @@ void P3AService::Init(
}
histogram_values_.clear();
if (local_state_->GetBoolean(kP3AEnabled)) {
if (IsP3AEnabled()) {
message_manager_->Start(url_loader_factory_);
}
}
@@ -275,7 +278,7 @@ void P3AService::LoadDynamicMetrics() {
void P3AService::OnP3AEnabledChanged() {
if (initialized_) {
if (local_state_->GetBoolean(kP3AEnabled)) {
if (IsP3AEnabled()) {
message_manager_->Start(url_loader_factory_);
} else {
message_manager_->Stop();
+2
View File
@@ -121,6 +121,8 @@ class P3AService : public base::RefCountedThreadSafe<P3AService>,
FRIEND_TEST_ALL_PREFIXES(P3AServiceTest, MessageManagerStartedWhenP3AEnabled);
FRIEND_TEST_ALL_PREFIXES(P3AServiceTest,
MessageManagerNotStartedWhenP3ADisabled);
FRIEND_TEST_ALL_PREFIXES(P3AServiceTest,
MessageManagerNotStartedWhenP3ADisabledByPolicy);
FRIEND_TEST_ALL_PREFIXES(P3AServiceTest,
MessageManagerStartsAndStopsOnPrefChange);
FRIEND_TEST_ALL_PREFIXES(P3AServiceTest, MetricValueStored);
+10
View File
@@ -79,6 +79,16 @@ TEST_F(P3AServiceTest, MessageManagerNotStartedWhenP3ADisabled) {
EXPECT_FALSE(p3a_service_->message_manager_->IsActive());
}
TEST_F(P3AServiceTest, MessageManagerNotStartedWhenP3ADisabledByPolicy) {
local_state_.SetBoolean(kP3ADisabledByPolicy, true);
CreateP3AService();
EXPECT_FALSE(p3a_service_->message_manager_->IsActive());
TriggerRemoteConfigLoad();
EXPECT_FALSE(p3a_service_->message_manager_->IsActive());
}
TEST_F(P3AServiceTest, MessageManagerStartsAndStopsOnPrefChange) {
local_state_.SetBoolean(kP3AEnabled, false);
CreateP3AService();
+2
View File
@@ -12,6 +12,8 @@ inline constexpr char kP3AEnabled[] = "brave.p3a.enabled";
inline constexpr char kP3ANoticeAcknowledged[] =
"brave.p3a.notice_acknowledged";
inline constexpr char kActivationDatesDictPref[] = "p3a.activation_dates";
// Used to enable/disable P3A via a policy.
inline constexpr char kP3ADisabledByPolicy[] = "brave.p3a.disabled_by_policy";
// Metric log store preference names
inline constexpr char kTypicalJsonLogPrefName[] = "p3a.logs"; // DEPRECATED
@@ -0,0 +1,39 @@
caption: Disable Privacy Preserving Product Analytics (P3A)
default: null
desc: |-
Disable Privacy Preserving Product Analytics in Brave.
Privacy Preserving Product Analytics (P3A) is an opt-in feature that helps Brave estimate (using private and non-identifying responses) the overall usage of certain features and make them better for users.
If this policy is set to true, P3A will always be disabled and all related UI elements will be hidden.
If this policy is set to false, P3A will be enabled by default.
If you set this policy, users cannot change or override it.
If this policy is left unset, P3A will be enabled by default (subject to user preferences).
example_value: true
features:
can_be_mandatory: true
can_be_recommended: false
dynamic_refresh: false
per_profile: false
items:
- caption: Allow the user to decide (enabled by default)
value: false
- caption: Disable P3A functionality
value: true
- caption: Allow the user to decide (enabled by default)
value: null
owners:
- bbondy@brave.com
- clifton@brave.com
- dandries@brave.com
schema:
type: boolean
supported_on:
- chrome.*:138-
future_on:
- android
tags: []
type: main
@@ -0,0 +1,39 @@
caption: Disable Stats Usage Ping
default: null
desc: |-
Disable anonymous stats usage ping in Brave.
The anonymous stats usage ping is an opt-in feature that helps Brave estimate active user totals.
If this policy is set to true, the usage ping will always be disabled and all related UI elements will be hidden.
If this policy is set to false, the usage ping will be enabled by default.
If you set this policy, users cannot change or override it.
If this policy is left unset, the usage ping will be enabled by default (subject to user preferences).
example_value: true
features:
can_be_mandatory: true
can_be_recommended: false
dynamic_refresh: false
per_profile: false
items:
- caption: Allow the user to decide (enabled by default)
value: false
- caption: Disable usage ping functionality
value: true
- caption: Allow the user to decide (enabled by default)
value: null
owners:
- bbondy@brave.com
- clifton@brave.com
- dandries@brave.com
schema:
type: boolean
supported_on:
- chrome.*:138-
future_on:
- android
tags: []
type: main
@@ -7,10 +7,12 @@ _brave_policies = [
"BraveSoftware/.group.details.yaml",
"BraveSoftware/BraveAIChatEnabled.yaml",
"BraveSoftware/BraveNewsDisabled.yaml",
"BraveSoftware/BraveP3ADisabled.yaml",
"BraveSoftware/BraveRewardsDisabled.yaml",
"BraveSoftware/BraveShieldsDisabledForUrls.yaml",
"BraveSoftware/BraveShieldsEnabledForUrls.yaml",
"BraveSoftware/BraveSpeedreaderDisabled.yaml",
"BraveSoftware/BraveStatsPingDisabled.yaml",
"BraveSoftware/BraveSyncUrl.yaml",
"BraveSoftware/BraveTalkDisabled.yaml",
"BraveSoftware/BraveVPNDisabled.yaml",