From 714a06233a8c80356729ff9b51a0e4840a7ad1a2 Mon Sep 17 00:00:00 2001 From: Olesia Marukhno <olesiamarukhno@google.com> Date: Mon, 24 Feb 2025 06:17:06 -0800 Subject: [PATCH] [DNS] Add a new content setting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a new REVOKED_DISRUPTIVE_NOTIFICATION_PERMISSIONS content setting. It will be used to store the revoked (or potentially revoked) sites that have been sending disruptive notifications. After revocation, the users will receive a notification and the list of revoked websites will be available in Safety Hub. For more details, see go/dns-dd. Bug: 397363276 Change-Id: Iec9b8be940140e4daa80e877db51452109a8c2b5 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6276093 Reviewed-by: Antonio Sartori <antoniosartori@chromium.org> Reviewed-by: Robbie McElrath <rmcelrath@chromium.org> Reviewed-by: Christian Dullweber <dullweber@chromium.org> Commit-Queue: Olesia Marukhno <olesiamarukhno@google.com> Reviewed-by: Martin Šrámek <msramek@chromium.org> Cr-Commit-Position: refs/heads/main@{#1423872} --- .../site_settings/WebsitePermissionsFetcherTest.java | 2 +- .../browsing_data/chrome_browsing_data_remover_delegate.cc | 4 ++++ .../controlled_frame_permissions_unittest.cc | 1 + chrome/browser/ui/webui/settings/site_settings_helper.cc | 1 + .../core/browser/content_settings_uma_util.cc | 1 + .../core/browser/website_settings_registry.cc | 6 ++++++ .../core/common/content_settings_types.mojom | 4 ++++ tools/metrics/histograms/enums.xml | 1 + 8 files changed, 19 insertions(+), 1 deletion(-) diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java index 57482ed209b7e..acf8cd025fa27 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/site_settings/WebsitePermissionsFetcherTest.java @@ -707,7 +707,7 @@ public class WebsitePermissionsFetcherTest { // Otherwise, just update count in the assert. // TODO(https://b/332704817): Add test for Tracking Protection content setting after Android // integration. - assertEquals(117, ContentSettingsType.MAX_VALUE); + assertEquals(118, ContentSettingsType.MAX_VALUE); websitePreferenceBridge.addContentSettingException( new ContentSettingException( ContentSettingsType.COOKIES, diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc index 5036bc4f5c309..4edb6fb0e562a 100644 --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc @@ -897,6 +897,10 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( ContentSettingsType::REVOKED_ABUSIVE_NOTIFICATION_PERMISSIONS, delete_begin_, delete_end_, website_settings_filter); + host_content_settings_map_->ClearSettingsForOneTypeWithPredicate( + ContentSettingsType::REVOKED_DISRUPTIVE_NOTIFICATION_PERMISSIONS, + delete_begin_, delete_end_, website_settings_filter); + host_content_settings_map_->ClearSettingsForOneTypeWithPredicate( ContentSettingsType::NOTIFICATION_PERMISSION_REVIEW, delete_begin_, delete_end_, website_settings_filter); diff --git a/chrome/browser/controlled_frame/controlled_frame_permissions_unittest.cc b/chrome/browser/controlled_frame/controlled_frame_permissions_unittest.cc index f9e0d567c888b..ab3d7ab17811f 100644 --- a/chrome/browser/controlled_frame/controlled_frame_permissions_unittest.cc +++ b/chrome/browser/controlled_frame/controlled_frame_permissions_unittest.cc @@ -196,6 +196,7 @@ TEST_F(ControlledFramePermissionsTest, Verify) { case ContentSettingsType:: ARE_SUSPICIOUS_NOTIFICATIONS_ALLOWLISTED_BY_USER: case ContentSettingsType::CONTROLLED_FRAME: + case ContentSettingsType::REVOKED_DISRUPTIVE_NOTIFICATION_PERMISSIONS: break; default: diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/browser/ui/webui/settings/site_settings_helper.cc index e8c5e5cec26de..8856936f6b0a2 100644 --- a/chrome/browser/ui/webui/settings/site_settings_helper.cc +++ b/chrome/browser/ui/webui/settings/site_settings_helper.cc @@ -247,6 +247,7 @@ constexpr auto kContentSettingsTypeGroupNames = std::to_array< {ContentSettingsType::CONTROLLED_FRAME, nullptr}, // POINTER_LOCK has been deprecated. {ContentSettingsType::POINTER_LOCK, nullptr}, + {ContentSettingsType::REVOKED_DISRUPTIVE_NOTIFICATION_PERMISSIONS, nullptr}, }); static_assert( diff --git a/components/content_settings/core/browser/content_settings_uma_util.cc b/components/content_settings/core/browser/content_settings_uma_util.cc index 87519a1fbffb5..1a6ff66af738a 100644 --- a/components/content_settings/core/browser/content_settings_uma_util.cc +++ b/components/content_settings/core/browser/content_settings_uma_util.cc @@ -153,6 +153,7 @@ constexpr auto kHistogramValue = base::MakeFixedFlatMap<ContentSettingsType, {ContentSettingsType::ARE_SUSPICIOUS_NOTIFICATIONS_ALLOWLISTED_BY_USER, 132}, {ContentSettingsType::CONTROLLED_FRAME, 133}, + {ContentSettingsType::REVOKED_DISRUPTIVE_NOTIFICATION_PERMISSIONS, 134}, // As mentioned at the top, please don't forget to update ContentType in // enums.xml when you add entries here! diff --git a/components/content_settings/core/browser/website_settings_registry.cc b/components/content_settings/core/browser/website_settings_registry.cc index a8a82d082ae82..c22a98633a233 100644 --- a/components/content_settings/core/browser/website_settings_registry.cc +++ b/components/content_settings/core/browser/website_settings_registry.cc @@ -326,6 +326,12 @@ void WebsiteSettingsRegistry::Init() { WebsiteSettingsInfo::GENERIC_SINGLE_ORIGIN_SCOPE, DESKTOP | PLATFORM_ANDROID, WebsiteSettingsInfo::DONT_INHERIT_IN_INCOGNITO); + Register(ContentSettingsType::REVOKED_DISRUPTIVE_NOTIFICATION_PERMISSIONS, + "disruptive-notification-permissions", base::Value(), + WebsiteSettingsInfo::UNSYNCABLE, WebsiteSettingsInfo::NOT_LOSSY, + WebsiteSettingsInfo::GENERIC_SINGLE_ORIGIN_SCOPE, + DESKTOP | PLATFORM_ANDROID, + WebsiteSettingsInfo::DONT_INHERIT_IN_INCOGNITO); } } // namespace content_settings diff --git a/components/content_settings/core/common/content_settings_types.mojom b/components/content_settings/core/common/content_settings_types.mojom index 5ddb2cd807f01..2b5085af0bba5 100644 --- a/components/content_settings/core/common/content_settings_types.mojom +++ b/components/content_settings/core/common/content_settings_types.mojom @@ -475,5 +475,9 @@ enum ContentSettingsType { // Content settings for access to the Controlled Frame API. CONTROLLED_FRAME, + + // Website setting which is used for UnusedSitePermissionsService to + // store revoked notification permissions of disruptive sites. + REVOKED_DISRUPTIVE_NOTIFICATION_PERMISSIONS, }; // LINT.ThenChange(//components/content_settings/core/browser/content_settings_uma_util.cc:kHistogramValue) diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 010b0774f1272..acf5c0b66af3f 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml @@ -2751,6 +2751,7 @@ Called by update_net_error_codes.py.--> <int value="131" label="Legacy cookie scope"/> <int value="132" label="Are suspicious notifications allowlisted by user"/> <int value="133" label="Controlled Frame"/> + <int value="134" label="Revoked disruptive notification permissions"/> </enum> <!-- LINT.ThenChange(//components/content_settings/core/browser/content_settings_uma_util.cc:kHistogramValue) -->