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:
co-authored by
Brian Clifton
parent
73bb6378d2
commit
3a17e78e09
@@ -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,
|
||||
|
||||
@@ -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},
|
||||
|
||||
+18
-14
@@ -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_]]"
|
||||
|
||||
+29
-14
@@ -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");
|
||||
|
||||
@@ -18,6 +18,7 @@ static_library("browser") {
|
||||
deps = [
|
||||
":buildflags",
|
||||
"//base",
|
||||
"//brave/components/constants",
|
||||
"//components/prefs",
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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_
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
+39
@@ -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
|
||||
+39
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user