Skip to content

Commit

Permalink
Add metric for NTP default page
Browse files Browse the repository at this point in the history
  • Loading branch information
DJAndries committed Mar 1, 2025
1 parent c3f6d66 commit 9218e31
Show file tree
Hide file tree
Showing 8 changed files with 219 additions and 0 deletions.
1 change: 1 addition & 0 deletions browser/misc_metrics/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ source_set("unit_tests") {
if (!is_android) {
sources += [
"extension_metrics_unittest.cc",
"profile_new_tab_metrics_unittest.cc",
"theme_metrics_unittest.cc",
]

Expand Down
2 changes: 2 additions & 0 deletions browser/misc_metrics/profile_misc_metrics_service.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

#include "base/metrics/histogram_macros.h"
#include "brave/browser/brave_stats/first_run_util.h"
#include "brave/browser/misc_metrics/profile_new_tab_metrics.h"
#include "brave/browser/misc_metrics/theme_metrics.h"
#include "brave/components/misc_metrics/autofill_metrics.h"
#include "brave/components/misc_metrics/language_metrics.h"
Expand Down Expand Up @@ -74,6 +75,7 @@ ProfileMiscMetricsService::ProfileMiscMetricsService(
theme_metrics_ = std::make_unique<ThemeMetrics>(theme_service);
}
if (profile_prefs_) {
new_tab_metrics_ = std::make_unique<ProfileNewTabMetrics>(profile_prefs_);
pref_change_registrar_.Add(
prefs::kSearchSuggestEnabled,
base::BindRepeating(&ProfileMiscMetricsService::ReportSimpleMetrics,
Expand Down
2 changes: 2 additions & 0 deletions browser/misc_metrics/profile_misc_metrics_service.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ namespace misc_metrics {
class MiscAndroidMetrics;
#else
class ExtensionMetrics;
class ProfileNewTabMetrics;
class ThemeMetrics;
#endif
class AutofillMetrics;
Expand Down Expand Up @@ -63,6 +64,7 @@ class ProfileMiscMetricsService : public KeyedService {
#else
std::unique_ptr<ExtensionMetrics> extension_metrics_ = nullptr;
std::unique_ptr<ThemeMetrics> theme_metrics_ = nullptr;
std::unique_ptr<ProfileNewTabMetrics> new_tab_metrics_ = nullptr;
#endif
};

Expand Down
69 changes: 69 additions & 0 deletions browser/misc_metrics/profile_new_tab_metrics.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/* Copyright (c) 2025 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at https://mozilla.org/MPL/2.0/. */

#include "brave/browser/misc_metrics/profile_new_tab_metrics.h"

#include <optional>

#include "base/containers/contains.h"
#include "base/metrics/histogram_macros.h"
#include "brave/browser/new_tab/new_tab_shows_options.h"
#include "brave/components/constants/pref_names.h"
#include "chrome/common/pref_names.h"
#include "components/prefs/pref_service.h"
#include "url/gurl.h"

namespace misc_metrics {

ProfileNewTabMetrics::ProfileNewTabMetrics(PrefService* profile_prefs)
: profile_prefs_(profile_prefs) {
pref_change_registrar_.Init(profile_prefs_);

auto callback = base::BindRepeating(
&ProfileNewTabMetrics::ReportNewTabPageDefault, base::Unretained(this));
pref_change_registrar_.Add(kNewTabPageShowsOptions, callback);
pref_change_registrar_.Add(prefs::kHomePage, callback);
pref_change_registrar_.Add(prefs::kHomePageIsNewTabPage, callback);

// Report the initial state
ReportNewTabPageDefault();
}

ProfileNewTabMetrics::~ProfileNewTabMetrics() = default;

void ProfileNewTabMetrics::ReportNewTabPageDefault() {
std::optional<NewTabPageDefaultType> type;
brave::NewTabPageShowsOptions option =
static_cast<brave::NewTabPageShowsOptions>(
profile_prefs_->GetInteger(kNewTabPageShowsOptions));

if (option == brave::NewTabPageShowsOptions::kDashboard) {
type = NewTabPageDefaultType::kDashboard;
} else if (option == brave::NewTabPageShowsOptions::kHomepage) {
if (profile_prefs_->GetBoolean(prefs::kHomePageIsNewTabPage)) {
type = NewTabPageDefaultType::kDashboard;
} else {
GURL homepage_url(profile_prefs_->GetString(prefs::kHomePage));

if (homepage_url.host() == "search.brave.com") {
type = NewTabPageDefaultType::kHomepageBraveSearch;
} else if (base::Contains(homepage_url.host(), "google")) {
type = NewTabPageDefaultType::kHomepageGoogle;
} else if (base::Contains(homepage_url.host(), "duckduckgo")) {
type = NewTabPageDefaultType::kHomepageDuckDuckGo;
} else {
type = NewTabPageDefaultType::kHomepageOther;
}
}
} else if (option == brave::NewTabPageShowsOptions::kBlankpage) {
type = NewTabPageDefaultType::kBlank;
}

if (type) {
UMA_HISTOGRAM_ENUMERATION(kNewTabPageDefaultHistogramName, *type);
}
}

} // namespace misc_metrics
45 changes: 45 additions & 0 deletions browser/misc_metrics/profile_new_tab_metrics.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/* Copyright (c) 2025 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at https://mozilla.org/MPL/2.0/. */

#ifndef BRAVE_BROWSER_MISC_METRICS_PROFILE_NEW_TAB_METRICS_H_
#define BRAVE_BROWSER_MISC_METRICS_PROFILE_NEW_TAB_METRICS_H_

#include "components/prefs/pref_change_registrar.h"

class PrefService;

namespace misc_metrics {

inline constexpr char kNewTabPageDefaultHistogramName[] =
"Brave.NTP.DefaultPage";

enum class NewTabPageDefaultType {
kDashboard = 0,
kBlank = 1,
kHomepageBraveSearch = 2,
kHomepageGoogle = 3,
kHomepageDuckDuckGo = 4,
kHomepageOther = 5,
kMaxValue = kHomepageOther
};

class ProfileNewTabMetrics {
public:
explicit ProfileNewTabMetrics(PrefService* profile_prefs);
~ProfileNewTabMetrics();

ProfileNewTabMetrics(const ProfileNewTabMetrics&) = delete;
ProfileNewTabMetrics& operator=(const ProfileNewTabMetrics&) = delete;

private:
void ReportNewTabPageDefault();

raw_ptr<PrefService> profile_prefs_;
PrefChangeRegistrar pref_change_registrar_;
};

} // namespace misc_metrics

#endif // BRAVE_BROWSER_MISC_METRICS_PROFILE_NEW_TAB_METRICS_H_
92 changes: 92 additions & 0 deletions browser/misc_metrics/profile_new_tab_metrics_unittest.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
/* Copyright (c) 2025 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at https://mozilla.org/MPL/2.0/. */

#include "brave/browser/misc_metrics/profile_new_tab_metrics.h"

#include "base/test/metrics/histogram_tester.h"
#include "brave/browser/new_tab/new_tab_shows_options.h"
#include "brave/components/constants/pref_names.h"
#include "chrome/common/pref_names.h"
#include "components/prefs/pref_registry_simple.h"
#include "components/prefs/testing_pref_service.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace misc_metrics {

class ProfileNewTabMetricsTest : public testing::Test {
public:
ProfileNewTabMetricsTest() = default;

void SetUp() override {
pref_service_.registry()->RegisterIntegerPref(
kNewTabPageShowsOptions,
static_cast<int>(brave::NewTabPageShowsOptions::kDashboard));
pref_service_.registry()->RegisterStringPref(prefs::kHomePage, "");
pref_service_.registry()->RegisterBooleanPref(prefs::kHomePageIsNewTabPage,
false);
}

protected:
TestingPrefServiceSimple pref_service_;
base::HistogramTester histogram_tester_;
};

TEST_F(ProfileNewTabMetricsTest, TestDashboardOption) {
pref_service_.SetInteger(
kNewTabPageShowsOptions,
static_cast<int>(brave::NewTabPageShowsOptions::kDashboard));

ProfileNewTabMetrics metrics(&pref_service_);

histogram_tester_.ExpectUniqueSample(kNewTabPageDefaultHistogramName, 0, 1);
}

TEST_F(ProfileNewTabMetricsTest, TestBlankOption) {
pref_service_.SetInteger(
kNewTabPageShowsOptions,
static_cast<int>(brave::NewTabPageShowsOptions::kBlankpage));

ProfileNewTabMetrics metrics(&pref_service_);

histogram_tester_.ExpectUniqueSample(kNewTabPageDefaultHistogramName, 1, 1);
}

TEST_F(ProfileNewTabMetricsTest, TestHomepageOptions) {
pref_service_.SetInteger(
kNewTabPageShowsOptions,
static_cast<int>(brave::NewTabPageShowsOptions::kHomepage));

pref_service_.SetBoolean(prefs::kHomePageIsNewTabPage, true);

ProfileNewTabMetrics metrics(&pref_service_);

histogram_tester_.ExpectUniqueSample(kNewTabPageDefaultHistogramName, 0, 1);

histogram_tester_.ExpectTotalCount(kNewTabPageDefaultHistogramName, 1);

pref_service_.SetBoolean(prefs::kHomePageIsNewTabPage, false);

histogram_tester_.ExpectBucketCount(kNewTabPageDefaultHistogramName, 5, 1);

pref_service_.SetString(prefs::kHomePage, "https://search.brave.com");

histogram_tester_.ExpectBucketCount(kNewTabPageDefaultHistogramName, 2, 1);

pref_service_.SetString(prefs::kHomePage, "https://www.google.com");

histogram_tester_.ExpectBucketCount(kNewTabPageDefaultHistogramName, 3, 1);

pref_service_.SetString(prefs::kHomePage, "https://duckduckgo.com");

histogram_tester_.ExpectBucketCount(kNewTabPageDefaultHistogramName, 4, 1);

pref_service_.SetString(prefs::kHomePage, "https://example.com");

histogram_tester_.ExpectBucketCount(kNewTabPageDefaultHistogramName, 5, 2);

histogram_tester_.ExpectTotalCount(kNewTabPageDefaultHistogramName, 6);
}

} // namespace misc_metrics
7 changes: 7 additions & 0 deletions browser/misc_metrics/sources.gni
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,13 @@ brave_browser_misc_metrics_deps = [
"//content/public/browser",
]

if (!is_android) {
brave_browser_misc_metrics_sources += [
"//brave/browser/misc_metrics/profile_new_tab_metrics.cc",
"//brave/browser/misc_metrics/profile_new_tab_metrics.h",
]
}

brave_browser_misc_metrics_android_sources = [
"//brave/browser/misc_metrics/misc_android_metrics.cc",
"//brave/browser/misc_metrics/misc_android_metrics_factory_android.cc",
Expand Down
1 change: 1 addition & 0 deletions components/p3a/metric_names.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ inline constexpr auto kCollectedTypicalHistograms =

{"Brave.Importer.ImporterSource.2", {}},
{"Brave.NTP.CustomizeUsageStatus.2", {}},
{"Brave.NTP.DefaultPage", {}},
{"Brave.NTP.NewTabsCreated.3", {}},
{"Brave.NTP.SponsoredMediaType", {}},
{"Brave.Omnibox.SearchCount.3", {}},
Expand Down

0 comments on commit 9218e31

Please sign in to comment.