[SHoA] Refactor the menu notification service for use in magic stack
- Disable the extensions and password result fetching on Android.
- Enable the menu notifications service on Android.
Bug: 324562205
Change-Id: Ia3878f64560a1277854006bab1f46bee473d5ed1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5661403
Commit-Queue: Rubin Deliallisi <[email protected]>
Reviewed-by: Alex Ilin <[email protected]>
Reviewed-by: Side YILMAZ <[email protected]>
Code-Coverage: [email protected] <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1320944}
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 3b30ced..42eed04 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -17853,6 +17853,29 @@
<message name="IDS_EXPERIMENTAL_FEATURE_DISCLAIMER" desc="Text used for experimental features.">
This is an experimental AI feature.
</message>
+
+ <!-- Safety Hub elements. -->
+ <!-- TODO(crbug.com/324562205): Make strings translateable once finalized. -->
+ <if expr="is_android">
+ <message name="IDS_SETTINGS_SAFETY_HUB_SAFE_BROWSING_MENU_NOTIFICATION" translateable="false">
+ Get protection against dangerous sites
+ </message>
+ <message name="IDS_SETTINGS_SAFETY_HUB_REVIEW_NOTIFICATION_PERMISSIONS_MENU_NOTIFICATION" translateable="false">
+ {NUM_SITES, plural,
+ =1 {Found 1 site with lots of notifications}
+ other {Found {NUM_SITES} sites with lots of notifications}}
+ </message>
+ <message name="IDS_SETTINGS_SAFETY_HUB_REVOKED_PERMISSIONS_MENU_NOTIFICATION" translateable="false">
+ {NUM_SITES, plural,
+ =1 {Chrome removed permissions for 1 site}
+ other {Chrome removed permissions for {NUM_SITES} sites}}
+ </message>
+ <message name="IDS_SETTINGS_SAFETY_HUB_UNUSED_SITE_PERMISSIONS_MENU_NOTIFICATION" translateable="false">
+ {NUM_SITES, plural,
+ =1 {Chrome removed permissions for 1 unused site}
+ other {Chrome removed permissions for {NUM_SITES} ununsed sites}}
+ </message>
+ </if>
</messages>
</release>
</grit>
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index 62ac1991..9c8805c 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -79,6 +79,7 @@
#include "chrome/browser/ui/network_profile_bubble.h"
#include "chrome/browser/ui/performance_controls/performance_controls_metrics.h"
#include "chrome/browser/ui/prefs/prefs_tab_helper.h"
+#include "chrome/browser/ui/safety_hub/safety_hub_prefs.h"
#include "chrome/browser/ui/search_engines/keyword_editor_controller.h"
#include "chrome/browser/ui/send_tab_to_self/send_tab_to_self_bubble.h"
#include "chrome/browser/ui/tabs/organization/prefs.h"
@@ -296,7 +297,6 @@
#include "chrome/browser/signin/signin_promo.h"
#include "chrome/browser/ui/commerce/commerce_ui_tab_helper.h"
#include "chrome/browser/ui/lens/lens_overlay_permission_utils.h"
-#include "chrome/browser/ui/safety_hub/safety_hub_prefs.h"
#include "chrome/browser/ui/startup/startup_browser_creator.h"
#include "chrome/browser/ui/webui/cr_components/theme_color_picker/theme_color_picker_handler.h"
#include "chrome/browser/ui/webui/history/foreign_session_handler.h"
@@ -1864,6 +1864,7 @@
QuietNotificationPermissionUiState::RegisterProfilePrefs(registry);
RegisterBrowserUserPrefs(registry);
RegisterPrefersDefaultScrollbarStylesPrefs(registry);
+ RegisterSafetyHubProfilePrefs(registry);
#if BUILDFLAG(IS_CHROMEOS_ASH)
settings::ResetSettingsHandler::RegisterProfilePrefs(registry);
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
@@ -1992,7 +1993,6 @@
PromoService::RegisterProfilePrefs(registry);
RecipesService::RegisterProfilePrefs(registry);
RegisterReadAnythingProfilePrefs(registry);
- RegisterSafetyHubProfilePrefs(registry);
settings::SettingsUI::RegisterProfilePrefs(registry);
send_tab_to_self::RegisterProfilePrefs(registry);
signin::RegisterProfilePrefs(registry);
diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
index 556f339e..8b55cf9f 100644
--- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
+++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
@@ -202,6 +202,7 @@
#include "chrome/browser/ui/hats/hats_service_factory.h"
#include "chrome/browser/ui/media_router/cast_notification_controller_lacros_factory.h"
#include "chrome/browser/ui/prefs/prefs_tab_helper.h"
+#include "chrome/browser/ui/safety_hub/menu_notification_service_factory.h"
#include "chrome/browser/ui/safety_hub/notification_permission_review_service_factory.h"
#include "chrome/browser/ui/safety_hub/unused_site_permissions_service_factory.h"
#include "chrome/browser/ui/tabs/pinned_tab_service_factory.h"
@@ -491,7 +492,6 @@
#include "chrome/browser/speech/speech_recognition_service_factory.h"
#include "chrome/browser/ui/global_media_controls/media_notification_service_factory.h"
#include "chrome/browser/ui/performance_controls/performance_controls_hats_service_factory.h"
-#include "chrome/browser/ui/safety_hub/menu_notification_service_factory.h"
#include "chrome/browser/ui/safety_hub/password_status_check_service_factory.h"
#include "chrome/browser/ui/safety_hub/safety_hub_hats_service_factory.h"
#include "chrome/browser/ui/tabs/organization/tab_organization_service_factory.h"
@@ -1163,7 +1163,11 @@
safe_browsing::TailoredSecurityServiceFactory::GetInstance();
safe_browsing::VerdictCacheManagerFactory::GetInstance();
SafeSearchFactory::GetInstance();
-#if !BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_ANDROID)
+ if (base::FeatureList::IsEnabled(features::kSafetyHub)) {
+ SafetyHubMenuNotificationServiceFactory::GetInstance();
+ }
+#else
SafetyHubMenuNotificationServiceFactory::GetInstance();
SafetyHubHatsServiceFactory::GetInstance();
#endif
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index f9f254d..f5da8077 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -179,12 +179,22 @@
"recently_audible_helper.h",
"safety_hub/abusive_notification_permissions_manager.cc",
"safety_hub/abusive_notification_permissions_manager.h",
+ "safety_hub/menu_notification.cc",
+ "safety_hub/menu_notification.h",
+ "safety_hub/menu_notification_service.cc",
+ "safety_hub/menu_notification_service.h",
+ "safety_hub/menu_notification_service_factory.cc",
+ "safety_hub/menu_notification_service_factory.h",
"safety_hub/notification_permission_review_service.cc",
"safety_hub/notification_permission_review_service.h",
"safety_hub/notification_permission_review_service_factory.cc",
"safety_hub/notification_permission_review_service_factory.h",
+ "safety_hub/safe_browsing_result.cc",
+ "safety_hub/safe_browsing_result.h",
"safety_hub/safety_hub_constants.cc",
"safety_hub/safety_hub_constants.h",
+ "safety_hub/safety_hub_prefs.cc",
+ "safety_hub/safety_hub_prefs.h",
"safety_hub/safety_hub_service.cc",
"safety_hub/safety_hub_service.h",
"safety_hub/safety_hub_util.cc",
@@ -1379,26 +1389,16 @@
"safety_hub/card_data_helper.h",
"safety_hub/extensions_result.cc",
"safety_hub/extensions_result.h",
- "safety_hub/menu_notification.cc",
- "safety_hub/menu_notification.h",
- "safety_hub/menu_notification_service.cc",
- "safety_hub/menu_notification_service.h",
- "safety_hub/menu_notification_service_factory.cc",
- "safety_hub/menu_notification_service_factory.h",
"safety_hub/password_status_check_result.cc",
"safety_hub/password_status_check_result.h",
"safety_hub/password_status_check_service.cc",
"safety_hub/password_status_check_service.h",
"safety_hub/password_status_check_service_factory.cc",
"safety_hub/password_status_check_service_factory.h",
- "safety_hub/safe_browsing_result.cc",
- "safety_hub/safe_browsing_result.h",
"safety_hub/safety_hub_hats_service.cc",
"safety_hub/safety_hub_hats_service.h",
"safety_hub/safety_hub_hats_service_factory.cc",
"safety_hub/safety_hub_hats_service_factory.h",
- "safety_hub/safety_hub_prefs.cc",
- "safety_hub/safety_hub_prefs.h",
"scoped_tabbed_browser_displayer.cc",
"scoped_tabbed_browser_displayer.h",
"search/instant_controller.cc",
diff --git a/chrome/browser/ui/safety_hub/menu_notification_service.cc b/chrome/browser/ui/safety_hub/menu_notification_service.cc
index 51ce219d..9de90d6 100644
--- a/chrome/browser/ui/safety_hub/menu_notification_service.cc
+++ b/chrome/browser/ui/safety_hub/menu_notification_service.cc
@@ -11,7 +11,7 @@
#include "base/functional/callback_forward.h"
#include "base/time/time.h"
#include "base/values.h"
-#include "chrome/browser/ui/safety_hub/extensions_result.h"
+#include "build/build_config.h"
#include "chrome/browser/ui/safety_hub/menu_notification.h"
#include "chrome/browser/ui/safety_hub/notification_permission_review_service.h"
#include "chrome/browser/ui/safety_hub/safe_browsing_result.h"
@@ -22,6 +22,9 @@
#include "components/prefs/pref_service.h"
#include "components/safe_browsing/core/common/safe_browsing_prefs.h"
+#if !BUILDFLAG(IS_ANDROID)
+#include "chrome/browser/ui/safety_hub/extensions_result.h"
+#endif // BUILDFLAG(IS_ANDROID)
namespace {
SafetyHubModuleInfoElement::SafetyHubModuleInfoElement() = default;
SafetyHubModuleInfoElement::~SafetyHubModuleInfoElement() = default;
@@ -43,8 +46,10 @@
PrefService* pref_service,
UnusedSitePermissionsService* unused_site_permissions_service,
NotificationPermissionsReviewService* notification_permissions_service,
+#if !BUILDFLAG(IS_ANDROID)
extensions::CWSInfoService* extension_info_service,
PasswordStatusCheckService* password_check_service,
+#endif // BUILDFLAG(IS_ANDROID)
Profile* profile) {
pref_service_ = std::move(pref_service);
const base::Value::Dict& stored_notifications =
@@ -56,14 +61,7 @@
{safety_hub::SafetyHubModuleType::NOTIFICATION_PERMISSIONS,
"notification-permissions"},
{safety_hub::SafetyHubModuleType::SAFE_BROWSING, "safe-browsing"},
- {safety_hub::SafetyHubModuleType::EXTENSIONS, "extensions"},
};
- // PasswordStatusCheckService might be null for some profiles and testing. Add
- // to the dictionary only if the service is available.
- if (password_check_service) {
- pref_dict_key_map_.emplace(safety_hub::SafetyHubModuleType::PASSWORDS,
- "passwords");
- }
// TODO(crbug.com/40267370): Make the interval for each service finch
// configurable.
@@ -86,15 +84,25 @@
base::BindRepeating(&SafetyHubSafeBrowsingResult::GetResult,
base::Unretained(pref_service)),
stored_notifications);
+
+// Extensions are not available on Android, so we cannot fetch any information
+// about them. Passwords are handled by GMS Core on Android and our
+// PasswordStatusCheckService is not compatible with GMS Core.
+#if !BUILDFLAG(IS_ANDROID)
+ pref_dict_key_map_.emplace(safety_hub::SafetyHubModuleType::EXTENSIONS,
+ "extensions");
SetInfoElement(safety_hub::SafetyHubModuleType::EXTENSIONS,
MenuNotificationPriority::LOW, base::Days(10),
base::BindRepeating(&SafetyHubExtensionsResult::GetResult,
base::Unretained(extension_info_service),
profile, true),
stored_notifications);
+
// PasswordStatusCheckService might be null for some profiles and testing. Add
// the info item only if the service is available.
if (password_check_service) {
+ pref_dict_key_map_.emplace(safety_hub::SafetyHubModuleType::PASSWORDS,
+ "passwords");
SetInfoElement(
safety_hub::SafetyHubModuleType::PASSWORDS,
MenuNotificationPriority::HIGH, base::Days(0),
@@ -102,6 +110,7 @@
base::Unretained(password_check_service)),
stored_notifications);
}
+#endif // BUILDFLAG(IS_ANDROID)
// Listen for changes to the Safe Browsing pref to accommodate the trigger
// logic.
diff --git a/chrome/browser/ui/safety_hub/menu_notification_service.h b/chrome/browser/ui/safety_hub/menu_notification_service.h
index b4b0a2b..a42b2cdc 100644
--- a/chrome/browser/ui/safety_hub/menu_notification_service.h
+++ b/chrome/browser/ui/safety_hub/menu_notification_service.h
@@ -11,15 +11,19 @@
#include <optional>
#include "base/time/time.h"
-#include "chrome/browser/extensions/cws_info_service.h"
+#include "build/build_config.h"
#include "chrome/browser/ui/safety_hub/menu_notification.h"
#include "chrome/browser/ui/safety_hub/notification_permission_review_service.h"
-#include "chrome/browser/ui/safety_hub/password_status_check_service.h"
#include "chrome/browser/ui/safety_hub/safety_hub_constants.h"
#include "chrome/browser/ui/safety_hub/safety_hub_service.h"
#include "chrome/browser/ui/safety_hub/unused_site_permissions_service.h"
#include "components/keyed_service/core/keyed_service.h"
+#if !BUILDFLAG(IS_ANDROID)
+#include "chrome/browser/extensions/cws_info_service.h"
+#include "chrome/browser/ui/safety_hub/password_status_check_service.h"
+#endif // BUILDFLAG(IS_ANDROID)
+
struct MenuNotificationEntry {
int command = 0;
std::u16string label;
@@ -69,8 +73,10 @@
PrefService* pref_service,
UnusedSitePermissionsService* unused_site_permissions_service,
NotificationPermissionsReviewService* notification_permissions_service,
+#if !BUILDFLAG(IS_ANDROID)
extensions::CWSInfoService* extension_info_service,
PasswordStatusCheckService* password_check_service,
+#endif // BUILDFLAG(IS_ANDROID)
Profile* profile);
SafetyHubMenuNotificationService(const SafetyHubMenuNotificationService&) =
delete;
diff --git a/chrome/browser/ui/safety_hub/menu_notification_service_factory.cc b/chrome/browser/ui/safety_hub/menu_notification_service_factory.cc
index f04b25b..185255f4 100644
--- a/chrome/browser/ui/safety_hub/menu_notification_service_factory.cc
+++ b/chrome/browser/ui/safety_hub/menu_notification_service_factory.cc
@@ -4,19 +4,25 @@
#include "chrome/browser/ui/safety_hub/menu_notification_service_factory.h"
+#include "base/feature_list.h"
#include "base/memory/ptr_util.h"
#include "base/no_destructor.h"
+#include "build/build_config.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/safety_hub/menu_notification_service.h"
#include "chrome/browser/ui/safety_hub/notification_permission_review_service.h"
#include "chrome/browser/ui/safety_hub/notification_permission_review_service_factory.h"
-#include "chrome/browser/ui/safety_hub/password_status_check_service_factory.h"
#include "chrome/browser/ui/safety_hub/safety_hub_service.h"
#include "chrome/browser/ui/safety_hub/unused_site_permissions_service.h"
#include "chrome/browser/ui/safety_hub/unused_site_permissions_service_factory.h"
+#include "chrome/common/chrome_features.h"
+
+#if !BUILDFLAG(IS_ANDROID)
+#include "chrome/browser/ui/safety_hub/password_status_check_service_factory.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_prefs_factory.h"
#include "extensions/browser/extension_registry.h"
+#endif // BUILDFLAG(IS_ANDROID)
// static
SafetyHubMenuNotificationServiceFactory*
@@ -41,8 +47,10 @@
.Build()) {
DependsOn(UnusedSitePermissionsServiceFactory::GetInstance());
DependsOn(NotificationPermissionsReviewServiceFactory::GetInstance());
+#if !BUILDFLAG(IS_ANDROID)
DependsOn(PasswordStatusCheckServiceFactory::GetInstance());
DependsOn(extensions::ExtensionPrefsFactory::GetInstance());
+#endif // BUIDFLAG(IS_ANDROID)
}
SafetyHubMenuNotificationServiceFactory::
@@ -56,6 +64,11 @@
UnusedSitePermissionsServiceFactory::GetForProfile(profile);
NotificationPermissionsReviewService* notification_permission_review_service =
NotificationPermissionsReviewServiceFactory::GetForProfile(profile);
+#if BUILDFLAG(IS_ANDROID)
+ return std::make_unique<SafetyHubMenuNotificationService>(
+ profile->GetPrefs(), unused_site_permissions_service,
+ notification_permission_review_service, profile);
+#else
extensions::CWSInfoService* extension_info_service =
extensions::CWSInfoService::Get(profile);
PasswordStatusCheckService* password_check_service =
@@ -64,4 +77,5 @@
profile->GetPrefs(), unused_site_permissions_service,
notification_permission_review_service, extension_info_service,
password_check_service, profile);
+#endif // BUILDFLAG(IS_ANDROID)
}
diff --git a/chrome/browser/ui/safety_hub/notification_permission_review_service.cc b/chrome/browser/ui/safety_hub/notification_permission_review_service.cc
index 4ff28e7..54d4e10 100644
--- a/chrome/browser/ui/safety_hub/notification_permission_review_service.cc
+++ b/chrome/browser/ui/safety_hub/notification_permission_review_service.cc
@@ -209,17 +209,12 @@
std::u16string NotificationPermissionsReviewService::
NotificationPermissionsResult::GetNotificationString() const {
-#if !BUILDFLAG(IS_ANDROID)
if (notification_permissions_.empty()) {
return std::u16string();
}
return l10n_util::GetPluralStringFUTF16(
IDS_SETTINGS_SAFETY_HUB_REVIEW_NOTIFICATION_PERMISSIONS_MENU_NOTIFICATION,
GetOrigins().size());
-#else
- // Menu notifications are not present on Android.
- return std::u16string();
-#endif
}
int NotificationPermissionsReviewService::NotificationPermissionsResult::
diff --git a/chrome/browser/ui/safety_hub/unused_site_permissions_service.cc b/chrome/browser/ui/safety_hub/unused_site_permissions_service.cc
index cde7c2d..238ee3b 100644
--- a/chrome/browser/ui/safety_hub/unused_site_permissions_service.cc
+++ b/chrome/browser/ui/safety_hub/unused_site_permissions_service.cc
@@ -286,7 +286,6 @@
std::u16string UnusedSitePermissionsService::UnusedSitePermissionsResult::
GetNotificationString() const {
-#if !BUILDFLAG(IS_ANDROID)
if (revoked_permissions_.empty()) {
return std::u16string();
}
@@ -296,10 +295,6 @@
? IDS_SETTINGS_SAFETY_HUB_REVOKED_PERMISSIONS_MENU_NOTIFICATION
: IDS_SETTINGS_SAFETY_HUB_UNUSED_SITE_PERMISSIONS_MENU_NOTIFICATION,
revoked_permissions_.size());
-#else
- // Menu notifications are not present on Android.
- return std::u16string();
-#endif
}
int UnusedSitePermissionsService::UnusedSitePermissionsResult::