diff --git a/browser/brave_origin/BUILD.gn b/browser/brave_origin/BUILD.gn index fb67871504e..1b2391da319 100644 --- a/browser/brave_origin/BUILD.gn +++ b/browser/brave_origin/BUILD.gn @@ -97,7 +97,10 @@ source_set("brave_origin") { } if (enable_email_aliases) { - deps += [ "//brave/components/email_aliases:service" ] + deps += [ + "//brave/components/email_aliases:pref_names", + "//brave/components/email_aliases:service", + ] } } diff --git a/browser/email_aliases/BUILD.gn b/browser/email_aliases/BUILD.gn index 51beff2255f..3b78312e0b5 100644 --- a/browser/email_aliases/BUILD.gn +++ b/browser/email_aliases/BUILD.gn @@ -43,6 +43,7 @@ source_set("unit_tests") { "//brave/components/brave_account", "//brave/components/brave_account:features", "//brave/components/email_aliases:features", + "//brave/components/email_aliases:pref_names", "//brave/components/email_aliases:service", "//chrome/browser/profiles", "//chrome/test:test_support", diff --git a/browser/email_aliases/email_aliases_service_factory.cc b/browser/email_aliases/email_aliases_service_factory.cc index abe515dd482..14e7f281970 100644 --- a/browser/email_aliases/email_aliases_service_factory.cc +++ b/browser/email_aliases/email_aliases_service_factory.cc @@ -11,7 +11,6 @@ #include "brave/components/brave_account/brave_account_service.h" #include "brave/components/email_aliases/email_aliases_service.h" #include "brave/components/email_aliases/features.h" -#include "brave/components/email_aliases/pref_names.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_selections.h" #include "components/pref_registry/pref_registry_syncable.h" @@ -61,11 +60,9 @@ void EmailAliasesServiceFactory::RegisterProfilePrefs( std::unique_ptr EmailAliasesServiceFactory::BuildServiceInstanceForBrowserContext( content::BrowserContext* context) const { - if (!features::IsEmailAliasesEnabled()) { - return nullptr; - } PrefService* pref_service = user_prefs::UserPrefs::Get(context); - if (!pref_service || !pref_service->GetBoolean(prefs::kEmailAliasesEnabled)) { + if (!pref_service || + !features::IsEmailAliasesEnabledForProfile(*pref_service)) { return nullptr; } diff --git a/browser/policy/BUILD.gn b/browser/policy/BUILD.gn index a80b8f41a1a..0e295647c39 100644 --- a/browser/policy/BUILD.gn +++ b/browser/policy/BUILD.gn @@ -86,6 +86,9 @@ source_set("brave_simple_policy_map") { } if (enable_email_aliases) { - deps += [ "//brave/components/email_aliases:service" ] + deps += [ + "//brave/components/email_aliases:pref_names", + "//brave/components/email_aliases:service", + ] } } diff --git a/browser/sources.gni b/browser/sources.gni index 2080980d18e..35a268b06de 100644 --- a/browser/sources.gni +++ b/browser/sources.gni @@ -362,6 +362,7 @@ if (enable_email_aliases) { "//brave/browser/ui/webui/email_aliases", "//brave/components/email_aliases:features", "//brave/components/email_aliases:mojom", + "//brave/components/email_aliases:pref_names", "//brave/components/email_aliases:service", ] } diff --git a/browser/ui/brave_browser_command_controller.cc b/browser/ui/brave_browser_command_controller.cc index e5c65c8f86e..b53c7aa6197 100644 --- a/browser/ui/brave_browser_command_controller.cc +++ b/browser/ui/brave_browser_command_controller.cc @@ -8,6 +8,7 @@ #include #include "base/check.h" +#include "base/check_deref.h" #include "base/check_is_test.h" #include "base/containers/fixed_flat_set.h" #include "base/feature_list.h" @@ -96,7 +97,6 @@ #endif #if BUILDFLAG(ENABLE_EMAIL_ALIASES) -#include "brave/browser/email_aliases/email_aliases_service_factory.h" #include "brave/browser/ui/email_aliases/email_aliases_controller.h" #include "brave/components/email_aliases/features.h" #endif @@ -351,11 +351,9 @@ void BraveBrowserCommandController::InitBraveCommandState() { UpdateCommandEnabled(IDC_EXPORT_ALL_BOOKMARKS, true); #if BUILDFLAG(ENABLE_EMAIL_ALIASES) - UpdateCommandEnabled( - IDC_SHOW_EMAIL_ALIASES, - email_aliases::features::IsEmailAliasesEnabled() && - email_aliases::EmailAliasesServiceFactory::GetServiceForProfile( - browser_->profile())); + UpdateCommandEnabled(IDC_SHOW_EMAIL_ALIASES, + email_aliases::features::IsEmailAliasesEnabledForProfile( + CHECK_DEREF(browser_->profile()->GetPrefs()))); #endif if (browser_->is_type_normal()) { diff --git a/browser/ui/browser_window/internal/browser_window_features.cc b/browser/ui/browser_window/internal/browser_window_features.cc index df42c00cfbc..497dff1e92b 100644 --- a/browser/ui/browser_window/internal/browser_window_features.cc +++ b/browser/ui/browser_window/internal/browser_window_features.cc @@ -5,6 +5,7 @@ #include "chrome/browser/ui/browser_window/public/browser_window_features.h" +#include "base/check_deref.h" #include "base/memory/ptr_util.h" #include "base/notreached.h" #include "brave/browser/ui/brave_browser_window.h" @@ -114,14 +115,14 @@ void BrowserWindowFeatures::InitPostBrowserViewConstruction( } #if BUILDFLAG(ENABLE_EMAIL_ALIASES) - if (email_aliases::features::IsEmailAliasesEnabled()) { - if (auto* email_aliases_service = - email_aliases::EmailAliasesServiceFactory::GetServiceForProfile( - browser_view->GetProfile())) { - email_aliases_controller_ = - std::make_unique( - browser_view, email_aliases_service); - } + if (email_aliases::features::IsEmailAliasesEnabledForProfile( + CHECK_DEREF(browser_view->GetProfile()->GetPrefs()))) { + email_aliases_controller_ = + std::make_unique( + browser_view, + &CHECK_DEREF( + email_aliases::EmailAliasesServiceFactory::GetServiceForProfile( + browser_view->GetProfile()))); } #endif diff --git a/browser/ui/webui/brave_settings_ui.cc b/browser/ui/webui/brave_settings_ui.cc index 61a1ecf8c0c..3558efef080 100644 --- a/browser/ui/webui/brave_settings_ui.cc +++ b/browser/ui/webui/brave_settings_ui.cc @@ -292,17 +292,18 @@ void BraveSettingsUI::AddResources(content::WebUIDataSource* html_source, #if BUILDFLAG(ENABLE_EMAIL_ALIASES) html_source->AddBoolean( "isEmailAliasesEnabled", - email_aliases::features::IsEmailAliasesEnabled() && - email_aliases::EmailAliasesServiceFactory::GetServiceForProfile( - profile)); + email_aliases::features::IsEmailAliasesEnabledForProfile( + CHECK_DEREF(profile->GetPrefs()))); #endif #if BUILDFLAG(ENABLE_CONTAINERS) html_source->AddBoolean( "isContainersEnabled", base::FeatureList::IsEnabled(containers::features::kContainers)); #endif - html_source->AddBoolean("isBraveAccountEnabled", - brave_account::features::IsBraveAccountEnabled()); + html_source->AddBoolean( + "isBraveAccountEnabled", + brave_account::features::IsBraveAccountEnabledForProfile( + CHECK_DEREF(profile->GetPrefs()))); html_source->AddBoolean("isBraveOriginBrandedBuild", BUILDFLAG(IS_BRAVE_ORIGIN_BRANDED)); html_source->AddBoolean("isBraveOriginPurchased", diff --git a/components/brave_account/features.cc b/components/brave_account/features.cc index fea0e90d82f..91537a44f2c 100644 --- a/components/brave_account/features.cc +++ b/components/brave_account/features.cc @@ -17,9 +17,9 @@ namespace { BASE_FEATURE(kBraveAccount, base::FEATURE_DISABLED_BY_DEFAULT); } // namespace -// Brave Account is enabled when: -// - the explicit kBraveAccount feature flag is enabled (dev/testing), OR -// - a dependent feature (e.g. Email Aliases) requires it +// Process-wide: true if kBraveAccount is on, or a dependent feature (e.g. +// Email Aliases) is built and feature-flagged on. Use when per-profile state +// shouldn't or can't influence the answer. bool IsBraveAccountEnabled() { return base::FeatureList::IsEnabled(kBraveAccount) #if BUILDFLAG(ENABLE_EMAIL_ALIASES) @@ -28,6 +28,19 @@ bool IsBraveAccountEnabled() { ; } +// Per-profile: "is Brave Account active for this profile?". +// Use for UI gating and other per-profile decisions. The result can differ +// across profiles because dependent features (Email Aliases) consult a +// per-profile pref. +bool IsBraveAccountEnabledForProfile(const PrefService& pref_service) { + return base::FeatureList::IsEnabled(kBraveAccount) +#if BUILDFLAG(ENABLE_EMAIL_ALIASES) + || + email_aliases::features::IsEmailAliasesEnabledForProfile(pref_service) +#endif + ; +} + const base::Feature& BraveAccountFeatureForTesting() { return kBraveAccount; } diff --git a/components/brave_account/features.h b/components/brave_account/features.h index 0109010f0d0..e7debcc07ab 100644 --- a/components/brave_account/features.h +++ b/components/brave_account/features.h @@ -8,9 +8,12 @@ #include "base/feature_list.h" +class PrefService; + namespace brave_account::features { bool IsBraveAccountEnabled(); +bool IsBraveAccountEnabledForProfile(const PrefService& pref_service); const base::Feature& BraveAccountFeatureForTesting(); diff --git a/components/email_aliases/BUILD.gn b/components/email_aliases/BUILD.gn index ecd3441fa50..f995459a29e 100644 --- a/components/email_aliases/BUILD.gn +++ b/components/email_aliases/BUILD.gn @@ -27,12 +27,21 @@ generated_types("email_aliases_api_types") { root_namespace = "email_aliases" } +source_set("pref_names") { + sources = [ "pref_names.h" ] +} + static_library("features") { sources = [ "features.cc", "features.h", ] + deps = [ + ":pref_names", + "//components/prefs", + ] + public_deps = [ "//base" ] } @@ -45,11 +54,11 @@ static_library("service") { "email_aliases_notes.h", "email_aliases_service.cc", "email_aliases_service.h", - "pref_names.h", ] deps = [ ":email_aliases_api_types", ":mojom", + ":pref_names", "//base", "//brave/brave_domains", "//brave/components/brave_account", @@ -97,6 +106,7 @@ source_set("unit_tests") { ] deps = [ ":features", + ":pref_names", ":service", ":test_utils", "//base/test:test_support", diff --git a/components/email_aliases/features.cc b/components/email_aliases/features.cc index aa81e34ba40..cda1febb3ea 100644 --- a/components/email_aliases/features.cc +++ b/components/email_aliases/features.cc @@ -5,6 +5,9 @@ #include "brave/components/email_aliases/features.h" +#include "brave/components/email_aliases/pref_names.h" +#include "components/prefs/pref_service.h" + namespace email_aliases::features { BASE_FEATURE(kEmailAliases, base::FEATURE_DISABLED_BY_DEFAULT); @@ -13,4 +16,9 @@ bool IsEmailAliasesEnabled() { return base::FeatureList::IsEnabled(kEmailAliases); } +bool IsEmailAliasesEnabledForProfile(const PrefService& pref_service) { + return IsEmailAliasesEnabled() && + pref_service.GetBoolean(prefs::kEmailAliasesEnabled); +} + } // namespace email_aliases::features diff --git a/components/email_aliases/features.h b/components/email_aliases/features.h index 7a09ea4fd6d..bffa886870f 100644 --- a/components/email_aliases/features.h +++ b/components/email_aliases/features.h @@ -8,11 +8,14 @@ #include "base/feature_list.h" +class PrefService; + namespace email_aliases::features { BASE_DECLARE_FEATURE(kEmailAliases); bool IsEmailAliasesEnabled(); +bool IsEmailAliasesEnabledForProfile(const PrefService& pref_service); } // namespace email_aliases::features diff --git a/ios/browser/brave_origin/BUILD.gn b/ios/browser/brave_origin/BUILD.gn index 5d55b5faf9c..0d51780d470 100644 --- a/ios/browser/brave_origin/BUILD.gn +++ b/ios/browser/brave_origin/BUILD.gn @@ -61,6 +61,9 @@ source_set("brave_origin") { deps += [ "//brave/components/brave_news/common" ] } if (enable_email_aliases) { - deps += [ "//brave/components/email_aliases:service" ] + deps += [ + "//brave/components/email_aliases:pref_names", + "//brave/components/email_aliases:service", + ] } } diff --git a/ios/browser/policy/BUILD.gn b/ios/browser/policy/BUILD.gn index bd6938747d4..ca09525c5cd 100644 --- a/ios/browser/policy/BUILD.gn +++ b/ios/browser/policy/BUILD.gn @@ -36,6 +36,9 @@ source_set("policy") { deps += [ "//brave/components/brave_talk" ] } if (enable_email_aliases) { - deps += [ "//brave/components/email_aliases:service" ] + deps += [ + "//brave/components/email_aliases:pref_names", + "//brave/components/email_aliases:service", + ] } }