In site settings added ability to block all popups per site
This commit is contained in:
@@ -240,6 +240,7 @@ Add-webRTC-site-settings.patch
|
||||
Show-site-settings-for-cookies-javascript-and-ads.patch
|
||||
Viewport-Protection-flag.patch
|
||||
Timezone-customization.patch
|
||||
Change-popup-site-setting.patch
|
||||
Disable-speechSynthesis-getVoices-API.patch
|
||||
Remove-support-for-device-memory-and-cpu-recovery.patch
|
||||
Log-dangling-attributes-in-some-html-elements.patch
|
||||
|
||||
@@ -0,0 +1,262 @@
|
||||
From: uazo <uazo@users.noreply.github.com>
|
||||
Date: Sun, 4 Feb 2024 16:02:48 +0000
|
||||
Subject: Change popup site setting
|
||||
|
||||
In site settings added ability to block all popups per site
|
||||
|
||||
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
|
||||
---
|
||||
.../android/popup_blocked_message_delegate.cc | 20 +++-
|
||||
.../android/popup_blocked_message_delegate.h | 1 +
|
||||
components/blocked_content/popup_blocker.cc | 3 +
|
||||
components/blocked_content_strings.grdp | 3 +
|
||||
.../impl/BromitePopupContentSetting.java | 106 ++++++++++++++++++
|
||||
.../bromite_content_settings/popups.grdp | 12 ++
|
||||
.../bromite_content_settings/popups.inc | 7 ++
|
||||
.../core/browser/content_settings_registry.cc | 2 +-
|
||||
8 files changed, 151 insertions(+), 3 deletions(-)
|
||||
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromitePopupContentSetting.java
|
||||
create mode 100644 components/browser_ui/strings/bromite_content_settings/popups.grdp
|
||||
create mode 100644 components/content_settings/core/browser/bromite_content_settings/popups.inc
|
||||
|
||||
diff --git a/components/blocked_content/android/popup_blocked_message_delegate.cc b/components/blocked_content/android/popup_blocked_message_delegate.cc
|
||||
--- a/components/blocked_content/android/popup_blocked_message_delegate.cc
|
||||
+++ b/components/blocked_content/android/popup_blocked_message_delegate.cc
|
||||
@@ -32,7 +32,7 @@ bool PopupBlockedMessageDelegate::ShowMessage(
|
||||
// the callback.
|
||||
auto message = std::make_unique<messages::MessageWrapper>(
|
||||
messages::MessageIdentifier::POPUP_BLOCKED,
|
||||
- base::BindOnce(&PopupBlockedMessageDelegate::HandleClick,
|
||||
+ base::BindOnce(&PopupBlockedMessageDelegate::HandleOpenLink,
|
||||
base::Unretained(this)),
|
||||
base::BindOnce(&PopupBlockedMessageDelegate::HandleDismissCallback,
|
||||
base::Unretained(this)));
|
||||
@@ -46,7 +46,7 @@ bool PopupBlockedMessageDelegate::ShowMessage(
|
||||
// Don't allow the user to configure the setting in the UI if the setting
|
||||
// is managed by policy.
|
||||
int button_text_id =
|
||||
- allow_settings_changes_ ? IDS_POPUPS_BLOCKED_INFOBAR_BUTTON_SHOW : IDS_OK;
|
||||
+ allow_settings_changes_ ? IDS_POPUPS_BLOCKED_INFOBAR_BUTTON_SHOW_THIS_TIME : IDS_OK;
|
||||
message->SetPrimaryButtonText(l10n_util::GetStringUTF16(button_text_id));
|
||||
messages::MessageDispatcherBridge* message_dispatcher_bridge =
|
||||
messages::MessageDispatcherBridge::Get();
|
||||
@@ -54,6 +54,14 @@ bool PopupBlockedMessageDelegate::ShowMessage(
|
||||
message->SetIconResourceId(message_dispatcher_bridge->MapToJavaDrawableId(
|
||||
IDR_ANDROID_INFOBAR_BLOCKED_POPUPS));
|
||||
|
||||
+ message->SetSecondaryIconResourceId(
|
||||
+ message_dispatcher_bridge->MapToJavaDrawableId(
|
||||
+ IDR_ANDROID_SETTINGS));
|
||||
+ message->SetSecondaryButtonMenuText(
|
||||
+ l10n_util::GetStringUTF16(IDS_POPUPS_BLOCKED_INFOBAR_BUTTON_SHOW));
|
||||
+ message->SetSecondaryActionCallback(
|
||||
+ base::BindRepeating(&PopupBlockedMessageDelegate::HandleClick,
|
||||
+ base::Unretained(this)));
|
||||
// On rare occasions, such as the moment when activity is being recreated
|
||||
// or destroyed, popup blocked message will not be displayed and the
|
||||
// method will return false.
|
||||
@@ -102,6 +110,14 @@ void PopupBlockedMessageDelegate::HandleClick() {
|
||||
std::move(on_show_popups_callback_).Run();
|
||||
}
|
||||
|
||||
+void PopupBlockedMessageDelegate::HandleOpenLink() {
|
||||
+ // Launch popups.
|
||||
+ ShowBlockedPopups(&GetWebContents());
|
||||
+
|
||||
+ if (on_show_popups_callback_)
|
||||
+ std::move(on_show_popups_callback_).Run();
|
||||
+}
|
||||
+
|
||||
WEB_CONTENTS_USER_DATA_KEY_IMPL(PopupBlockedMessageDelegate);
|
||||
|
||||
} // namespace blocked_content
|
||||
diff --git a/components/blocked_content/android/popup_blocked_message_delegate.h b/components/blocked_content/android/popup_blocked_message_delegate.h
|
||||
--- a/components/blocked_content/android/popup_blocked_message_delegate.h
|
||||
+++ b/components/blocked_content/android/popup_blocked_message_delegate.h
|
||||
@@ -41,6 +41,7 @@ class PopupBlockedMessageDelegate
|
||||
|
||||
explicit PopupBlockedMessageDelegate(content::WebContents* web_contents);
|
||||
void HandleClick();
|
||||
+ void HandleOpenLink();
|
||||
void HandleDismissCallback(messages::DismissReason dismiss_reason);
|
||||
|
||||
raw_ptr<HostContentSettingsMap> map_ = nullptr;
|
||||
diff --git a/components/blocked_content/popup_blocker.cc b/components/blocked_content/popup_blocker.cc
|
||||
--- a/components/blocked_content/popup_blocker.cc
|
||||
+++ b/components/blocked_content/popup_blocker.cc
|
||||
@@ -70,6 +70,9 @@ PopupBlockType ShouldBlockPopup(content::WebContents* web_contents,
|
||||
if (cs == CONTENT_SETTING_ALLOW)
|
||||
return PopupBlockType::kNotBlocked;
|
||||
|
||||
+ if (cs == CONTENT_SETTING_ASK)
|
||||
+ return PopupBlockType::kAbusive;
|
||||
+
|
||||
if (!user_gesture)
|
||||
return PopupBlockType::kNoGesture;
|
||||
|
||||
diff --git a/components/blocked_content_strings.grdp b/components/blocked_content_strings.grdp
|
||||
--- a/components/blocked_content_strings.grdp
|
||||
+++ b/components/blocked_content_strings.grdp
|
||||
@@ -4,6 +4,9 @@
|
||||
<message name="IDS_POPUPS_BLOCKED_INFOBAR_BUTTON_SHOW" desc="Pop-up Blocking Show Button [CHAR_LIMIT=32]">
|
||||
Always show
|
||||
</message>
|
||||
+ <message name="IDS_POPUPS_BLOCKED_INFOBAR_BUTTON_SHOW_THIS_TIME" desc="Pop-up Blocking Show Button [CHAR_LIMIT=32]">
|
||||
+ Open this time
|
||||
+ </message>
|
||||
<message name="IDS_POPUPS_BLOCKED_INFOBAR_TEXT" desc="Pop-up Blocking Title [CHAR_LIMIT=32] [ICU Syntax]">
|
||||
{NUM_POPUPS,plural,=1{Pop-up blocked} other{# pop-ups blocked}}
|
||||
</message>
|
||||
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromitePopupContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromitePopupContentSetting.java
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromitePopupContentSetting.java
|
||||
@@ -0,0 +1,106 @@
|
||||
+/*
|
||||
+ This file is part of Bromite.
|
||||
+
|
||||
+ Bromite is free software: you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU General Public License as published by
|
||||
+ the Free Software Foundation, either version 3 of the License, or
|
||||
+ (at your option) any later version.
|
||||
+
|
||||
+ Bromite is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ GNU General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU General Public License
|
||||
+ along with Bromite. If not, see <https://www.gnu.org/licenses/>.
|
||||
+*/
|
||||
+
|
||||
+package org.chromium.components.browser_ui.site_settings.impl;
|
||||
+
|
||||
+import android.content.Context;
|
||||
+
|
||||
+import org.chromium.components.browser_ui.site_settings.R;
|
||||
+
|
||||
+import org.chromium.components.browser_ui.site_settings.BromiteCustomContentSetting;
|
||||
+import org.chromium.components.browser_ui.site_settings.ContentSettingsResources;
|
||||
+import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory;
|
||||
+import org.chromium.components.content_settings.ContentSettingValues;
|
||||
+import org.chromium.components.content_settings.ContentSettingsType;
|
||||
+import org.chromium.content_public.browser.BrowserContextHandle;
|
||||
+
|
||||
+import androidx.annotation.Nullable;
|
||||
+import androidx.preference.Preference;
|
||||
+import androidx.preference.PreferenceScreen;
|
||||
+
|
||||
+import java.util.ArrayList;
|
||||
+
|
||||
+public class BromitePopupContentSetting extends BromiteCustomContentSetting {
|
||||
+ public BromitePopupContentSetting() {
|
||||
+ super(/*contentSettingsType*/ ContentSettingsType.POPUPS,
|
||||
+ /*defaultEnabledValue*/ ContentSettingValues.ALLOW,
|
||||
+ /*defaultDisabledValue*/ ContentSettingValues.BLOCK,
|
||||
+ /*allowException*/ true,
|
||||
+ /*preferenceKey*/ "popups",
|
||||
+ /*profilePrefKey*/ "popups");
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public ContentSettingsResources.ResourceItem getResourceItem() {
|
||||
+ return new ContentSettingsResources.ResourceItem(
|
||||
+ /*icon*/ R.drawable.permission_popups,
|
||||
+ /*title*/ R.string.popup_permission_title,
|
||||
+ /*defaultEnabledValue*/ getDefaultEnabledValue(),
|
||||
+ /*defaultDisabledValue*/ getDefaultDisabledValue(),
|
||||
+ /*enabledSummary*/ R.string.website_settings_category_popup_allowed,
|
||||
+ /*disabledSummary*/ R.string.website_settings_category_popup_blocked,
|
||||
+ /*summaryOverrideForScreenReader*/ 0);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public int getCategorySummary(@Nullable @ContentSettingValues int value) {
|
||||
+ switch (value) {
|
||||
+ case ContentSettingValues.ALLOW:
|
||||
+ return R.string.website_settings_category_popup_allowed;
|
||||
+ case ContentSettingValues.BLOCK:
|
||||
+ return R.string.website_settings_category_popup_blocked;
|
||||
+ case ContentSettingValues.ASK:
|
||||
+ return R.string.website_settings_category_popup_block_all;
|
||||
+ default:
|
||||
+ return 0;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public int getCategoryDescription() {
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean requiresTriStateContentSetting() {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public int[] getTriStateSettingDescriptionIDs() {
|
||||
+ int[] descriptionIDs = {
|
||||
+ R.string.website_settings_category_popup_allowed, // ALLOWED
|
||||
+ R.string.website_settings_category_popup_block_all, // ASK
|
||||
+ R.string.website_settings_category_popup_blocked}; // BLOCKED
|
||||
+ return descriptionIDs;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean showOnlyDescriptions() {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public int getAddExceptionDialogMessage() {
|
||||
+ return R.string.website_settings_category_popup_allowed;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public @Nullable Boolean considerException(SiteSettingsCategory category, @ContentSettingValues int value) {
|
||||
+ return ContentSettingValues.ALLOW != value;
|
||||
+ }
|
||||
+}
|
||||
diff --git a/components/browser_ui/strings/bromite_content_settings/popups.grdp b/components/browser_ui/strings/bromite_content_settings/popups.grdp
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/components/browser_ui/strings/bromite_content_settings/popups.grdp
|
||||
@@ -0,0 +1,12 @@
|
||||
+<?xml version="1.0" encoding="utf-8"?>
|
||||
+<grit-part>
|
||||
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_POPUP_BLOCK_ALL" desc="" formatter_data="android_java">
|
||||
+ Block all popups
|
||||
+ </message>
|
||||
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_POPUP_ALLOWED" desc="" formatter_data="android_java">
|
||||
+ Allows popups
|
||||
+ </message>
|
||||
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_POPUP_BLOCKED" desc="" formatter_data="android_java">
|
||||
+ Block some popups
|
||||
+ </message>
|
||||
+</grit-part>
|
||||
diff --git a/components/content_settings/core/browser/bromite_content_settings/popups.inc b/components/content_settings/core/browser/bromite_content_settings/popups.inc
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/components/content_settings/core/browser/bromite_content_settings/popups.inc
|
||||
@@ -0,0 +1,7 @@
|
||||
+ content_settings::WebsiteSettingsRegistry::GetInstance()
|
||||
+ ->GetMutable(ContentSettingsType::POPUPS)
|
||||
+ ->set_show_into_info_page()
|
||||
+ .set_desktop_ui()
|
||||
+ .set_allowed_ui(IDS_WEBSITE_SETTINGS_CATEGORY_POPUP_ALLOWED)
|
||||
+ .set_ask_ui(IDS_WEBSITE_SETTINGS_CATEGORY_POPUP_BLOCK_ALL)
|
||||
+ .set_blocked_ui(IDS_WEBSITE_SETTINGS_CATEGORY_POPUP_BLOCKED);
|
||||
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
|
||||
--- a/components/content_settings/core/browser/content_settings_registry.cc
|
||||
+++ b/components/content_settings/core/browser/content_settings_registry.cc
|
||||
@@ -126,7 +126,7 @@ void ContentSettingsRegistry::Init() {
|
||||
WebsiteSettingsInfo::SYNCABLE,
|
||||
/*allowlisted_primary_schemes=*/
|
||||
{kChromeUIScheme, kChromeDevToolsScheme, kExtensionScheme},
|
||||
- /*valid_settings=*/{CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK},
|
||||
+ /*valid_settings=*/{CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, CONTENT_SETTING_ASK},
|
||||
WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE,
|
||||
WebsiteSettingsRegistry::ALL_PLATFORMS,
|
||||
ContentSettingsInfo::INHERIT_IN_INCOGNITO,
|
||||
--
|
||||
Reference in New Issue
Block a user