Skip to content

Commit 3031251

Browse files
Uplift of #3931 (squashed) to dev
1 parent 310346f commit 3031251

11 files changed

+84
-21
lines changed

components/brave_ads/browser/ads_service_factory.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ void AdsServiceFactory::RegisterProfilePrefs(
8484
registry->RegisterUint64Pref(prefs::kAdsPerDay, 20);
8585

8686
registry->RegisterIntegerPref(prefs::kIdleThreshold, 15);
87-
registry->RegisterBooleanPref(prefs::kBraveAdsWereDisabled, false);
87+
registry->RegisterBooleanPref(prefs::kAdsWereDisabled, false);
88+
registry->RegisterBooleanPref(prefs::kHasAdsP3AState, false);
8889

8990
registry->RegisterBooleanPref(prefs::kShouldShowMyFirstAdNotification, true);
9091

components/brave_ads/common/pref_names.cc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ namespace prefs {
1313
const char kEnabled[] = "brave.brave_ads.enabled";
1414

1515
// Stores whether ads were disabled at least once
16-
const char kBraveAdsWereDisabled[] = "brave.brave_ads.were_disabled";
16+
const char kAdsWereDisabled[] = "brave.brave_ads.were_disabled";
17+
18+
// Indicates whether we have any initial state of the ads status metric, besides
19+
// "No Wallet".
20+
const char kHasAdsP3AState[] = "brave.brave_ads.has_p3a_state";
1721

1822
// Stores the maximum amount of ads per hour
1923
const char kAdsPerHour[] = "brave.brave_ads.ads_per_hour";

components/brave_ads/common/pref_names.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ extern const char kEnabled[];
1414

1515
extern const char kAdsPerHour[];
1616
extern const char kAdsPerDay[];
17-
extern const char kBraveAdsWereDisabled[];
17+
extern const char kAdsWereDisabled[];
18+
extern const char kHasAdsP3AState[];
1819

1920
extern const char kIdleThreshold[];
2021

components/brave_rewards/browser/rewards_p3a.cc

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,17 +88,17 @@ void UpdateAdsP3AOnPreferenceChange(PrefService *prefs,
8888
if (pref == brave_ads::prefs::kEnabled) {
8989
if (prefs->GetBoolean(brave_ads::prefs::kEnabled)) {
9090
brave_rewards::RecordAdsState(AdsP3AState::kAdsEnabled);
91-
prefs->SetBoolean(brave_ads::prefs::kBraveAdsWereDisabled, false);
91+
prefs->SetBoolean(brave_ads::prefs::kAdsWereDisabled, false);
9292
} else {
9393
// Apparently, the pref was disabled.
9494
brave_rewards::RecordAdsState(
9595
rewards_enabled ? AdsP3AState::kAdsEnabledThenDisabledRewardsOn :
9696
AdsP3AState::kAdsEnabledThenDisabledRewardsOff);
97-
prefs->SetBoolean(brave_ads::prefs::kBraveAdsWereDisabled, true);
97+
prefs->SetBoolean(brave_ads::prefs::kAdsWereDisabled, true);
9898
}
9999
} else if (pref == brave_rewards::prefs::kBraveRewardsEnabled) {
100100
// Rewards pref was changed
101-
if (prefs->GetBoolean(brave_ads::prefs::kBraveAdsWereDisabled)) {
101+
if (prefs->GetBoolean(brave_ads::prefs::kAdsWereDisabled)) {
102102
brave_rewards::RecordAdsState(
103103
rewards_enabled ? AdsP3AState::kAdsEnabledThenDisabledRewardsOn :
104104
AdsP3AState::kAdsEnabledThenDisabledRewardsOff);
@@ -107,6 +107,15 @@ void UpdateAdsP3AOnPreferenceChange(PrefService *prefs,
107107
}
108108
}
109109

110+
void MaybeRecordInitialAdsP3AState(PrefService* prefs) {
111+
if (!prefs->GetBoolean(brave_ads::prefs::kHasAdsP3AState)) {
112+
const bool ads_state = prefs->GetBoolean(brave_ads::prefs::kEnabled);
113+
RecordAdsState(ads_state ? AdsP3AState::kAdsEnabled
114+
: AdsP3AState::kAdsDisabled);
115+
prefs->SetBoolean(brave_ads::prefs::kHasAdsP3AState, true);
116+
}
117+
}
118+
110119
void RecordNoWalletCreatedForAllMetrics() {
111120
RecordWalletBalanceP3A(false, 0);
112121
RecordAutoContributionsState(AutoContributionsP3AState::kNoWallet, 0);

components/brave_rewards/browser/rewards_p3a.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ void RecordAdsState(AdsP3AState state);
5050
void UpdateAdsP3AOnPreferenceChange(PrefService* prefs,
5151
const std::string& pref);
5252

53+
// Records an initial metric state ("disabled" or "enabled") if it was not done
54+
// before. Intended to be called if the user has already created a wallet.
55+
void MaybeRecordInitialAdsP3AState(PrefService* local_state);
56+
5357
void RecordNoWalletCreatedForAllMetrics();
5458

5559
double CalcWalletBalanceForP3A(base::flat_map<std::string, double> wallets,

components/brave_rewards/browser/rewards_service_impl.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -927,7 +927,7 @@ void RewardsServiceImpl::OnWalletInitialized(ledger::Result result) {
927927
RecordWalletBalanceP3A(true, 0);
928928
#if BUILDFLAG(BRAVE_ADS_ENABLED)
929929
const bool ads_enabled =
930-
profile_->GetPrefs()->GetBoolean(brave_ads::prefs::kEnabled);
930+
profile_->GetPrefs()->GetBoolean(brave_ads::prefs::kEnabled);
931931
RecordAdsState(ads_enabled ? AdsP3AState::kAdsEnabled
932932
: AdsP3AState::kAdsDisabled);
933933
#endif
@@ -1069,6 +1069,7 @@ void RewardsServiceImpl::OnLedgerStateLoaded(
10691069
}
10701070
// Record stats.
10711071
RecordBackendP3AStats();
1072+
MaybeRecordInitialAdsP3AState(profile_->GetPrefs());
10721073
}
10731074
if (state.first.empty()) {
10741075
RecordNoWalletCreatedForAllMetrics();

components/p3a/brave_histogram_rewrite.cc

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@ namespace {
1616
// Please keep this list sorted and synced with |DoHistogramBravezation|.
1717
constexpr const char* kBravezationHistograms[] = {
1818
"Bookmarks.Count.OnProfileLoad",
19+
"DefaultBrowser.State",
1920
"Extensions.LoadExtension",
2021
"Tabs.TabCount",
2122
"Tabs.WindowCount",
2223
};
2324

25+
// TODO(iefremov): Replace a bunch of 'if's with something more elegant.
2426
// Records the given sample using the proper Brave way.
2527
void DoHistogramBravezation(base::StringPiece histogram_name,
2628
base::HistogramBase::Sample sample) {
@@ -40,6 +42,25 @@ void DoHistogramBravezation(base::StringPiece histogram_name,
4042
return;
4143
}
4244

45+
if ("DefaultBrowser.State" == histogram_name) {
46+
int answer = 0;
47+
switch (sample) {
48+
case 0: // Not default.
49+
case 1: // Default.
50+
answer = sample;
51+
break;
52+
case 2: // Unknown, merging to "Not default".
53+
answer = 0;
54+
break;
55+
case 3: // Other mode is default, merging to "Default".
56+
answer = 1;
57+
break;
58+
default:
59+
NOTREACHED();
60+
}
61+
UMA_HISTOGRAM_BOOLEAN("Brave.Core.IsDefault", answer);
62+
}
63+
4364
if ("Extensions.LoadExtension" == histogram_name) {
4465
int answer = 0;
4566
if (sample == 1)

components/p3a/brave_p3a_log_store.cc

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ void RecordP3A(uint64_t answers_count) {
3434

3535
} // namespace
3636

37-
BraveP3ALogStore::BraveP3ALogStore(LogSerializer* serializer,
37+
BraveP3ALogStore::BraveP3ALogStore(Delegate* delegate,
3838
PrefService* local_state)
39-
: serializer_(serializer), local_state_(local_state) {
40-
DCHECK(serializer_);
39+
: delegate_(delegate), local_state_(local_state) {
40+
DCHECK(delegate_);
4141
DCHECK(local_state);
4242
}
4343

@@ -123,7 +123,8 @@ void BraveP3ALogStore::StageNextLog() {
123123
DCHECK(!log_.find(staged_entry_key_)->second.sent);
124124

125125
uint64_t staged_entry_value = log_[staged_entry_key_].value;
126-
staged_log_ = serializer_->Serialize(staged_entry_key_, staged_entry_value);
126+
staged_log_ = delegate_->Serialize(staged_entry_key_, staged_entry_value);
127+
127128
VLOG(2) << "BraveP3ALogStore::StageNextLog: staged " << staged_entry_key_;
128129
}
129130

@@ -161,10 +162,17 @@ void BraveP3ALogStore::LoadPersistedUnsentLogs() {
161162
DCHECK(log_.empty());
162163
DCHECK(unsent_entries_.empty());
163164

164-
const base::DictionaryValue* list = local_state_->GetDictionary(kPrefName);
165+
DictionaryPrefUpdate update(local_state_, kPrefName);
166+
base::DictionaryValue* list = update.Get();
165167
for (auto dict_item : list->DictItems()) {
166168
LogEntry entry;
167-
std::string name = dict_item.first;
169+
const std::string name = dict_item.first;
170+
// Check if the metric is obsolete.
171+
if (!delegate_->IsActualMetric(name)) {
172+
// Drop it from the local state.
173+
list->RemoveKey(name);
174+
continue;
175+
}
168176
const base::Value& dict = dict_item.second;
169177
// Value.
170178
if (const base::Value* v =

components/p3a/brave_p3a_log_store.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,17 @@ namespace brave {
2525
// for now persisted entries never expire.
2626
class BraveP3ALogStore : public metrics::LogStore {
2727
public:
28-
// Prepares a string representaion of an entry.
29-
class LogSerializer {
28+
class Delegate {
3029
public:
30+
// Prepares a string representaion of an entry.
3131
virtual std::string Serialize(base::StringPiece histogram_name,
3232
uint64_t value) const = 0;
33-
virtual ~LogSerializer() {}
33+
// Returns false if the metric is obsolete and should be cleaned up.
34+
virtual bool IsActualMetric(base::StringPiece histogram_name) const = 0;
35+
virtual ~Delegate() {}
3436
};
3537

36-
explicit BraveP3ALogStore(LogSerializer* serializer,
38+
explicit BraveP3ALogStore(Delegate* delegate,
3739
PrefService* local_state);
3840

3941
// TODO(iefremov): Make parent destructor virtual?
@@ -78,7 +80,7 @@ class BraveP3ALogStore : public metrics::LogStore {
7880
base::Time sent_timestamp; // At the moment only for debugging purposes.
7981
};
8082

81-
const LogSerializer* const serializer_ = nullptr; // Weak.
83+
const Delegate* const delegate_ = nullptr; // Weak.
8284
PrefService* const local_state_ = nullptr;
8385

8486
// TODO(iefremov): Try to replace with base::StringPiece?

components/p3a/brave_p3a_service.cc

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,13 @@ constexpr uint64_t kDefaultUploadIntervalSeconds = 60 * 60; // 1 hour.
5151
constexpr const char* kCollectedHistograms[] = {
5252
"Brave.P3A.SentAnswersCount",
5353
"Brave.Sync.Status",
54-
"DefaultBrowser.State",
54+
// Deprecated:
55+
// "DefaultBrowser.State",
5556
"Brave.Importer.ImporterSource",
5657
"Brave.Shields.UsageStatus",
5758
// Do not gather detailed info regarding TOR usage for now.
5859
// "Brave.Core.LastTimeTorUsed",
60+
"Brave.Core.IsDefault",
5961
"Brave.Core.TorEverUsed",
6062
"Brave.Core.LastTimeIncognitoUsed",
6163
"Brave.Core.NumberOfExtensions",
@@ -205,6 +207,14 @@ std::string BraveP3AService::Serialize(base::StringPiece histogram_name,
205207
return message.SerializeAsString();
206208
}
207209

210+
bool
211+
BraveP3AService::IsActualMetric(base::StringPiece histogram_name) const {
212+
static const base::NoDestructor<base::flat_set<base::StringPiece>>
213+
metric_names {std::begin(kCollectedHistograms),
214+
std::end(kCollectedHistograms)};
215+
return metric_names->contains(histogram_name);
216+
}
217+
208218
void BraveP3AService::MaybeOverrideSettingsFromCommandLine() {
209219
base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess();
210220

components/p3a/brave_p3a_service.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class BraveP3AUploader;
3030
// on any thread.
3131
// TODO(iefremov): It should be possible to get rid of refcounted here.
3232
class BraveP3AService : public base::RefCountedThreadSafe<BraveP3AService>,
33-
public BraveP3ALogStore::LogSerializer {
33+
public BraveP3ALogStore::Delegate {
3434
public:
3535
explicit BraveP3AService(PrefService* local_state);
3636

@@ -43,10 +43,12 @@ class BraveP3AService : public base::RefCountedThreadSafe<BraveP3AService>,
4343
// Needs a living browser process to complete the initialization.
4444
void Init();
4545

46-
// BraveP3ALogStore::LogSerializer
46+
// BraveP3ALogStore::Delegate
4747
std::string Serialize(base::StringPiece histogram_name,
4848
uint64_t value) const override;
4949

50+
bool IsActualMetric(base::StringPiece histogram_name) const override;
51+
5052
private:
5153
friend class base::RefCountedThreadSafe<BraveP3AService>;
5254
~BraveP3AService() override;

0 commit comments

Comments
 (0)