From 12696424f69c090a59b4a474ca94dd00ce35e65c Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Sun, 3 May 2026 09:14:16 -0400
Subject: [PATCH 001/375] Import translation work from
https://crowdin.com/project/ublock
---
.../mv3/extension/_locales/sr/messages.json | 4 +--
src/_locales/ar/messages.json | 36 +++++++++----------
src/_locales/nl/messages.json | 2 +-
src/_locales/sr/messages.json | 2 +-
src/_locales/zh_TW/messages.json | 10 +++---
5 files changed, 27 insertions(+), 27 deletions(-)
diff --git a/platform/mv3/extension/_locales/sr/messages.json b/platform/mv3/extension/_locales/sr/messages.json
index 3948ee4d86a59..2df65745f3852 100644
--- a/platform/mv3/extension/_locales/sr/messages.json
+++ b/platform/mv3/extension/_locales/sr/messages.json
@@ -384,11 +384,11 @@
"description": "Text for buttons used to restore content"
},
"resetToDefaultButton": {
- "message": "Reset to default settings…",
+ "message": "Ресетуј на подразумевана подешавања…",
"description": "Text for buttons used to reset configurations to default"
},
"resetToDefaultConfirm": {
- "message": "All your custom settings will be removed. Do you really want to reset to default settings?",
+ "message": "Сва ваша прилагођена подешавања ће бити уклоњена. Да ли заиста желите да ресетујете на подразумевана подешавања?",
"description": "Message asking user to confirm reset to default settings"
},
"dnrRulesWarning": {
diff --git a/src/_locales/ar/messages.json b/src/_locales/ar/messages.json
index df3c75f262ebd..4884d345b117b 100644
--- a/src/_locales/ar/messages.json
+++ b/src/_locales/ar/messages.json
@@ -100,7 +100,7 @@
"description": "English: or"
},
"popupBlockedOnThisPage_v2": {
- "message": "محجوب على هذه الصفحة",
+ "message": "محجوب في هذه الصفحة",
"description": "For the new mobile-friendly popup design"
},
"popupBlockedSinceInstall_v2": {
@@ -188,7 +188,7 @@
"description": "Tooltip for the no-scripting per-site switch"
},
"popupNoPopups_v2": {
- "message": "نوافذ منبثقة",
+ "message": "النوافذ المنبثقة",
"description": "Caption for the no-popups per-site switch"
},
"popupNoLargeMedia_v2": {
@@ -220,7 +220,7 @@
"description": "Tooltip when hovering the top-most cell of the global-rules column."
},
"popupTipLocalRules": {
- "message": "الشروط المؤقتة: هذا العمود يتعلق بالقواعد التي تنطبق فقط على الموقع المزار حاليا.\nالشروط المؤقتة تحل محل الشروط العامة.",
+ "message": "الشروط المحلية: هذا العمود يحص القواعد التي تنطبق فقط على الموقع المزار حاليا.",
"description": "Tooltip when hovering the top-most cell of the local-rules column."
},
"popupTipSaveRules": {
@@ -276,7 +276,7 @@
"description": "Example of use: Version 1.26.4"
},
"popup3pScriptFilter": {
- "message": "برنامَج نصي",
+ "message": "سكربت",
"description": "Appears as an option to filter out firewall rows"
},
"popup3pFrameFilter": {
@@ -336,7 +336,7 @@
"description": "English: Color-blind friendly"
},
"settingsAppearance": {
- "message": "مظهر",
+ "message": "المظهر",
"description": "Section for controlling user interface appearance"
},
"settingsThemeLabel": {
@@ -396,7 +396,7 @@
"description": "background information: https://github.com/gorhill/uBlock/issues/3150"
},
"settingsUncloakCnamePrompt": {
- "message": "فك الأسماء المتعارف عليها",
+ "message": "تعرية الأسماء المعروفة",
"description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
},
"settingsAdvanced": {
@@ -404,7 +404,7 @@
"description": "Section for controlling advanced-user settings"
},
"settingsAdvancedSynopsis": {
- "message": "ميزات مناسبة فقط للمستخدمين التقنيين",
+ "message": "ميزات مناسبة فقط للتقنيين",
"description": "Description of section controlling advanced-user settings"
},
"settingsAdvancedUserSettings": {
@@ -444,7 +444,7 @@
"description": "English: Parse and enforce Adblock+ element hiding filters."
},
"3pParseAllABPHideFiltersInfo": {
- "message": "التشريحات التجميلية تعمل لإزالة العناصر في صفحة الويب التي تعتبر إزعاج بصريًا و تلك التي لا يمكن حجبها عن طريق محركات التشريحات القائمة على طلبات الشبكة.",
+ "message": "تعمل المرشحات التجميلية على إزالة العناصر من الصفحة التي تعد إزعاجا بصريا، ولا يمكن حجبها بمحركات الترشيح المبنية على طلبات الشبكة.",
"description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
},
"3pIgnoreGenericCosmeticFilters": {
@@ -452,11 +452,11 @@
"description": "This will cause uBO to ignore all generic cosmetic filters."
},
"3pIgnoreGenericCosmeticFiltersInfo": {
- "message": "التشريحات التجميلية العمومية هي الفلاتر التجميلية التي تنطبق على كل مواقع الإنترنت. تفعيل هذا الخيار سوف يترك مساحة أقل من الذاكرة و قوة المعالجة للاستعمال من قبل صفحات الويب كنتيجة لمعالجة التشريحات التجميلية العمومية.\n\nمن الأفضل تفعيل هذا الخيار على الأجهزة الأقل قوة.",
+ "message": "المرشحات التجميلية العامة هي تلك التي تُطبّق على كل مواقع الإنترنت. تفعيل هذا الخيار سيحرر موارد الذاكرة والمعالجة التي تضاف للصفحات بسبب التعامل مع المرشحات التجميلية العامة.\n\nينصح بتفعيل هذا الخيار في الأجهزة الضعيفة.",
"description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
},
"3pSuspendUntilListsAreLoaded": {
- "message": "تعليق نشاط الشبكة حتى يتم تحميل كافة قوائم عوامل التشريحات",
+ "message": "تعليق نشاط الشبكة إلى حين تحميل كافة قوائم المرشحات",
"description": "A checkbox in the 'Filter lists' pane"
},
"3pListsOfBlockedHostsHeader": {
@@ -488,7 +488,7 @@
"description": "Filter lists section name"
},
"3pGroupCookies": {
- "message": "اشعارات ملفات تعريف الارتباط",
+ "message": "إشعارات معرفات الارتباط",
"description": "Filter lists section name"
},
"3pGroupAnnoyances": {
@@ -508,7 +508,7 @@
"description": "Filter lists section name"
},
"3pImport": {
- "message": "استرجاع…",
+ "message": "استيراد…",
"description": "The label for the checkbox used to import external filter lists"
},
"3pExternalListsHint": {
@@ -520,7 +520,7 @@
"description": "used as a tooltip for the out-of-date icon beside a list"
},
"3pViewContent": {
- "message": "اظهر المحتوى",
+ "message": "مشاهدة المحتوى",
"description": "used as a tooltip for eye icon beside a list"
},
"3pLastUpdate": {
@@ -540,7 +540,7 @@
"description": "Warning against copy-pasting filters from random sources"
},
"1pEnableMyFiltersLabel": {
- "message": "مكّن تشريحاتي المخصصة",
+ "message": "تمكين المرشحات المخصصة",
"description": "Label for the checkbox use to enable/disable 'My filters' list"
},
"1pTrustMyFiltersLabel": {
@@ -552,7 +552,7 @@
"description": "Button in the 'My filters' pane"
},
"1pExport": {
- "message": "تصدير",
+ "message": "تصدير…",
"description": "Button in the 'My filters' pane"
},
"1pExportFilename": {
@@ -592,7 +592,7 @@
"description": "Will discard manually-edited content and exit manual-edit mode"
},
"rulesImport": {
- "message": "استورد من ملف…",
+ "message": "استيراد من ملف…",
"description": ""
},
"rulesExport": {
@@ -616,7 +616,7 @@
"description": "English: label for sort option."
},
"rulesSortByType": {
- "message": "نوع القاعدة",
+ "message": "نوع الاشتراط",
"description": "English: a sort option for list of rules."
},
"rulesSortBySource": {
@@ -888,7 +888,7 @@
"description": "Label for radio-button to pick export format"
},
"loggerExportEncodePlain": {
- "message": "واضح",
+ "message": "بسيط",
"description": "Label for radio-button to pick export text format"
},
"loggerExportEncodeMarkdown": {
diff --git a/src/_locales/nl/messages.json b/src/_locales/nl/messages.json
index 6d19c6595e395..3449ed1747718 100644
--- a/src/_locales/nl/messages.json
+++ b/src/_locales/nl/messages.json
@@ -1144,7 +1144,7 @@
"description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
},
"docblockedFoundIn": {
- "message": "Gevonden in:",
+ "message": "Het filter is gevonden in:",
"description": "English: List of filter list names follows"
},
"docblockedBack": {
diff --git a/src/_locales/sr/messages.json b/src/_locales/sr/messages.json
index 02dd6d947bc2e..f409c2e896ca3 100644
--- a/src/_locales/sr/messages.json
+++ b/src/_locales/sr/messages.json
@@ -960,7 +960,7 @@
"description": "Header of 'Report a filter issue' section in Support pane"
},
"supportS6P1S1": {
- "message": "Да не бисте оптерећивали волонтере дуплим извештајима, проверите да ли је проблем већ пријављен.",
+ "message": "Да не бисте оптерећивали волонтере дуплим извештајима, проверите да ли је проблем већ пријављен. Напомена: кликом на дугме, адреса странице ће бити послата ГитХаб-у.",
"description": "A paragraph in the filter issue reporter section"
},
"supportS6P2S1": {
diff --git a/src/_locales/zh_TW/messages.json b/src/_locales/zh_TW/messages.json
index c9ee02cf6d23b..da46baa0cad53 100644
--- a/src/_locales/zh_TW/messages.json
+++ b/src/_locales/zh_TW/messages.json
@@ -40,7 +40,7 @@
"description": "appears as tab name in dashboard"
},
"whitelistPageName": {
- "message": "受信任網站",
+ "message": "白名單",
"description": "appears as tab name in dashboard"
},
"shortcutsPageName": {
@@ -128,7 +128,7 @@
"description": "Tooltip used for the logger icon in the panel"
},
"popupTipReport": {
- "message": "回報網站問題",
+ "message": "回報此網站的問題",
"description": "Tooltip used for the 'chat' icon in the panel"
},
"popupTipNoPopups": {
@@ -136,7 +136,7 @@
"description": "Tooltip for the no-popups per-site switch"
},
"popupTipNoPopups1": {
- "message": "點擊以封鎖網站的所有彈出式視窗",
+ "message": "點擊以封鎖此網站的所有彈出型視窗",
"description": "Tooltip for the no-popups per-site switch"
},
"popupTipNoPopups2": {
@@ -176,11 +176,11 @@
"description": "Tooltip for the no-remote-fonts per-site switch"
},
"popupTipNoRemoteFonts2": {
- "message": "點擊以解除封鎖網站的遠端字型",
+ "message": "點擊以解除封鎖此網站的遠端字型",
"description": "Tooltip for the no-remote-fonts per-site switch"
},
"popupTipNoScripting1": {
- "message": "點擊以停用網站的 JavaScript",
+ "message": "點擊以停用此網站的 JavaScript",
"description": "Tooltip for the no-scripting per-site switch"
},
"popupTipNoScripting2": {
From 01ff17fe646e2e21c85203cbd945328b1be6337a Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Mon, 4 May 2026 12:18:12 -0400
Subject: [PATCH 002/375] [mv3][safari] Fix cosmetic filtering when pages load
from "Preload Top Hit"
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/655
---
platform/mv3/extension/js/scripting-manager.js | 4 ++++
platform/mv3/safari/css-api.js | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/platform/mv3/extension/js/scripting-manager.js b/platform/mv3/extension/js/scripting-manager.js
index c72bc193b95e3..99b4e041f2b7e 100644
--- a/platform/mv3/extension/js/scripting-manager.js
+++ b/platform/mv3/extension/js/scripting-manager.js
@@ -25,6 +25,7 @@ import {
browser,
localKeys, localRemove, localWrite,
sessionKeys, sessionRead, sessionRemove, sessionWrite,
+ webextFlavor,
} from './ext.js';
import {
isUserScriptsAvailable,
@@ -208,6 +209,9 @@ async function registerCosmetic(realm, context) {
const realmid = `css-${realm}`;
const js = rulesetIds.map(id => `/rulesets/scripting/${realm}/${id}.js`);
js.unshift('/js/scripting/css-api.js', '/js/scripting/isolated-api.js');
+ if ( realm === 'procedural' && webextFlavor === 'safari' ) {
+ js.push('/js/scripting/css-procedural-api.js');
+ }
js.push(`/js/scripting/${realmid}.js`);
const excludeMatches = [];
diff --git a/platform/mv3/safari/css-api.js b/platform/mv3/safari/css-api.js
index e9b8817f4a039..88c7b2796c8a9 100644
--- a/platform/mv3/safari/css-api.js
+++ b/platform/mv3/safari/css-api.js
@@ -35,7 +35,7 @@
},
};
- self.addEventListener('pageshow', ( ) => {
+ self.addEventListener('pagereveal', ( ) => {
chrome.runtime.sendMessage({
what: 'insertCSS',
css: Array.from(inserted).join('\n'),
From 532f897ea8814d82fb016c6759ff08f5eda93e73 Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Mon, 4 May 2026 18:51:12 -0400
Subject: [PATCH 003/375] [mv3][safari] Fix regression in custom procedural
cosmetic filters
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/673
---
platform/mv3/safari/css-user.js | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/platform/mv3/safari/css-user.js b/platform/mv3/safari/css-user.js
index 0f5caedaf2cbe..f02b0dae9b9b9 100644
--- a/platform/mv3/safari/css-user.js
+++ b/platform/mv3/safari/css-user.js
@@ -31,17 +31,28 @@ const details = await chrome.runtime.sendMessage({
});
if ( details?.proceduralSelectors?.length ) {
- if ( self.ProceduralFiltererAPI ) {
- self.customProceduralFiltererAPI = new self.ProceduralFiltererAPI();
- self.customProceduralFiltererAPI.addSelectors(
- details.proceduralSelectors.map(a => JSON.parse(a))
- );
+ if ( self.ProceduralFiltererAPI === undefined ) {
+ self.ProceduralFiltererAPI = chrome.runtime.sendMessage({
+ what: 'injectCSSProceduralAPI'
+ }).catch(( ) => {
+ });
+ }
+ await self.ProceduralFiltererAPI;
+ self.customProceduralFiltererAPI = new self.ProceduralFiltererAPI();
+ const selectors = details.proceduralSelectors.map(a => JSON.parse(a));
+ const declaratives = selectors.filter(a => a.cssable);
+ if ( declaratives.length !== 0 ) {
+ self.customProceduralFiltererAPI.addDeclaratives(declaratives);
+ }
+ const procedurals = selectors.filter(a => !a.cssable);
+ if ( procedurals.length !== 0 ) {
+ self.customProceduralFiltererAPI.addProcedurals(procedurals);
}
}
if ( details?.plainSelectors?.length ) {
const selectors = details.plainSelectors;
- self.addEventListener('pageshow', ( ) => {
+ self.addEventListener('pagereveal', ( ) => {
chrome.runtime.sendMessage({
what: 'insertCSS',
css: `${selectors.join(',\n')}{display:none!important;}`,
From 19ebbe73b90bf3ae6484445dabf596db1c1e8865 Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Wed, 6 May 2026 10:50:35 -0400
Subject: [PATCH 004/375] [mv3][safari] Fix custom cosmetic filtering when
pages load from "Preload Top Hit"
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/655
---
platform/mv3/safari/css-user.js | 80 +++++++++++++++++++--------------
1 file changed, 47 insertions(+), 33 deletions(-)
diff --git a/platform/mv3/safari/css-user.js b/platform/mv3/safari/css-user.js
index f02b0dae9b9b9..ceb96e528e930 100644
--- a/platform/mv3/safari/css-user.js
+++ b/platform/mv3/safari/css-user.js
@@ -23,45 +23,59 @@
/******************************************************************************/
-const docURL = new URL(document.baseURI);
-const details = await chrome.runtime.sendMessage({
- what: 'injectCustomFilters',
- hostname: docURL.hostname,
-}).catch(( ) => {
-});
-
-if ( details?.proceduralSelectors?.length ) {
- if ( self.ProceduralFiltererAPI === undefined ) {
- self.ProceduralFiltererAPI = chrome.runtime.sendMessage({
- what: 'injectCSSProceduralAPI'
- }).catch(( ) => {
- });
- }
- await self.ProceduralFiltererAPI;
- self.customProceduralFiltererAPI = new self.ProceduralFiltererAPI();
- const selectors = details.proceduralSelectors.map(a => JSON.parse(a));
- const declaratives = selectors.filter(a => a.cssable);
- if ( declaratives.length !== 0 ) {
- self.customProceduralFiltererAPI.addDeclaratives(declaratives);
+async function uBOL_cssUserActivate() {
+ if ( self.customFilters ) { return; }
+
+ const docURL = new URL(document.baseURI);
+
+ const details = await chrome.runtime.sendMessage({
+ what: 'injectCustomFilters',
+ hostname: docURL.hostname,
+ }).catch(( ) => {
+ });
+ self.customFilters = details;
+ if ( Boolean(details) === false ) { return; }
+
+ if ( details?.proceduralSelectors?.length ) {
+ if ( self.ProceduralFiltererAPI === undefined ) {
+ self.ProceduralFiltererAPI = chrome.runtime.sendMessage({
+ what: 'injectCSSProceduralAPI'
+ }).catch(( ) => {
+ });
+ }
+ await self.ProceduralFiltererAPI;
+ self.customProceduralFiltererAPI = new self.ProceduralFiltererAPI();
+ const selectors = details.proceduralSelectors.map(a => JSON.parse(a));
+ const declaratives = selectors.filter(a => a.cssable);
+ if ( declaratives.length !== 0 ) {
+ self.customProceduralFiltererAPI.addDeclaratives(declaratives);
+ }
+ const procedurals = selectors.filter(a => !a.cssable);
+ if ( procedurals.length !== 0 ) {
+ self.customProceduralFiltererAPI.addProcedurals(procedurals);
+ }
}
- const procedurals = selectors.filter(a => !a.cssable);
- if ( procedurals.length !== 0 ) {
- self.customProceduralFiltererAPI.addProcedurals(procedurals);
+
+ if ( details?.plainSelectors?.length ) {
+ const selectors = details.plainSelectors;
+ self.cssAPI.insert(`${selectors.join(',\n')}{display:none!important;}`);
}
}
-if ( details?.plainSelectors?.length ) {
- const selectors = details.plainSelectors;
- self.addEventListener('pagereveal', ( ) => {
- chrome.runtime.sendMessage({
- what: 'insertCSS',
- css: `${selectors.join(',\n')}{display:none!important;}`,
- }).catch(( ) => {
- });
- });
+async function uBOL_cssUserStart() {
+ if ( self.cssUserPendingOp === undefined ) {
+ self.cssUserPendingOp = Promise.resolve();
+ }
+ self.cssUserPendingOp = self.cssUserPendingOp.then(uBOL_cssUserActivate);
+ await self.cssUserPendingOp;
+ if ( Boolean(self.customFilters) === false ) { return; }
+ self.removeEventListener('pagereveal', uBOL_cssUserStart);
}
-self.customFilters = details;
+await uBOL_cssUserStart();
+
+if ( self.customFilters ) { return; }
+self.addEventListener('pagereveal', uBOL_cssUserStart);
/******************************************************************************/
From 7cd56887ffa4dd7a131bdba038325f3fb0b11d1d Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Wed, 6 May 2026 12:01:19 -0400
Subject: [PATCH 005/375] [mv3] Improve contrast in dark mode
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/625
---
platform/mv3/extension/css/filtering-mode.css | 17 +++++++++--------
src/css/themes/default.css | 2 +-
2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/platform/mv3/extension/css/filtering-mode.css b/platform/mv3/extension/css/filtering-mode.css
index 2554bdc3ac385..fb27980b79ebe 100644
--- a/platform/mv3/extension/css/filtering-mode.css
+++ b/platform/mv3/extension/css/filtering-mode.css
@@ -1,6 +1,7 @@
:root {
--filtering-mode-button-size: 60px; /* should be multiple of 4 */
--filtering-mode-slider-width: calc(4 * var(--filtering-mode-button-size) + 3px);
+ --filtering-mode-slider-background: var(--surface-3);
}
.filteringModeSlider {
@@ -37,8 +38,8 @@
}
.filteringModeSlider[data-level="0"] .filteringModeButton > div {
- background-color: var(--surface-2);
- border-color: var(--surface-2);
+ background-color: var(--filtering-mode-slider-background);
+ border-color: var(--filtering-mode-slider-background);
}
.filteringModeSlider span[data-level] {
@@ -92,18 +93,18 @@
.filteringModeSlider[data-level="0"] span[data-level] {
- background-color: var(--surface-2);
- border-color: var(--surface-2);
+ background-color: var(--filtering-mode-slider-background);
+ border-color: var(--filtering-mode-slider-background);
}
.filteringModeSlider[data-level="1"] span[data-level]:nth-of-type(1) ~ span[data-level] {
- background-color: var(--surface-2);
- border-color: var(--surface-2);
+ background-color: var(--filtering-mode-slider-background);
+ border-color: var(--filtering-mode-slider-background);
}
.filteringModeSlider[data-level="2"] span[data-level]:nth-of-type(2) ~ span[data-level] {
- background-color: var(--surface-2);
- border-color: var(--surface-2);
+ background-color: var(--filtering-mode-slider-background);
+ border-color: var(--filtering-mode-slider-background);
}
.filteringModeSlider[data-level]:not(.moving) span[data-level]:hover {
diff --git a/src/css/themes/default.css b/src/css/themes/default.css
index 8a6378aa62124..c78b4a255c513 100644
--- a/src/css/themes/default.css
+++ b/src/css/themes/default.css
@@ -314,7 +314,7 @@
--elevation-up1-opacity: 12%;
--elevation-up2-opacity: 24%;
- --ink-rgb: var(--gray-95);
+ --ink-rgb: var(--gray-90);
--ink-0: white;
--ink-100: black;
From b91798c6f4a2872a15ca6cba3cbfb3045d0d8952 Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Wed, 6 May 2026 13:11:44 -0400
Subject: [PATCH 006/375] Improve `freeze-element-property` scriptlet
---
src/js/resources/prevent-innerHTML.js | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/js/resources/prevent-innerHTML.js b/src/js/resources/prevent-innerHTML.js
index 5c92748768975..1e14c2ae1742d 100644
--- a/src/js/resources/prevent-innerHTML.js
+++ b/src/js/resources/prevent-innerHTML.js
@@ -52,12 +52,15 @@ function freezeElementProperty(
const logPrefix = safe.makeLogPrefix('freeze-element-property', property, selector, pattern);
const matcher = safe.initPattern(pattern, { canNegate: true });
const owner = (( ) => {
- if ( Object.hasOwn(Element.prototype, property) ) {
- return Element.prototype;
+ if ( Object.hasOwn(HTMLScriptElement.prototype, property) ) {
+ return HTMLScriptElement.prototype;
}
if ( Object.hasOwn(HTMLElement.prototype, property) ) {
return HTMLElement.prototype;
}
+ if ( Object.hasOwn(Element.prototype, property) ) {
+ return Element.prototype;
+ }
if ( Object.hasOwn(Node.prototype, property) ) {
return Node.prototype;
}
From 6d227ad519512ac92369dee8b9cb4a7561dc6f08 Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Wed, 6 May 2026 13:14:21 -0400
Subject: [PATCH 007/375] Update changelog
---
CHANGELOG.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 84018c07ceb98..dcd8d0d6e796f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,4 @@
+- [Improve `freeze-element-property` scriptlet](https://github.com/gorhill/uBlock/commit/b91798c6f4)
- [Add support for network filter option `top=`](https://github.com/gorhill/uBlock/commit/aebc108e36)
- [Fix JS code extraction from web accessible resources](https://github.com/gorhill/uBlock/commit/a8bbd1a466)
- [Add `freeze-element-property` scriptlet](https://github.com/gorhill/uBlock/commit/05f01f6be4)
From afbb85c4bc6c831c76846a362024acb060d7fbb1 Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Wed, 6 May 2026 13:15:18 -0400
Subject: [PATCH 008/375] New revision for release candidate
---
dist/version | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dist/version b/dist/version
index f8cca60bd6d24..33d0a0c4e3497 100644
--- a/dist/version
+++ b/dist/version
@@ -1 +1 @@
-1.70.1.5
\ No newline at end of file
+1.70.1.100
\ No newline at end of file
From 27dbdb202eb701599fbbb11c51f6b3e43971630f Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Thu, 7 May 2026 08:39:52 -0400
Subject: [PATCH 009/375] [mv3] Fix regression when editing custom cosmetic
`#...` filter
Regression from:
https://github.com/gorhill/uBlock/commit/46852ebd6f
---
src/js/static-filtering-parser.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/js/static-filtering-parser.js b/src/js/static-filtering-parser.js
index 6dbc07aa94277..f8b1f583f629a 100644
--- a/src/js/static-filtering-parser.js
+++ b/src/js/static-filtering-parser.js
@@ -584,6 +584,7 @@ const astTemplates = {
type: NODE_TYPE_EXT_PATTERN_COSMETIC,
beg: 0,
end: 0,
+ register: true,
}],
}],
}],
From d05b1004fd1edb39a9c48873fd7294a9f1a6e288 Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Thu, 7 May 2026 08:57:14 -0400
Subject: [PATCH 010/375] Add `break-on-call` scriptlet to help investigate
filter issues
---
src/js/resources/scriptlets.js | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/src/js/resources/scriptlets.js b/src/js/resources/scriptlets.js
index b86d645a85747..175d4dac9fce6 100755
--- a/src/js/resources/scriptlets.js
+++ b/src/js/resources/scriptlets.js
@@ -1613,6 +1613,24 @@ function multiup() {
document.addEventListener('click', handler, { capture: true });
}
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'break-on-call.js',
+ fn: breakOnCall,
+ dependencies: [
+ 'proxy-apply.fn',
+ ],
+});
+function breakOnCall(target) {
+ proxyApplyFn(target, function fetch(context) {
+ debugger; // eslint-disable-line no-debugger
+ return context.reflect();
+ });
+}
+
+
+
/*******************************************************************************
From c2184441d887388d5747bcf8c3fc66a6f858ad11 Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Thu, 7 May 2026 09:15:49 -0400
Subject: [PATCH 011/375] [mv3] Improve handling of manual editing of custom
filters
This fixes the creation/removal of spurious intermediate custom
filters when manually editing.
---
platform/mv3/extension/js/filter-manager-ui.js | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/platform/mv3/extension/js/filter-manager-ui.js b/platform/mv3/extension/js/filter-manager-ui.js
index 8b46012e32178..0aa983237088a 100644
--- a/platform/mv3/extension/js/filter-manager-ui.js
+++ b/platform/mv3/extension/js/filter-manager-ui.js
@@ -96,10 +96,12 @@ async function removeSelectorsFromHostname(node) {
qsa$(hostnameNode, 'li.selector.removed:not([data-ugly=""])')
).map(a => a.dataset.ugly);
if ( selectors.length === 0 ) { return; }
+ dom.cl.add(dom.body, 'committing');
updateContentEditability(false);
await sendMessage({ what: 'removeCustomFilters', hostname, selectors });
await debounceRenderCustomFilters();
updateContentEditability(true);
+ dom.cl.remove(dom.body, 'committing');
}
async function unremoveSelectorsFromHostname(node) {
@@ -109,10 +111,12 @@ async function unremoveSelectorsFromHostname(node) {
if ( hostname === undefined ) { return; }
const selectors = selectorsFromNode(hostnameNode);
if ( selectors.length === 0 ) { return; }
+ dom.cl.add(dom.body, 'committing');
updateContentEditability(false);
await sendMessage({ what: 'addCustomFilters', hostname, selectors });
await debounceRenderCustomFilters();
updateContentEditability(true);
+ dom.cl.remove(dom.body, 'committing');
}
/******************************************************************************/
@@ -281,13 +285,13 @@ async function onHostnameChanged(target, before, after) {
return;
}
+ dom.cl.add(dom.body, 'committing');
// Remove old hostname from storage
if ( hostnameNode.dataset.ugly ) {
await sendMessage({ what: 'removeAllCustomFilters',
hostname: hostnameNode.dataset.ugly,
});
}
-
// Add selectors under new hostname to storage
hostnameNode.dataset.ugly = uglyAfter;
hostnameNode.dataset.pretty = after;
@@ -295,8 +299,8 @@ async function onHostnameChanged(target, before, after) {
hostname: hostnameFromNode(target),
selectors: selectorsFromNode(target),
});
-
await debounceRenderCustomFilters();
+ dom.cl.remove(dom.body, 'committing');
}
async function onSelectorChanged(target, before, after) {
@@ -312,14 +316,13 @@ async function onSelectorChanged(target, before, after) {
return;
}
+ dom.cl.add(dom.body, 'committing');
const hostname = hostnameFromNode(target);
-
// Remove old selector from storage
await sendMessage({ what: 'removeCustomFilters',
hostname,
selectors: [ selectorNode.dataset.ugly ],
});
-
// Add new selector to storage
selectorNode.dataset.ugly = ugly;
selectorNode.dataset.pretty = pretty;
@@ -327,8 +330,8 @@ async function onSelectorChanged(target, before, after) {
hostname,
selectors: [ ugly ],
});
-
await debounceRenderCustomFilters();
+ dom.cl.remove(dom.body, 'committing');
}
async function onTextChanged(target) {
@@ -601,6 +604,7 @@ async function start() {
dom.on('section[data-pane="filters"] [data-i18n="exportButton"]', 'click', exportToFile);
browser.storage.local.onChanged.addListener((changes, area) => {
+ if ( dom.cl.has(dom.body, 'committing') ) { return; }
if ( area !== undefined && area !== 'local' ) { return; }
if ( Object.keys(changes).some(a => a.startsWith('site.')) ) {
debounceRenderCustomFilters();
From 90e8212304203c29205bd3a5a48ab8f511a20a19 Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Sat, 9 May 2026 10:50:22 -0400
Subject: [PATCH 012/375] [mv3] Fix various quirks when previewing custom
filters at creation time
---
.../js/scripting/css-procedural-api.js | 23 +++++++++++++++----
platform/mv3/extension/js/scripting/picker.js | 7 +++++-
2 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/platform/mv3/extension/js/scripting/css-procedural-api.js b/platform/mv3/extension/js/scripting/css-procedural-api.js
index 16c049de92667..45656d3a35948 100644
--- a/platform/mv3/extension/js/scripting/css-procedural-api.js
+++ b/platform/mv3/extension/js/scripting/css-procedural-api.js
@@ -756,6 +756,7 @@ class ProceduralFilterer {
self.ProceduralFiltererAPI = class {
constructor() {
+ this.cssSheets = new Set();
this.proceduralFilterer = null;
this.domObserver = null;
}
@@ -766,10 +767,18 @@ self.ProceduralFiltererAPI = class {
this.domObserver.disconnect();
this.domObserver = null;
}
+ const promises = [];
if ( this.proceduralFilterer ) {
- await this.proceduralFilterer.reset();
+ promises.push(this.proceduralFilterer.reset());
this.proceduralFilterer = null;
}
+ for ( const css of this.cssSheets ) {
+ promises.push(
+ chrome.runtime.sendMessage({ what: 'removeCSS', css }).catch(( ) => { })
+ );
+ }
+ this.cssSheets.clear();
+ await Promise.all(promises);
}
addDeclaratives(selectors) {
@@ -806,9 +815,11 @@ self.ProceduralFiltererAPI = class {
if ( ruleText === undefined ) { continue; }
sheetText.push(ruleText);
}
- if ( sheetText.length !== 0 ) {
- self.cssAPI.insert(sheetText.join('\n'));
- }
+ if ( sheetText.length === 0 ) { return; }
+ const cssSheet = sheetText.join('\n');
+ if ( this.cssSheets.has(cssSheet) ) { return; }
+ this.cssSheets.add(cssSheet);
+ self.cssAPI.insert(cssSheet);
}
addProcedurals(selectors) {
@@ -827,6 +838,10 @@ self.ProceduralFiltererAPI = class {
qsa(selector) {
const o = JSON.parse(selector);
+ if ( o.cssable ) {
+ const selector = o.selector.replace(/::[a-z()-]+$/, '');
+ return Array.from(document.querySelectorAll(selector));
+ }
const pselector = new PSelectorRoot(null, o);
return pselector.exec();
}
diff --git a/platform/mv3/extension/js/scripting/picker.js b/platform/mv3/extension/js/scripting/picker.js
index 775e95f0ff9cc..b049edc0627e3 100644
--- a/platform/mv3/extension/js/scripting/picker.js
+++ b/platform/mv3/extension/js/scripting/picker.js
@@ -257,7 +257,12 @@ async function previewSelector(selector) {
if ( self.pickerProceduralFilteringAPI === undefined ) {
self.pickerProceduralFilteringAPI = new self.ProceduralFiltererAPI();
}
- self.pickerProceduralFilteringAPI.addProcedurals([ JSON.parse(selector) ]);
+ const pselector = JSON.parse(selector);
+ if ( pselector.cssable ) {
+ self.pickerProceduralFilteringAPI.addDeclaratives([ pselector ]);
+ } else {
+ self.pickerProceduralFilteringAPI.addProcedurals([ pselector ]);
+ }
return;
}
previewedCSS = `${selector}{display:none!important;}`;
From cc565042735e6326290f4c63e0d7db84b88cd8ab Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Sat, 9 May 2026 12:31:09 -0400
Subject: [PATCH 013/375] [mv3] Fix potentially residual user styles when
previewing custom filters
In preview mode, quickly moving the slider back and forth could cause
unwanted injected user stylesheets to be left active in the page,
potentially leaving the page with many missing elements.
The fix is to ensures previously injected user stylesheets related to
preview are removed before injecting new ones.
---
platform/mv3/extension/js/scripting/picker.js | 32 ++++++++++++-------
1 file changed, 20 insertions(+), 12 deletions(-)
diff --git a/platform/mv3/extension/js/scripting/picker.js b/platform/mv3/extension/js/scripting/picker.js
index b049edc0627e3..5172d53ccaa60 100644
--- a/platform/mv3/extension/js/scripting/picker.js
+++ b/platform/mv3/extension/js/scripting/picker.js
@@ -238,19 +238,26 @@ const excludedSelectors = [
/******************************************************************************/
async function previewSelector(selector) {
- if ( selector === previewedSelector ) { return; }
- if ( previewedSelector !== '' ) {
- if ( previewedSelector.startsWith('{') ) {
+ previewSelector.promise = previewSelector.promise.then(( ) =>
+ previewSelector.commit(selector)
+ );
+ return previewSelector.promise;
+}
+
+previewSelector.commit = async function(selector) {
+ if ( selector === previewSelector.selector ) { return; }
+ if ( previewSelector.selector !== '' ) {
+ if ( previewSelector.selector.startsWith('{') ) {
if ( self.pickerProceduralFilteringAPI ) {
await self.pickerProceduralFilteringAPI.reset();
}
}
- if ( previewedCSS !== '' ) {
- await ubolOverlay.sendMessage({ what: 'removeCSS', css: previewedCSS });
- previewedCSS = '';
+ if ( previewSelector.css !== '' ) {
+ await ubolOverlay.sendMessage({ what: 'removeCSS', css: previewSelector.css });
+ previewSelector.css = '';
}
}
- previewedSelector = selector || '';
+ previewSelector.selector = selector || '';
if ( selector === '' ) { return; }
if ( selector.startsWith('{') ) {
if ( self.ProceduralFiltererAPI === undefined ) { return; }
@@ -265,12 +272,13 @@ async function previewSelector(selector) {
}
return;
}
- previewedCSS = `${selector}{display:none!important;}`;
- await ubolOverlay.sendMessage({ what: 'insertCSS', css: previewedCSS });
-}
+ previewSelector.css = `${selector}{display:none!important;}`;
+ await ubolOverlay.sendMessage({ what: 'insertCSS', css: previewSelector.css });
+};
-let previewedSelector = '';
-let previewedCSS = '';
+previewSelector.promise = Promise.resolve();
+previewSelector.selector = '';
+previewSelector.css = '';
/******************************************************************************/
From 28ed5c212a0e34a1b82f60f7f79091fb02f7bd32 Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Mon, 11 May 2026 12:39:06 -0400
Subject: [PATCH 014/375] Import translation work from
https://crowdin.com/project/ublock
---
platform/mv3/extension/_locales/cs/messages.json | 2 +-
platform/mv3/extension/_locales/fr/messages.json | 2 +-
platform/mv3/extension/_locales/it/messages.json | 4 ++--
platform/mv3/extension/_locales/sq/messages.json | 2 +-
src/_locales/it/messages.json | 8 ++++----
src/_locales/sq/messages.json | 2 +-
6 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/platform/mv3/extension/_locales/cs/messages.json b/platform/mv3/extension/_locales/cs/messages.json
index ebf8afd67a44b..54a6a01c97188 100644
--- a/platform/mv3/extension/_locales/cs/messages.json
+++ b/platform/mv3/extension/_locales/cs/messages.json
@@ -92,7 +92,7 @@
"description": "Text label heading the import/export area of custom filters"
},
"customFiltersImportTextareaPlaceholder": {
- "message": "Vložte sem konkrétní kosmetické filtry, které chcete přidat",
+ "message": "Vložte sem konkrétní kosmetické/scriplet filtry, které chcete přidat",
"description": "Placeholder text which describes the purpose of the textarea widget"
},
"aboutChangelog": {
diff --git a/platform/mv3/extension/_locales/fr/messages.json b/platform/mv3/extension/_locales/fr/messages.json
index f68a7b1e8f0e5..530b988b3fa20 100644
--- a/platform/mv3/extension/_locales/fr/messages.json
+++ b/platform/mv3/extension/_locales/fr/messages.json
@@ -92,7 +92,7 @@
"description": "Text label heading the import/export area of custom filters"
},
"customFiltersImportTextareaPlaceholder": {
- "message": "Coller ici les filtres cosmétiques spécifiques à ajouter",
+ "message": "Coller ici les filtres cosmétiques/scriptlets spécifiques à ajouter",
"description": "Placeholder text which describes the purpose of the textarea widget"
},
"aboutChangelog": {
diff --git a/platform/mv3/extension/_locales/it/messages.json b/platform/mv3/extension/_locales/it/messages.json
index 0390bcb8766a1..129b52efdeb39 100644
--- a/platform/mv3/extension/_locales/it/messages.json
+++ b/platform/mv3/extension/_locales/it/messages.json
@@ -4,7 +4,7 @@
"description": "extension name."
},
"extShortDesc": {
- "message": "Un efficiente bloccatore di contenuti. Blocca annunci, tracker, minatori e altro ancora subito dopo l'installazione.",
+ "message": "Un efficiente blocca-contenuti. Blocca inserzioni, tracciatori, minatori e altro ancora subito dopo l'installazione.",
"description": "this will be in the Chrome web store: must be 132 characters or less"
},
"perRulesetStats": {
@@ -292,7 +292,7 @@
"description": "Text informing about what is causing the page to be blocked"
},
"strictblockRedirectSentence1": {
- "message": "La pagina bloccata vuole reindirizzare a un altro sito. Se scegli di procedere, navigherai direttamente su: {{url}}",
+ "message": "La pagina bloccata tenta di reindirizzare a un altro sito. Se scegli di procedere, navigherai direttamente verso: {{url}}",
"description": "Text warning about an incoming redirect"
},
"strictblockNoParamsPrompt": {
diff --git a/platform/mv3/extension/_locales/sq/messages.json b/platform/mv3/extension/_locales/sq/messages.json
index 66b5ca4eef6a6..4050c916ae24b 100644
--- a/platform/mv3/extension/_locales/sq/messages.json
+++ b/platform/mv3/extension/_locales/sq/messages.json
@@ -92,7 +92,7 @@
"description": "Text label heading the import/export area of custom filters"
},
"customFiltersImportTextareaPlaceholder": {
- "message": "Filtrat specifikë të personalizuar kalohen këtu",
+ "message": "Filtrat specifikë kozmetikë/skriptet shtohen këtu",
"description": "Placeholder text which describes the purpose of the textarea widget"
},
"aboutChangelog": {
diff --git a/src/_locales/it/messages.json b/src/_locales/it/messages.json
index e5c14c07155f2..1ee64d9cc02e4 100644
--- a/src/_locales/it/messages.json
+++ b/src/_locales/it/messages.json
@@ -444,7 +444,7 @@
"description": "English: Parse and enforce Adblock+ element hiding filters."
},
"3pParseAllABPHideFiltersInfo": {
- "message": "\nI filtri cosmetici servono a nascondere gli elementi in una pagina web che sono considerati visivamente fastidiosi e che non possono essere bloccati dai motori di filtraggio basati sulle richieste di rete.",
+ "message": "I filtri cosmetici servono a nascondere elementi in una pagina web che sono considerati visivamente fastidiosi e che non possono essere bloccati dai motori di filtraggio basati sulle richieste di rete.",
"description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
},
"3pIgnoreGenericCosmeticFilters": {
@@ -536,7 +536,7 @@
"description": "used as a tooltip for error icon beside a list"
},
"1pTrustWarning": {
- "message": "Non aggiungere filtri da fonti non affidabili.",
+ "message": "Non aggiungere filtri da fonti non attendibili.",
"description": "Warning against copy-pasting filters from random sources"
},
"1pEnableMyFiltersLabel": {
@@ -1176,7 +1176,7 @@
"description": "Button text to navigate to the blocked page"
},
"docblockedRedirectPrompt": {
- "message": "La pagina bloccata vuole reindirizzare a un altro sito. Se scegli di procedere, navigherai direttamente a: {{url}}",
+ "message": "La pagina bloccata tenta di reindirizzare a un altro sito. Se scegli di procedere, navigherai direttamente verso: {{url}}",
"description": "Text warning about an incoming redirect"
},
"docblockedReasonLabel": {
@@ -1304,7 +1304,7 @@
"description": "Summary of number of errors as reported by the linter "
},
"unprocessedRequestTooltip": {
- "message": "Non è stato effettuato correttamente il filtraggio all'avvio del browser.\nRicarica la pagina per garantire un filtraggio adeguato.",
+ "message": "Non è stato effettuato correttamente il filtraggio all'avvio del browser. Ricarica la pagina per garantire un filtraggio adeguato.",
"description": "A warning which will appear in the popup panel if needed"
},
"dummy": {
diff --git a/src/_locales/sq/messages.json b/src/_locales/sq/messages.json
index 800eb16b18da9..1514304f5a604 100644
--- a/src/_locales/sq/messages.json
+++ b/src/_locales/sq/messages.json
@@ -60,7 +60,7 @@
"description": "appears as tab name in dashboard"
},
"assetViewerPageName": {
- "message": "uBlock₀ — Ilustruesi i aseteve",
+ "message": "uBlock₀ — Treguesi i aseteve",
"description": "Title for the asset viewer page"
},
"advancedSettingsPageName": {
From 4a738e226f17ba8b854bc411871607704e46aad8 Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Mon, 11 May 2026 12:39:38 -0400
Subject: [PATCH 015/375] New revision for stable release
---
dist/version | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dist/version b/dist/version
index 33d0a0c4e3497..f474f5a7da72f 100644
--- a/dist/version
+++ b/dist/version
@@ -1 +1 @@
-1.70.1.100
\ No newline at end of file
+1.71.0
\ No newline at end of file
From 8574d7162d2a7698876b2e02b01edcd307525e32 Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Mon, 11 May 2026 13:59:40 -0400
Subject: [PATCH 016/375] [mv3] Allow custom cosmetic filters in embedded
contexts
Related issue:
https://github.com/uBlockOrigin/uAssets/issues/32894
---
platform/mv3/extension/js/filter-manager.js | 2 ++
1 file changed, 2 insertions(+)
diff --git a/platform/mv3/extension/js/filter-manager.js b/platform/mv3/extension/js/filter-manager.js
index 8778acced5f47..146cdf33fe992 100644
--- a/platform/mv3/extension/js/filter-manager.js
+++ b/platform/mv3/extension/js/filter-manager.js
@@ -204,6 +204,8 @@ export async function registerCustomFilters(context) {
id: 'css-user',
js: [ '/js/scripting/css-user.js' ],
matches: matchesFromHostnames(hostnames),
+ allFrames: true,
+ matchOriginAsFallback: true,
runAt: 'document_start',
};
if ( excludeHostnames.length !== 0 ) {
From 9a75400dcd0e4f1fa075eac276596acfbf9f2ebd Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Tue, 12 May 2026 08:29:06 -0400
Subject: [PATCH 017/375] Make Firefox dev build auto-update
---
dist/firefox/updates.json | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dist/firefox/updates.json b/dist/firefox/updates.json
index cb26b611cb849..d6db3aae47922 100644
--- a/dist/firefox/updates.json
+++ b/dist/firefox/updates.json
@@ -3,13 +3,13 @@
"uBlock0@raymondhill.net": {
"updates": [
{
- "version": "1.70.1.0",
+ "version": "1.70.1.100",
"browser_specific_settings": {
"gecko": {
"strict_min_version": "115.0"
}
},
- "update_link": "https://github.com/gorhill/uBlock/releases/download/1.70.1b0/uBlock0_1.70.1b0.firefox.signed.xpi"
+ "update_link": "https://github.com/gorhill/uBlock/releases/download/1.70.1rc0/uBlock0_1.70.1rc0.firefox.signed.xpi"
}
]
}
From 1083daaf8261d25dfe8caf22bdad4d828ba7a791 Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Tue, 12 May 2026 11:06:39 -0400
Subject: [PATCH 018/375] [mv3] Bring popup blocking out of experimental status
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/632
Popup blocking will be enabled by default, and is active when default
filtering mode is optimal or complete.
Users can wholly disable popup blocking in the dashboard.
---
.../mv3/extension/_locales/en/messages.json | 8 ++++++
platform/mv3/extension/dashboard.html | 1 +
platform/mv3/extension/js/background.js | 27 ++++++++++++++++---
platform/mv3/extension/js/config.js | 19 +++++++++++--
platform/mv3/extension/js/prevent-popup.js | 8 +++---
platform/mv3/extension/js/settings.js | 19 +++++++++++++
platform/mv3/extension/js/strictblock.js | 7 +++--
platform/mv3/extension/js/troubleshooting.js | 12 ++++++---
8 files changed, 85 insertions(+), 16 deletions(-)
diff --git a/platform/mv3/extension/_locales/en/messages.json b/platform/mv3/extension/_locales/en/messages.json
index f6d9c00d5ba7d..586a45aed0fae 100644
--- a/platform/mv3/extension/_locales/en/messages.json
+++ b/platform/mv3/extension/_locales/en/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/dashboard.html b/platform/mv3/extension/dashboard.html
index 5300d62158fb5..5d958fe5cb113 100644
--- a/platform/mv3/extension/dashboard.html
+++ b/platform/mv3/extension/dashboard.html
@@ -97,6 +97,7 @@
+
diff --git a/platform/mv3/extension/js/background.js b/platform/mv3/extension/js/background.js
index 6b7a0b550e452..c5ed83d32a9fd 100644
--- a/platform/mv3/extension/js/background.js
+++ b/platform/mv3/extension/js/background.js
@@ -209,6 +209,17 @@ onPermissionsChanged.pending = [];
/******************************************************************************/
+async function setPopupBlockMode(state) {
+ state = state === true;
+ if ( state === rulesetConfig.popupBlockMode ) { return; }
+ rulesetConfig.popupBlockMode = state;
+ await saveRulesetConfig();
+ await registerInjectables();
+ broadcastMessage({ popupBlockMode: rulesetConfig.popupBlockMode });
+}
+
+/******************************************************************************/
+
function setDeveloperMode(state) {
rulesetConfig.developerMode = state === true;
toggleDeveloperMode(rulesetConfig.developerMode);
@@ -335,12 +346,17 @@ function onMessage(request, sender, callback) {
developerMode: defaultConfig.developerMode,
showBlockedCount: defaultConfig.showBlockedCount,
strictBlockMode: defaultConfig.strictBlockMode,
+ popupBlockMode: defaultConfig.popupBlockMode,
rulesets,
filteringModes: Object.assign(defaultFilteringModes),
});
});
return true;
+ case 'getCurrentConfig':
+ callback(rulesetConfig);
+ break;
+
case 'getOptionsPageData':
Promise.all([
hasBroadHostPermissions(),
@@ -369,6 +385,7 @@ function onMessage(request, sender, callback) {
showBlockedCount: rulesetConfig.showBlockedCount,
canShowBlockedCount,
strictBlockMode: rulesetConfig.strictBlockMode,
+ popupBlockMode: rulesetConfig.popupBlockMode,
firstRun: process.firstRun,
isSideloaded,
developerMode: rulesetConfig.developerMode,
@@ -410,10 +427,6 @@ function onMessage(request, sender, callback) {
});
return true;
- case 'getShowBlockedCount':
- callback(rulesetConfig.showBlockedCount);
- break;
-
case 'setShowBlockedCount':
rulesetConfig.showBlockedCount = request.state && true || false;
if ( canShowBlockedCount ) {
@@ -434,6 +447,12 @@ function onMessage(request, sender, callback) {
});
return true;
+ case 'setPopupBlockMode':
+ setPopupBlockMode(request.state).then(( ) => {
+ callback();
+ });
+ return true;
+
case 'setDeveloperMode':
setDeveloperMode(request.state).then(( ) => {
callback();
diff --git a/platform/mv3/extension/js/config.js b/platform/mv3/extension/js/config.js
index 988223a758fb9..48abcd493cb2a 100644
--- a/platform/mv3/extension/js/config.js
+++ b/platform/mv3/extension/js/config.js
@@ -33,6 +33,7 @@ export const rulesetConfig = {
autoReload: true,
showBlockedCount: true,
strictBlockMode: webextFlavor !== 'safari',
+ popupBlockMode: true,
developerMode: false,
hasBroadHostPermissions: true,
};
@@ -44,9 +45,11 @@ export const process = {
wakeupRun: false,
};
+let pendingOpPromise = Promise.resolve();
+
/******************************************************************************/
-export async function loadRulesetConfig() {
+async function _loadRulesetConfig() {
const sessionData = await sessionRead('rulesetConfig');
if ( sessionData ) {
Object.assign(rulesetConfig, sessionData);
@@ -64,7 +67,19 @@ export async function loadRulesetConfig() {
process.firstRun = true;
}
-export async function saveRulesetConfig() {
+async function _saveRulesetConfig() {
sessionWrite('rulesetConfig', rulesetConfig);
return localWrite('rulesetConfig', rulesetConfig);
}
+
+/******************************************************************************/
+
+export function loadRulesetConfig() {
+ pendingOpPromise = pendingOpPromise.then(_loadRulesetConfig);
+ return pendingOpPromise;
+}
+
+export function saveRulesetConfig() {
+ pendingOpPromise = pendingOpPromise.then(_saveRulesetConfig);
+ return pendingOpPromise;
+}
diff --git a/platform/mv3/extension/js/prevent-popup.js b/platform/mv3/extension/js/prevent-popup.js
index 3dd8ca650b3d5..df68f6dac6d7a 100644
--- a/platform/mv3/extension/js/prevent-popup.js
+++ b/platform/mv3/extension/js/prevent-popup.js
@@ -20,12 +20,14 @@
*/
import { matchesFromHostnames } from './utils.js';
+import { rulesetConfig } from './config.js';
/******************************************************************************/
// https://github.com/uBlockOrigin/uBOL-home/issues/632
export async function registerPreventPopup(context) {
+ if ( rulesetConfig.popupBlockMode !== true ) { return; }
const js = [];
for ( const { id, popups } of context.rulesetsDetails ) {
if ( popups === undefined ) { continue; }
@@ -40,11 +42,11 @@ export async function registerPreventPopup(context) {
const { none, basic, optimal, complete } = context.filteringModeDetails;
let matches = [];
let excludeMatches = [];
- if ( complete.has('all-urls') ) {
+ if ( complete.has('all-urls') || optimal.has('all-urls') ) {
matches = [ '*' ];
- excludeMatches = [ ...none, ...basic, ...optimal ];
+ excludeMatches = [ ...none, ...basic ];
} else {
- matches = [ ...complete ];
+ matches = [ ...complete, ...optimal ];
}
if ( matches.length === 0 ) { return; }
diff --git a/platform/mv3/extension/js/settings.js b/platform/mv3/extension/js/settings.js
index 51d9de498c8ca..7a63b4f5e8a4b 100644
--- a/platform/mv3/extension/js/settings.js
+++ b/platform/mv3/extension/js/settings.js
@@ -67,6 +67,11 @@ function renderWidgets() {
dom.attr(input, 'disabled', canStrictBlock ? null : '');
}
+ {
+ const input = qs$('#popupBlockMode input[type="checkbox"]');
+ input.checked = cachedRulesetData.popupBlockMode;
+ }
+
{
const state = Boolean(cachedRulesetData.developerMode) &&
cachedRulesetData.disabledFeatures?.includes('develop') !== true;
@@ -213,6 +218,13 @@ dom.on('#strictBlockMode input[type="checkbox"]', 'change', ev => {
});
});
+dom.on('#popupBlockMode input[type="checkbox"]', 'change', ev => {
+ sendMessage({
+ what: 'setPopupBlockMode',
+ state: ev.target.checked,
+ });
+});
+
dom.on('#developerMode input[type="checkbox"]', 'change', ev => {
const state = ev.target.checked;
sendMessage({ what: 'setDeveloperMode', state });
@@ -279,6 +291,13 @@ listen.onmessage = ev => {
}
}
+ if ( message.popupBlockMode !== undefined ) {
+ if ( message.popupBlockMode !== local.popupBlockMode ) {
+ local.popupBlockMode = message.popupBlockMode;
+ render = true;
+ }
+ }
+
if ( message.developerMode !== undefined ) {
if ( message.developerMode !== local.developerMode ) {
local.developerMode = message.developerMode;
diff --git a/platform/mv3/extension/js/strictblock.js b/platform/mv3/extension/js/strictblock.js
index b083f4bfaa19a..e7d9a83f65d63 100644
--- a/platform/mv3/extension/js/strictblock.js
+++ b/platform/mv3/extension/js/strictblock.js
@@ -109,12 +109,11 @@ function fragmentFromTemplate(template, placeholder, text, details) {
// Enforce popup filters
(async ( ) => {
- const filteringMode = await sendMessage({
- what: 'getFilteringMode',
- hostname: toURL.hostname,
+ const currentConfig = await sendMessage({
+ what: 'getCurrentConfig',
});
// Enforce popup filtering in complete mode only
- if ( filteringMode < 3 ) { return; }
+ if ( currentConfig.popupBlockingMode !== true ) { return; }
const rulesetDetails = await rulesetDetailsPromise;
const toImport = [];
for ( const details of rulesetDetails ) {
diff --git a/platform/mv3/extension/js/troubleshooting.js b/platform/mv3/extension/js/troubleshooting.js
index 4129ebb38638c..d9332e1064b30 100644
--- a/platform/mv3/extension/js/troubleshooting.js
+++ b/platform/mv3/extension/js/troubleshooting.js
@@ -54,23 +54,23 @@ export async function getTroubleshootingInfo(details) {
const [
platformInfo,
defaultConfig,
+ currentConfig,
enabledRulesets,
rulesetDetails,
defaultMode,
userRules,
consoleOutput,
- showBlockedCount,
registeredScripts,
hasOmnipotence,
] = await Promise.all([
runtime.getPlatformInfo(),
sendMessage({ what: 'getDefaultConfig' }),
+ sendMessage({ what: 'getCurrentConfig' }),
sendMessage({ what: 'getEnabledRulesets' }),
sendMessage({ what: 'getRulesetDetails' }).then(a => new Map(a.map(a => [ a.id, a ]))),
sendMessage({ what: 'getDefaultFilteringMode' }),
sendMessage({ what: 'getEffectiveUserRules' }),
sendMessage({ what: 'getConsoleOutput' }),
- sendMessage({ what: 'getShowBlockedCount' }),
sendMessage({ what: 'getRegisteredContentScripts' }),
sendMessage({ what: 'hasBroadHostPermissions' }),
]);
@@ -113,9 +113,15 @@ export async function getTroubleshootingInfo(details) {
filtering,
permission: hasOmnipotence ? 'all' : 'ask',
};
+ if ( currentConfig.strictBlockMode !== defaultConfig.strictBlockMode ) {
+ config.strictblock = currentConfig.strictBlockMode;
+ }
+ if ( currentConfig.popupBlockMode !== defaultConfig.popupBlockMode ) {
+ config.popupblock = currentConfig.popupBlockMode;
+ }
if ( details?.tabId ) {
let badge = '?';
- if ( showBlockedCount ) {
+ if ( currentConfig.showBlockedCount ) {
badge = await browser.action.getBadgeText({ tabId: details.tabId });
}
if ( badge ) {
From 9e8c02ce474b4d66e92d0b6a5f137bfaad37e696 Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Tue, 12 May 2026 11:13:15 -0400
Subject: [PATCH 019/375] Import translation work from
https://crowdin.com/project/ublock
---
platform/mv3/extension/_locales/ar/messages.json | 8 ++++++++
platform/mv3/extension/_locales/az/messages.json | 8 ++++++++
platform/mv3/extension/_locales/be/messages.json | 8 ++++++++
platform/mv3/extension/_locales/bg/messages.json | 8 ++++++++
platform/mv3/extension/_locales/bn/messages.json | 8 ++++++++
platform/mv3/extension/_locales/br_FR/messages.json | 8 ++++++++
platform/mv3/extension/_locales/bs/messages.json | 8 ++++++++
platform/mv3/extension/_locales/ca/messages.json | 8 ++++++++
platform/mv3/extension/_locales/cs/messages.json | 8 ++++++++
platform/mv3/extension/_locales/cv/messages.json | 8 ++++++++
platform/mv3/extension/_locales/cy/messages.json | 8 ++++++++
platform/mv3/extension/_locales/da/messages.json | 8 ++++++++
platform/mv3/extension/_locales/de/messages.json | 8 ++++++++
platform/mv3/extension/_locales/el/messages.json | 8 ++++++++
platform/mv3/extension/_locales/en_GB/messages.json | 8 ++++++++
platform/mv3/extension/_locales/eo/messages.json | 8 ++++++++
platform/mv3/extension/_locales/es/messages.json | 8 ++++++++
platform/mv3/extension/_locales/et/messages.json | 8 ++++++++
platform/mv3/extension/_locales/eu/messages.json | 8 ++++++++
platform/mv3/extension/_locales/fa/messages.json | 8 ++++++++
platform/mv3/extension/_locales/fi/messages.json | 8 ++++++++
platform/mv3/extension/_locales/fil/messages.json | 8 ++++++++
platform/mv3/extension/_locales/fr/messages.json | 8 ++++++++
platform/mv3/extension/_locales/fy/messages.json | 8 ++++++++
platform/mv3/extension/_locales/gl/messages.json | 8 ++++++++
platform/mv3/extension/_locales/gu/messages.json | 8 ++++++++
platform/mv3/extension/_locales/he/messages.json | 8 ++++++++
platform/mv3/extension/_locales/hi/messages.json | 8 ++++++++
platform/mv3/extension/_locales/hr/messages.json | 8 ++++++++
platform/mv3/extension/_locales/hu/messages.json | 8 ++++++++
platform/mv3/extension/_locales/hy/messages.json | 8 ++++++++
platform/mv3/extension/_locales/id/messages.json | 8 ++++++++
platform/mv3/extension/_locales/it/messages.json | 8 ++++++++
platform/mv3/extension/_locales/ja/messages.json | 8 ++++++++
platform/mv3/extension/_locales/ka/messages.json | 8 ++++++++
platform/mv3/extension/_locales/kk/messages.json | 8 ++++++++
platform/mv3/extension/_locales/kn/messages.json | 8 ++++++++
platform/mv3/extension/_locales/ko/messages.json | 8 ++++++++
platform/mv3/extension/_locales/lt/messages.json | 8 ++++++++
platform/mv3/extension/_locales/lv/messages.json | 8 ++++++++
platform/mv3/extension/_locales/mk/messages.json | 8 ++++++++
platform/mv3/extension/_locales/ml/messages.json | 8 ++++++++
platform/mv3/extension/_locales/mr/messages.json | 8 ++++++++
platform/mv3/extension/_locales/ms/messages.json | 8 ++++++++
platform/mv3/extension/_locales/nb/messages.json | 8 ++++++++
platform/mv3/extension/_locales/nl/messages.json | 8 ++++++++
platform/mv3/extension/_locales/oc/messages.json | 8 ++++++++
platform/mv3/extension/_locales/pa/messages.json | 8 ++++++++
platform/mv3/extension/_locales/pl/messages.json | 8 ++++++++
platform/mv3/extension/_locales/pt_BR/messages.json | 8 ++++++++
platform/mv3/extension/_locales/pt_PT/messages.json | 8 ++++++++
platform/mv3/extension/_locales/ro/messages.json | 8 ++++++++
platform/mv3/extension/_locales/ru/messages.json | 8 ++++++++
platform/mv3/extension/_locales/si/messages.json | 8 ++++++++
platform/mv3/extension/_locales/sk/messages.json | 8 ++++++++
platform/mv3/extension/_locales/sl/messages.json | 8 ++++++++
platform/mv3/extension/_locales/so/messages.json | 8 ++++++++
platform/mv3/extension/_locales/sq/messages.json | 8 ++++++++
platform/mv3/extension/_locales/sr/messages.json | 8 ++++++++
platform/mv3/extension/_locales/sv/messages.json | 8 ++++++++
platform/mv3/extension/_locales/sw/messages.json | 8 ++++++++
platform/mv3/extension/_locales/ta/messages.json | 8 ++++++++
platform/mv3/extension/_locales/te/messages.json | 8 ++++++++
platform/mv3/extension/_locales/th/messages.json | 8 ++++++++
platform/mv3/extension/_locales/tr/messages.json | 8 ++++++++
platform/mv3/extension/_locales/uk/messages.json | 8 ++++++++
platform/mv3/extension/_locales/ur/messages.json | 8 ++++++++
platform/mv3/extension/_locales/vi/messages.json | 8 ++++++++
platform/mv3/extension/_locales/zh_CN/messages.json | 8 ++++++++
platform/mv3/extension/_locales/zh_TW/messages.json | 8 ++++++++
70 files changed, 560 insertions(+)
diff --git a/platform/mv3/extension/_locales/ar/messages.json b/platform/mv3/extension/_locales/ar/messages.json
index d8ff28acdd5b5..1730f0bcea05a 100644
--- a/platform/mv3/extension/_locales/ar/messages.json
+++ b/platform/mv3/extension/_locales/ar/messages.json
@@ -255,6 +255,14 @@
"message": "سيتم حظر الانتقال إلى المواقع غير المرغوب فيها، وسيُعرض عليك خيار المتابعة.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "وضع المطور",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/az/messages.json b/platform/mv3/extension/_locales/az/messages.json
index c2a36cb32b508..3fd9f399db1eb 100644
--- a/platform/mv3/extension/_locales/az/messages.json
+++ b/platform/mv3/extension/_locales/az/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/be/messages.json b/platform/mv3/extension/_locales/be/messages.json
index b722c0f0233a0..ce80c6fc01488 100644
--- a/platform/mv3/extension/_locales/be/messages.json
+++ b/platform/mv3/extension/_locales/be/messages.json
@@ -255,6 +255,14 @@
"message": "Пераход да патэнцыйна непажаданых сайтаў будзе заблакаваны, і вам будзе прапанавана магчымасць працягнуць.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Рэжым распрацоўніка",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/bg/messages.json b/platform/mv3/extension/_locales/bg/messages.json
index 3a216e0a30ec2..74d2a0b9a22dc 100644
--- a/platform/mv3/extension/_locales/bg/messages.json
+++ b/platform/mv3/extension/_locales/bg/messages.json
@@ -255,6 +255,14 @@
"message": "Навигацията към потенциално нежелани сайтове ще бъде блокирана и ще ви бъде предложена възможността да продължите.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Режим за програмисти",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/bn/messages.json b/platform/mv3/extension/_locales/bn/messages.json
index 187d12dae7d6e..9be9b061e707e 100644
--- a/platform/mv3/extension/_locales/bn/messages.json
+++ b/platform/mv3/extension/_locales/bn/messages.json
@@ -255,6 +255,14 @@
"message": "সম্ভাব্য অযাচিত ওয়েবসাইট অবরুদ্ধ করা হবে, আর সেখানে আগানোর উপায় দেওয়া থাকবে।",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "ডেভেলপার মোড",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/br_FR/messages.json b/platform/mv3/extension/_locales/br_FR/messages.json
index 19e8805164c5a..3ee9fbf1d78c3 100644
--- a/platform/mv3/extension/_locales/br_FR/messages.json
+++ b/platform/mv3/extension/_locales/br_FR/messages.json
@@ -255,6 +255,14 @@
"message": "Stanket e vo ar merdeiñ etrezek lec'hiennoù a c'hallfe bezañ dañjerus, ha moaien a vo deoc'h dibab da genderc'hel pe get.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Mod diorroer",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/bs/messages.json b/platform/mv3/extension/_locales/bs/messages.json
index aded553891b52..9ade7c97e131d 100644
--- a/platform/mv3/extension/_locales/bs/messages.json
+++ b/platform/mv3/extension/_locales/bs/messages.json
@@ -255,6 +255,14 @@
"message": "Navigacija do potencijalno neželjenih stranica bit će blokirana i bit će vam ponuđena mogućnost da nastavite.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Režim za razvojne programere",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/ca/messages.json b/platform/mv3/extension/_locales/ca/messages.json
index 4e22d26d8937f..f4f31228aca21 100644
--- a/platform/mv3/extension/_locales/ca/messages.json
+++ b/platform/mv3/extension/_locales/ca/messages.json
@@ -255,6 +255,14 @@
"message": "Es blocarà la navegació en webs potencialment no desitjables, oferint-vos la possibilitat de continuar.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Mode de desenvolupador",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/cs/messages.json b/platform/mv3/extension/_locales/cs/messages.json
index 54a6a01c97188..ded196061d278 100644
--- a/platform/mv3/extension/_locales/cs/messages.json
+++ b/platform/mv3/extension/_locales/cs/messages.json
@@ -255,6 +255,14 @@
"message": "Bude zablokována navigace na potenciálně nežádoucí stránky a bude Vám nabídnuta volba pro pokračování.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Vývojářský režim",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/cv/messages.json b/platform/mv3/extension/_locales/cv/messages.json
index 881b780e38fa2..a7fcca23593fb 100644
--- a/platform/mv3/extension/_locales/cv/messages.json
+++ b/platform/mv3/extension/_locales/cv/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/cy/messages.json b/platform/mv3/extension/_locales/cy/messages.json
index 4eae9fa9a34fc..38e343943dbd8 100644
--- a/platform/mv3/extension/_locales/cy/messages.json
+++ b/platform/mv3/extension/_locales/cy/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Modd datblygwr",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/da/messages.json b/platform/mv3/extension/_locales/da/messages.json
index 8f0ba1e451155..94a8e54aa5c3b 100644
--- a/platform/mv3/extension/_locales/da/messages.json
+++ b/platform/mv3/extension/_locales/da/messages.json
@@ -255,6 +255,14 @@
"message": "Navigering til potentielt uønskede websteder blokeres, men man tilbydes muligheden for at fortsætte.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Udviklertilstand",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/de/messages.json b/platform/mv3/extension/_locales/de/messages.json
index 3df12ad9542c1..a48e8d7163936 100644
--- a/platform/mv3/extension/_locales/de/messages.json
+++ b/platform/mv3/extension/_locales/de/messages.json
@@ -255,6 +255,14 @@
"message": "Die Navigation zu potenziell unerwünschten Websites wird verhindert, jedoch wird eine Möglichkeit zum Fortfahren angeboten.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Entwicklermodus",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/el/messages.json b/platform/mv3/extension/_locales/el/messages.json
index 79f0151df4f38..e85a68e2fec59 100644
--- a/platform/mv3/extension/_locales/el/messages.json
+++ b/platform/mv3/extension/_locales/el/messages.json
@@ -255,6 +255,14 @@
"message": "Θα απετραπεί η πρόσβαση σε πιθανά ανεπιθύμητους ιστοτόπους. Θα σας προσφερθεί η επιλογή να συνεχίσετε.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Λειτουργία προγραμματιστή",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/en_GB/messages.json b/platform/mv3/extension/_locales/en_GB/messages.json
index 82722b33987d0..17ce4f41a3248 100644
--- a/platform/mv3/extension/_locales/en_GB/messages.json
+++ b/platform/mv3/extension/_locales/en_GB/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/eo/messages.json b/platform/mv3/extension/_locales/eo/messages.json
index c7384bc520fe8..d7b4ece267baa 100644
--- a/platform/mv3/extension/_locales/eo/messages.json
+++ b/platform/mv3/extension/_locales/eo/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/es/messages.json b/platform/mv3/extension/_locales/es/messages.json
index 6b927cf29a76a..91f81c840f5f2 100644
--- a/platform/mv3/extension/_locales/es/messages.json
+++ b/platform/mv3/extension/_locales/es/messages.json
@@ -255,6 +255,14 @@
"message": "La navegación a sitios potencialmente no deseados será bloqueada, y se te ofrecerá la opción de continuar.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Modo desarrollador",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/et/messages.json b/platform/mv3/extension/_locales/et/messages.json
index 5d6eaa33886ca..6ac6d1ac56161 100644
--- a/platform/mv3/extension/_locales/et/messages.json
+++ b/platform/mv3/extension/_locales/et/messages.json
@@ -255,6 +255,14 @@
"message": "Kahtlastele veebilehtedele suunamist takistatakse ja pakutakse võimalust jätkamiseks.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Arendaja režiim",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/eu/messages.json b/platform/mv3/extension/_locales/eu/messages.json
index 162073c53a2a0..37145c908bc4f 100644
--- a/platform/mv3/extension/_locales/eu/messages.json
+++ b/platform/mv3/extension/_locales/eu/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/fa/messages.json b/platform/mv3/extension/_locales/fa/messages.json
index e13089f186f9d..b88f514eece5a 100644
--- a/platform/mv3/extension/_locales/fa/messages.json
+++ b/platform/mv3/extension/_locales/fa/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/fi/messages.json b/platform/mv3/extension/_locales/fi/messages.json
index b73a25994e58b..18616a1858d5b 100644
--- a/platform/mv3/extension/_locales/fi/messages.json
+++ b/platform/mv3/extension/_locales/fi/messages.json
@@ -255,6 +255,14 @@
"message": "Potentiaalisesti ei-toivottujen sivustojen avaaminen estetään mahdollisuudella jatkaa.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Kehittäjätila",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/fil/messages.json b/platform/mv3/extension/_locales/fil/messages.json
index a2b3b9130c614..e24f903021304 100644
--- a/platform/mv3/extension/_locales/fil/messages.json
+++ b/platform/mv3/extension/_locales/fil/messages.json
@@ -255,6 +255,14 @@
"message": "Haharangan ang pagpunta sa mga hindi nais na mga site, at bibigyan ka ng pagkakataon na magpatuloy.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/fr/messages.json b/platform/mv3/extension/_locales/fr/messages.json
index 530b988b3fa20..91fd9803b13e0 100644
--- a/platform/mv3/extension/_locales/fr/messages.json
+++ b/platform/mv3/extension/_locales/fr/messages.json
@@ -255,6 +255,14 @@
"message": "La navigation vers des sites potentiellement indésirables sera bloquée, et vous aurez la possibilité de continuer",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Mode développeur",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/fy/messages.json b/platform/mv3/extension/_locales/fy/messages.json
index a39aef1a6f4a8..d44c046611bca 100644
--- a/platform/mv3/extension/_locales/fy/messages.json
+++ b/platform/mv3/extension/_locales/fy/messages.json
@@ -255,6 +255,14 @@
"message": "Navigaasje nei potinsjeel net-winske websites wurdt blokkearre, en jo krije de opsje om troch te gean.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Untwikkelersmodus",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/gl/messages.json b/platform/mv3/extension/_locales/gl/messages.json
index 0d6a94964a697..ca8f516981d2f 100644
--- a/platform/mv3/extension/_locales/gl/messages.json
+++ b/platform/mv3/extension/_locales/gl/messages.json
@@ -255,6 +255,14 @@
"message": "Vaise bloquear a navegación en webs potencialmente non desexables, e ofrecerase a opción de bloquealas.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Modo desenvolvemento",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/gu/messages.json b/platform/mv3/extension/_locales/gu/messages.json
index 881b780e38fa2..a7fcca23593fb 100644
--- a/platform/mv3/extension/_locales/gu/messages.json
+++ b/platform/mv3/extension/_locales/gu/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/he/messages.json b/platform/mv3/extension/_locales/he/messages.json
index bfe1ae3b38f15..7018161083257 100644
--- a/platform/mv3/extension/_locales/he/messages.json
+++ b/platform/mv3/extension/_locales/he/messages.json
@@ -255,6 +255,14 @@
"message": "ניווט אפשרי לאתרים לא רצויים יחסם ותהיה אפשרות להחליט להמשיך.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "מצב מפתחים",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/hi/messages.json b/platform/mv3/extension/_locales/hi/messages.json
index cec60fb8befd4..60045e8c79fab 100644
--- a/platform/mv3/extension/_locales/hi/messages.json
+++ b/platform/mv3/extension/_locales/hi/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/hr/messages.json b/platform/mv3/extension/_locales/hr/messages.json
index 1408ecea3ae7d..eb02c8ce15039 100644
--- a/platform/mv3/extension/_locales/hr/messages.json
+++ b/platform/mv3/extension/_locales/hr/messages.json
@@ -255,6 +255,14 @@
"message": "Navigacija do potencijalno nepoželjnih stranica bit će blokirana i bit će vam ponuđena opcija za nastavak.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Način rada za programere",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/hu/messages.json b/platform/mv3/extension/_locales/hu/messages.json
index 823bdcd857679..0d6c52eb7a3ec 100644
--- a/platform/mv3/extension/_locales/hu/messages.json
+++ b/platform/mv3/extension/_locales/hu/messages.json
@@ -255,6 +255,14 @@
"message": "Az esetleges nem kívánatos webhelyekre való navigáció blokkolva lesz, és rákérdez arra, hogy folytatja-e.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Fejlesztői mód",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/hy/messages.json b/platform/mv3/extension/_locales/hy/messages.json
index a3a75996bf97c..2c3b8665e04c7 100644
--- a/platform/mv3/extension/_locales/hy/messages.json
+++ b/platform/mv3/extension/_locales/hy/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/id/messages.json b/platform/mv3/extension/_locales/id/messages.json
index e65d7b6cafc82..beea2e85cebab 100644
--- a/platform/mv3/extension/_locales/id/messages.json
+++ b/platform/mv3/extension/_locales/id/messages.json
@@ -255,6 +255,14 @@
"message": "Navigasi ke situs yang mungkin tidak diinginkan akan diblokir, dan Anda akan ditawari opsi untuk melanjutkan.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Mode pengembang",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/it/messages.json b/platform/mv3/extension/_locales/it/messages.json
index 129b52efdeb39..85e75699d66bf 100644
--- a/platform/mv3/extension/_locales/it/messages.json
+++ b/platform/mv3/extension/_locales/it/messages.json
@@ -255,6 +255,14 @@
"message": "La navigazione verso siti potenzialmente indesiderati verrà bloccata e ti verrà offerta la possibilità di procedere.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Modalità sviluppatore",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/ja/messages.json b/platform/mv3/extension/_locales/ja/messages.json
index 279638fc745ca..d0436cdcb0fcf 100644
--- a/platform/mv3/extension/_locales/ja/messages.json
+++ b/platform/mv3/extension/_locales/ja/messages.json
@@ -255,6 +255,14 @@
"message": "望ましくない可能性のあるサイトへのナビゲーションはブロックされ、次に進むためのオプションが表示されます。",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "開発者モード",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/ka/messages.json b/platform/mv3/extension/_locales/ka/messages.json
index 12186152d0e7e..6abbf47d81a99 100644
--- a/platform/mv3/extension/_locales/ka/messages.json
+++ b/platform/mv3/extension/_locales/ka/messages.json
@@ -255,6 +255,14 @@
"message": "შეიზღუდა სავარაუდოდ არასასურველ გვერდებზე გადასვლა, საშუალება გეძლევათ, მაინც განაგრძოთ.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "შემმუშვებლის რეჟიმი",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/kk/messages.json b/platform/mv3/extension/_locales/kk/messages.json
index b53bf06bee105..73c7d1312f70e 100644
--- a/platform/mv3/extension/_locales/kk/messages.json
+++ b/platform/mv3/extension/_locales/kk/messages.json
@@ -255,6 +255,14 @@
"message": "Ықтимал қалаусыз сайттарға навигация блокталған болады және сізге жалғастыру опциясы ұсынылады.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Әзірлеуші режимі",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/kn/messages.json b/platform/mv3/extension/_locales/kn/messages.json
index 1c53367d39267..e0b4b68ce123e 100644
--- a/platform/mv3/extension/_locales/kn/messages.json
+++ b/platform/mv3/extension/_locales/kn/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/ko/messages.json b/platform/mv3/extension/_locales/ko/messages.json
index b2c1b8b24988f..ff654661de3dd 100644
--- a/platform/mv3/extension/_locales/ko/messages.json
+++ b/platform/mv3/extension/_locales/ko/messages.json
@@ -255,6 +255,14 @@
"message": "잠재적으로 유해할 수 있는 사이트로의 접속이 차단되며, 계속 진행할지 여부를 선택할 수 있는 옵션이 제공됩니다.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "개발자 모드",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/lt/messages.json b/platform/mv3/extension/_locales/lt/messages.json
index 4deafc2a3b24f..0f811c4bf6290 100644
--- a/platform/mv3/extension/_locales/lt/messages.json
+++ b/platform/mv3/extension/_locales/lt/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/lv/messages.json b/platform/mv3/extension/_locales/lv/messages.json
index 6d858f1dc500e..b22bd8deb1140 100644
--- a/platform/mv3/extension/_locales/lv/messages.json
+++ b/platform/mv3/extension/_locales/lv/messages.json
@@ -255,6 +255,14 @@
"message": "Iespējami nevēlamu vietņu apmeklēšana tiks aizturēta, un tiks piedāvāta iespēja turpināt.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Izstrādātāja režīms",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/mk/messages.json b/platform/mv3/extension/_locales/mk/messages.json
index f80ea18cb57f3..eb0992bf1e0e2 100644
--- a/platform/mv3/extension/_locales/mk/messages.json
+++ b/platform/mv3/extension/_locales/mk/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Мод за девелопери",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/ml/messages.json b/platform/mv3/extension/_locales/ml/messages.json
index e4211af439dc5..7772f461b19e4 100644
--- a/platform/mv3/extension/_locales/ml/messages.json
+++ b/platform/mv3/extension/_locales/ml/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/mr/messages.json b/platform/mv3/extension/_locales/mr/messages.json
index 881b780e38fa2..a7fcca23593fb 100644
--- a/platform/mv3/extension/_locales/mr/messages.json
+++ b/platform/mv3/extension/_locales/mr/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/ms/messages.json b/platform/mv3/extension/_locales/ms/messages.json
index d88bf60beac79..3e9df02a2bfce 100644
--- a/platform/mv3/extension/_locales/ms/messages.json
+++ b/platform/mv3/extension/_locales/ms/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/nb/messages.json b/platform/mv3/extension/_locales/nb/messages.json
index f412787c39e56..d7738607ca47d 100644
--- a/platform/mv3/extension/_locales/nb/messages.json
+++ b/platform/mv3/extension/_locales/nb/messages.json
@@ -255,6 +255,14 @@
"message": "Navigering til potensielt uønskede nettsteder blir blokkert, og du får tilbud om å fortsette.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Utviklermodus",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/nl/messages.json b/platform/mv3/extension/_locales/nl/messages.json
index c7e4f8d5640b7..8ecfc43074e1c 100644
--- a/platform/mv3/extension/_locales/nl/messages.json
+++ b/platform/mv3/extension/_locales/nl/messages.json
@@ -255,6 +255,14 @@
"message": "Navigatie naar mogelijk ongewenste websites wordt geblokkeerd, en u krijgt de mogelijkheid om door te gaan.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Ontwikkelaarsmodus",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/oc/messages.json b/platform/mv3/extension/_locales/oc/messages.json
index 881b780e38fa2..a7fcca23593fb 100644
--- a/platform/mv3/extension/_locales/oc/messages.json
+++ b/platform/mv3/extension/_locales/oc/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/pa/messages.json b/platform/mv3/extension/_locales/pa/messages.json
index d3a421c96a924..ba1050471a5df 100644
--- a/platform/mv3/extension/_locales/pa/messages.json
+++ b/platform/mv3/extension/_locales/pa/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "ਡਿਵੈਲਪਰ ਮੋਡ",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/pl/messages.json b/platform/mv3/extension/_locales/pl/messages.json
index 6e01dc23c7aa3..882ad0a916dd1 100644
--- a/platform/mv3/extension/_locales/pl/messages.json
+++ b/platform/mv3/extension/_locales/pl/messages.json
@@ -255,6 +255,14 @@
"message": "Nawigacja do potencjalnie niepożądanych witryn zostanie zablokowana i pojawi się opcja kontynuowania.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Tryb programisty",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/pt_BR/messages.json b/platform/mv3/extension/_locales/pt_BR/messages.json
index 570e7120d4973..e6a3e7699a920 100644
--- a/platform/mv3/extension/_locales/pt_BR/messages.json
+++ b/platform/mv3/extension/_locales/pt_BR/messages.json
@@ -255,6 +255,14 @@
"message": "A navegação para sites potencialmente indesejáveis será bloqueada e você terá a opção de prosseguir.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Modo de desenvolvedor",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/pt_PT/messages.json b/platform/mv3/extension/_locales/pt_PT/messages.json
index 881a97938178e..3f0d3fcbf2c14 100644
--- a/platform/mv3/extension/_locales/pt_PT/messages.json
+++ b/platform/mv3/extension/_locales/pt_PT/messages.json
@@ -255,6 +255,14 @@
"message": "A navegação para sites potencialmente indesejáveis será bloqueada e ser-lhe-á dada a opção de proceder.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Modo de programador",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/ro/messages.json b/platform/mv3/extension/_locales/ro/messages.json
index dde28eb985f69..f0dea79bbbda7 100644
--- a/platform/mv3/extension/_locales/ro/messages.json
+++ b/platform/mv3/extension/_locales/ro/messages.json
@@ -255,6 +255,14 @@
"message": "Navigarea către site-uri potențial nedorite va fi blocată și vi se va oferi opțiunea de a continua.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Mod dezvoltator",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/ru/messages.json b/platform/mv3/extension/_locales/ru/messages.json
index 79c04f5634e18..2db3db7ad2b56 100644
--- a/platform/mv3/extension/_locales/ru/messages.json
+++ b/platform/mv3/extension/_locales/ru/messages.json
@@ -255,6 +255,14 @@
"message": "Переход к потенциально нежелательным сайтам будет заблокирован, и будет дана возможность продолжить переход на сайт",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Режим разработчика",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/si/messages.json b/platform/mv3/extension/_locales/si/messages.json
index a29ea9027b6ae..2527e50ea6345 100644
--- a/platform/mv3/extension/_locales/si/messages.json
+++ b/platform/mv3/extension/_locales/si/messages.json
@@ -255,6 +255,14 @@
"message": "අනවශ්ය විය හැකි අඩවි වෙත සංචාලනය අවහිර කරනු ලබන අතර, ඉදිරියට යාමට ඔබට විකල්පය ලබා දෙනු ඇත.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/sk/messages.json b/platform/mv3/extension/_locales/sk/messages.json
index cf607c853bf4b..6fbe90b30681c 100644
--- a/platform/mv3/extension/_locales/sk/messages.json
+++ b/platform/mv3/extension/_locales/sk/messages.json
@@ -255,6 +255,14 @@
"message": "Navigácia na potenciálne nežiaduce stránky sa zablokuje a ponúkne sa vám možnosť pokračovať.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Vývojársky režim",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/sl/messages.json b/platform/mv3/extension/_locales/sl/messages.json
index 881b780e38fa2..a7fcca23593fb 100644
--- a/platform/mv3/extension/_locales/sl/messages.json
+++ b/platform/mv3/extension/_locales/sl/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/so/messages.json b/platform/mv3/extension/_locales/so/messages.json
index 881b780e38fa2..a7fcca23593fb 100644
--- a/platform/mv3/extension/_locales/so/messages.json
+++ b/platform/mv3/extension/_locales/so/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/sq/messages.json b/platform/mv3/extension/_locales/sq/messages.json
index 4050c916ae24b..ea104be84af2f 100644
--- a/platform/mv3/extension/_locales/sq/messages.json
+++ b/platform/mv3/extension/_locales/sq/messages.json
@@ -255,6 +255,14 @@
"message": "Uebsajtet potencialisht të padëshirueshme do të bllokohen dhe do t'ju jepet mundësia për të vazhduar.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Këndi i zhvilluesit",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/sr/messages.json b/platform/mv3/extension/_locales/sr/messages.json
index 2df65745f3852..a8cc081a60a97 100644
--- a/platform/mv3/extension/_locales/sr/messages.json
+++ b/platform/mv3/extension/_locales/sr/messages.json
@@ -255,6 +255,14 @@
"message": "Навигација до потенцијално непожељних сајтова ће бити блокирана и биће вам понуђена опција да наставите.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Режим за програмере",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/sv/messages.json b/platform/mv3/extension/_locales/sv/messages.json
index 56e7d92265842..dccd0b61c5496 100644
--- a/platform/mv3/extension/_locales/sv/messages.json
+++ b/platform/mv3/extension/_locales/sv/messages.json
@@ -255,6 +255,14 @@
"message": "Navigering till potentiellt oönskade webbplatser kommer att blockeras och du kommer att erbjudas alternativet att fortsätta.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Utvecklarläge",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/sw/messages.json b/platform/mv3/extension/_locales/sw/messages.json
index 881b780e38fa2..a7fcca23593fb 100644
--- a/platform/mv3/extension/_locales/sw/messages.json
+++ b/platform/mv3/extension/_locales/sw/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/ta/messages.json b/platform/mv3/extension/_locales/ta/messages.json
index 2ff4d939a263c..aff27389da4f1 100644
--- a/platform/mv3/extension/_locales/ta/messages.json
+++ b/platform/mv3/extension/_locales/ta/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/te/messages.json b/platform/mv3/extension/_locales/te/messages.json
index 03e43f94efc15..f37dcacacaf72 100644
--- a/platform/mv3/extension/_locales/te/messages.json
+++ b/platform/mv3/extension/_locales/te/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/th/messages.json b/platform/mv3/extension/_locales/th/messages.json
index cd15ebc52962c..1466ef83aa9c0 100644
--- a/platform/mv3/extension/_locales/th/messages.json
+++ b/platform/mv3/extension/_locales/th/messages.json
@@ -255,6 +255,14 @@
"message": "การนำทางไปยังเว็บไซต์ที่ไม่พึงประสงค์จะถูกบล็อก และคุณจะได้รับตัวเลือกเพื่อดำเนินการต่อ",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "โหมดนักพัฒนา",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/tr/messages.json b/platform/mv3/extension/_locales/tr/messages.json
index f80e64bcab16d..3e9f17ef7fc93 100644
--- a/platform/mv3/extension/_locales/tr/messages.json
+++ b/platform/mv3/extension/_locales/tr/messages.json
@@ -255,6 +255,14 @@
"message": "İstenmeyebilecek sitelere erişim engellenecek ve devam etme seçeneği sunulacaktır.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Geliştirici modu",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/uk/messages.json b/platform/mv3/extension/_locales/uk/messages.json
index f1dcd40ea6e63..bef14d2eff482 100644
--- a/platform/mv3/extension/_locales/uk/messages.json
+++ b/platform/mv3/extension/_locales/uk/messages.json
@@ -255,6 +255,14 @@
"message": "Перехід до потенційно небажаних сайтів буде заблоковано, та вам буде запропоновано можливість продовжити",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Режим розробника",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/ur/messages.json b/platform/mv3/extension/_locales/ur/messages.json
index 9a78773d02dc3..ee515029172ca 100644
--- a/platform/mv3/extension/_locales/ur/messages.json
+++ b/platform/mv3/extension/_locales/ur/messages.json
@@ -255,6 +255,14 @@
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/vi/messages.json b/platform/mv3/extension/_locales/vi/messages.json
index eed12ff7014bf..69255297a1470 100644
--- a/platform/mv3/extension/_locales/vi/messages.json
+++ b/platform/mv3/extension/_locales/vi/messages.json
@@ -255,6 +255,14 @@
"message": "Việc điều hướng đến các trang web có khả năng không mong muốn sẽ bị chặn và bạn sẽ được cung cấp tùy chọn để tiếp tục.",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "Chế độ nhà phát triển",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/zh_CN/messages.json b/platform/mv3/extension/_locales/zh_CN/messages.json
index 7754478f911b0..4bed87489b0a2 100644
--- a/platform/mv3/extension/_locales/zh_CN/messages.json
+++ b/platform/mv3/extension/_locales/zh_CN/messages.json
@@ -255,6 +255,14 @@
"message": "导航至潜在不良网站的操作将被拦截,并且您将可以选择继续前往。",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "开发者模式",
"description": "Label for a checkbox in the options page"
diff --git a/platform/mv3/extension/_locales/zh_TW/messages.json b/platform/mv3/extension/_locales/zh_TW/messages.json
index f8cc378afbe0a..748f5dc3ec1fc 100644
--- a/platform/mv3/extension/_locales/zh_TW/messages.json
+++ b/platform/mv3/extension/_locales/zh_TW/messages.json
@@ -255,6 +255,14 @@
"message": "前往潛在不良網站的導航將被阻止,您可以選擇是否繼續前往。",
"description": "Short description for a checkbox in the options page"
},
+ "enablePopupBlockLabel": {
+ "message": "Enable pop-up blocking",
+ "description": "Label for a checkbox in the options page"
+ },
+ "enablePopupBlockLegend": {
+ "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "description": "Short description for a checkbox in the options page"
+ },
"developerModeLabel": {
"message": "開發人員模式",
"description": "Label for a checkbox in the options page"
From 3f0c4e11107722cfcb29ad7717caa4af4da2935f Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Wed, 13 May 2026 08:20:40 -0400
Subject: [PATCH 020/375] Add ISO-8859-2 as alias of Windows-1250 in text
encoder
---
src/js/text-encode.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/js/text-encode.js b/src/js/text-encode.js
index b1e850b29c7f6..b6870e0c40df6 100644
--- a/src/js/text-encode.js
+++ b/src/js/text-encode.js
@@ -37,6 +37,7 @@ const textEncode = (( ) => {
[ 'windows-1250', 'windows-1250' ],
[ 'cp1250', 'windows-1250' ],
[ 'x-cp1250', 'windows-1250' ],
+ [ 'iso-8859-2', 'windows-1250' ],
[ 'windows-1251', 'windows-1251' ],
[ 'cp1251', 'windows-1251' ],
From 994d09479137133c5f620d9abbc4c3f56e39027c Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Wed, 13 May 2026 08:38:48 -0400
Subject: [PATCH 021/375] New revision for dev build
---
dist/version | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dist/version b/dist/version
index f474f5a7da72f..92ad625eeda24 100644
--- a/dist/version
+++ b/dist/version
@@ -1 +1 @@
-1.71.0
\ No newline at end of file
+1.71.1.0
\ No newline at end of file
From c182a0e1d6e81a69a03b942c5cb8cdb6b293dec2 Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Wed, 13 May 2026 08:40:39 -0400
Subject: [PATCH 022/375] Update changelog
---
CHANGELOG.md | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index dcd8d0d6e796f..63e6889f09070 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+- [Add ISO-8859-2 as alias of Windows-1250 in text encoder](https://github.com/gorhill/uBlock/commit/3f0c4e1110)
+
+----------
+
+# 1.70.1
+
- [Improve `freeze-element-property` scriptlet](https://github.com/gorhill/uBlock/commit/b91798c6f4)
- [Add support for network filter option `top=`](https://github.com/gorhill/uBlock/commit/aebc108e36)
- [Fix JS code extraction from web accessible resources](https://github.com/gorhill/uBlock/commit/a8bbd1a466)
From 3d0332faf7638e1d04ce23f3ad3c3b6d8e207d1f Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Wed, 13 May 2026 09:00:31 -0400
Subject: [PATCH 023/375] Import translation work from
https://crowdin.com/project/ublock
---
platform/mv3/description/webstore.el.txt | 2 +-
.../mv3/extension/_locales/bg/messages.json | 4 +--
.../mv3/extension/_locales/ca/messages.json | 4 +--
.../mv3/extension/_locales/de/messages.json | 4 +--
.../mv3/extension/_locales/el/messages.json | 28 +++++++++----------
.../mv3/extension/_locales/es/messages.json | 4 +--
.../mv3/extension/_locales/et/messages.json | 6 ++--
.../mv3/extension/_locales/fr/messages.json | 4 +--
.../mv3/extension/_locales/fy/messages.json | 4 +--
.../mv3/extension/_locales/hu/messages.json | 4 +--
.../mv3/extension/_locales/it/messages.json | 4 +--
.../mv3/extension/_locales/ja/messages.json | 4 +--
.../mv3/extension/_locales/ko/messages.json | 4 +--
.../mv3/extension/_locales/lv/messages.json | 4 +--
.../mv3/extension/_locales/nb/messages.json | 12 ++++----
.../mv3/extension/_locales/nl/messages.json | 4 +--
.../mv3/extension/_locales/pl/messages.json | 4 +--
.../extension/_locales/pt_BR/messages.json | 4 +--
.../mv3/extension/_locales/ru/messages.json | 4 +--
.../mv3/extension/_locales/sk/messages.json | 4 +--
.../mv3/extension/_locales/sv/messages.json | 4 +--
.../mv3/extension/_locales/tr/messages.json | 4 +--
.../mv3/extension/_locales/vi/messages.json | 4 +--
.../extension/_locales/zh_CN/messages.json | 4 +--
src/_locales/el/messages.json | 16 +++++------
src/_locales/et/messages.json | 2 +-
src/_locales/pt_BR/messages.json | 4 +--
27 files changed, 75 insertions(+), 75 deletions(-)
diff --git a/platform/mv3/description/webstore.el.txt b/platform/mv3/description/webstore.el.txt
index cd53ddda9c789..5f3f252d4b5d6 100644
--- a/platform/mv3/description/webstore.el.txt
+++ b/platform/mv3/description/webstore.el.txt
@@ -1,4 +1,4 @@
-Το uBO Lite (uBOL) είναι εργαλείο φραγής περιεχομένου βασισμένο στο MV3.
+Το uBO Lite (uBOL) είναι εργαλείο αποκλεισμού περιεχομένου βασισμένο στο MV3.
Το προεπιλεγμένο σύνολο κανόνων αντιστοιχεί στο προεπιλεγμένο σύνολο φίλτρων του uBlock Origin:
diff --git a/platform/mv3/extension/_locales/bg/messages.json b/platform/mv3/extension/_locales/bg/messages.json
index 74d2a0b9a22dc..7dce11489e655 100644
--- a/platform/mv3/extension/_locales/bg/messages.json
+++ b/platform/mv3/extension/_locales/bg/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Активиране на блокирането на изскачащи прозорци",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Когато тази функция е активирана, филтрите за съвпадение автоматично затварят нежеланите раздели в браузъра, създадени от уебсайтове.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/ca/messages.json b/platform/mv3/extension/_locales/ca/messages.json
index f4f31228aca21..0bdd2419519db 100644
--- a/platform/mv3/extension/_locales/ca/messages.json
+++ b/platform/mv3/extension/_locales/ca/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Activa el bloqueig de finestres emergents",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "En activar-se, els filtres coincidents tancaran automàticament les pestanyes del navegador no desitjades creades pels llocs web.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/de/messages.json b/platform/mv3/extension/_locales/de/messages.json
index a48e8d7163936..4488adee4063a 100644
--- a/platform/mv3/extension/_locales/de/messages.json
+++ b/platform/mv3/extension/_locales/de/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Pop-ups blockieren",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Dadurch werden unerwünschte Browser-Tabs, die durch Websites geöffnet wurden, mithilfe von Filtern geschlossen.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/el/messages.json b/platform/mv3/extension/_locales/el/messages.json
index e85a68e2fec59..3acef4903f266 100644
--- a/platform/mv3/extension/_locales/el/messages.json
+++ b/platform/mv3/extension/_locales/el/messages.json
@@ -4,7 +4,7 @@
"description": "extension name."
},
"extShortDesc": {
- "message": "Ένα πειραματικό εργαλείο φραγής περιεχομένου χωρίς δικαιώματα. Αποκλείει διαφημίσεις, ιχνηλάτες και πολλά άλλα μετά την εγκατάσταση.",
+ "message": "Ένα αποδοτικό πρόγραμμα φραγής περιεχομένου. Αποκλείει διαφημίσεις, ιχνηλάτες, εξορύκτες και άλλα αμέσως μετά την εγκατάσταση.",
"description": "this will be in the Chrome web store: must be 132 characters or less"
},
"perRulesetStats": {
@@ -28,7 +28,7 @@
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
},
"aboutPageName": {
- "message": "Σχετικά",
+ "message": "Πληροφορίες",
"description": "appears as tab name in dashboard"
},
"aboutPrivacyPolicy": {
@@ -40,11 +40,11 @@
"description": "Label in the popup panel for the current filtering mode"
},
"popupLocalToolsLabel": {
- "message": "Για αυτόν τον ιστότοπο",
+ "message": "Σε αυτόν τον ιστότοπο",
"description": "Label in the popup panel for the local tools section"
},
"popupTipReport": {
- "message": "Αναφορά ενός ζητήματος σε αυτόν τον ιστότοπο",
+ "message": "Αναφορά σφάλματος",
"description": "Tooltip used for the 'chat' icon in the panel"
},
"popupTipDashboard": {
@@ -92,7 +92,7 @@
"description": "Text label heading the import/export area of custom filters"
},
"customFiltersImportTextareaPlaceholder": {
- "message": "Επικολλήστε εδώ για προσθέσετε φίλτρα για συγκεκριμένα διακοσμητικά",
+ "message": "Επικολλήστε εδώ συγκεκριμένα φίλτρα μορφοποίησης ή σεναρίων για προσθήκη",
"description": "Placeholder text which describes the purpose of the textarea widget"
},
"aboutChangelog": {
@@ -124,7 +124,7 @@
"description": "Shown in the About pane"
},
"supportS6H": {
- "message": "Αναφορά προβλήματος φίλτρου",
+ "message": "Αναφορά σφάλματος φίλτρου",
"description": "Header of 'Report a filter issue' section in Support pane"
},
"supportS3P1": {
@@ -140,7 +140,7 @@
"description": "A paragraph in the filter issue reporter section"
},
"supportFindSpecificButton": {
- "message": "Βρείτε παρόμοιες αναφορές στο GitHub",
+ "message": "Εύρεση παρόμοιων αναφορών στο GitHub",
"description": "A clickable link in the filter issue reporter section"
},
"supportS6URL": {
@@ -168,7 +168,7 @@
"description": "An entry in the widget used to select the type of issue"
},
"supportS6Select1Option4": {
- "message": "Έχει ζητήματα σχετικά με το απόρρητο",
+ "message": "Έχει σφάλματα σχετικά με το απόρρητο",
"description": "An entry in the widget used to select the type of issue"
},
"supportS6Select1Option5": {
@@ -188,7 +188,7 @@
"description": "A checkbox to use for NSFW sites"
},
"supportReportSpecificButton": {
- "message": "Δημιουργία νέας αναφοράς",
+ "message": "Δημιουργία νέας αναφοράς στο GitHub",
"description": "Text for button which opens an external web page in Support pane"
},
"defaultFilteringModeSectionLabel": {
@@ -228,7 +228,7 @@
"description": "This describes the 'complete' filtering mode"
},
"noFilteringModeDescription": {
- "message": "Λίστα των hostnames για τα οποία δεν θα πραγματοποιηθεί φιλτράρισμα",
+ "message": "Λίστα ιστότοπων για τους οποίους δεν θα πραγματοποιείται φιλτράρισμα.",
"description": "A short description for the editable field which lists trusted sites"
},
"noFilteringModePlaceholder": {
@@ -248,7 +248,7 @@
"description": "Label for a checkbox in the options page"
},
"enableStrictBlockLabel": {
- "message": "Ενεργοποίηση αυστηρής φραγής",
+ "message": "Ενεργοποίηση αυστηρού αποκλεισμού",
"description": "Label for a checkbox in the options page"
},
"enableStrictBlockLegend": {
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Ενεργοποίηση αποκλεισμού αναδυόμενων",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Όταν είναι ενεργή, θα κλείνονται αυτόματα οι ανεπιθύμητες καρτέλες που δημιουργούν ιστοσελίδες οι οποίες αντιστοιχούν σε φίλτρα.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
@@ -268,7 +268,7 @@
"description": "Label for a checkbox in the options page"
},
"developerModeLegend": {
- "message": "Ενεργοποίηση πρόσβασης σε δυνατότητες κατάλληλες για τεχνικούς χρήστες.",
+ "message": "Ενεργοποιεί πρόσβαση σε δυνατότητες κατάλληλες για τεχνικούς χρήστες.",
"description": "Short description for a checkbox in the options page"
},
"settingsBackupRestoreLabel": {
diff --git a/platform/mv3/extension/_locales/es/messages.json b/platform/mv3/extension/_locales/es/messages.json
index 91f81c840f5f2..d79d311e086cb 100644
--- a/platform/mv3/extension/_locales/es/messages.json
+++ b/platform/mv3/extension/_locales/es/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Habilitar el bloqueo de emergentes",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Cuando está activo, los filtros que coincidan cerraran automáticamente las pestañas no solicitadas creadas por los sitios web.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/et/messages.json b/platform/mv3/extension/_locales/et/messages.json
index 6ac6d1ac56161..a20c51c41e6c0 100644
--- a/platform/mv3/extension/_locales/et/messages.json
+++ b/platform/mv3/extension/_locales/et/messages.json
@@ -92,7 +92,7 @@
"description": "Text label heading the import/export area of custom filters"
},
"customFiltersImportTextareaPlaceholder": {
- "message": "Kindlate kosmeetiliste filtrite lisamiseks asetage need siia",
+ "message": "Kindlate kosmeetiliste/scriptlet filtrite lisamiseks asetage need siia",
"description": "Placeholder text which describes the purpose of the textarea widget"
},
"aboutChangelog": {
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Luba hüpikute tõkestamine",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Lubamisel sulgevad ühtivad filtrid veebisaitide loodud soovimatud brauseri vahekaardid automaatselt.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/fr/messages.json b/platform/mv3/extension/_locales/fr/messages.json
index 91fd9803b13e0..b0fc890e0b733 100644
--- a/platform/mv3/extension/_locales/fr/messages.json
+++ b/platform/mv3/extension/_locales/fr/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Activer le blocage pop-up",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Lorsque cette option est activée, les filtres correspondants fermeront automatiquement les onglets de navigateur indésirés créés par les sites Web.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/fy/messages.json b/platform/mv3/extension/_locales/fy/messages.json
index d44c046611bca..87e9d6057ae67 100644
--- a/platform/mv3/extension/_locales/fy/messages.json
+++ b/platform/mv3/extension/_locales/fy/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Pop-upblokkearring ynskeakelje",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Wannear aktyf, slute oerienkommende filters automatysk net-winske browserljepblêden dy’t troch websites oanmakke binne.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/hu/messages.json b/platform/mv3/extension/_locales/hu/messages.json
index 0d6c52eb7a3ec..d6200c26fb313 100644
--- a/platform/mv3/extension/_locales/hu/messages.json
+++ b/platform/mv3/extension/_locales/hu/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Felugró ablakok blokkolásának engedélyezése",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Ha aktív, a megfelelő szűrők automatikusan bezárják a webhelyek által létrehozott kéretlen böngészőlapokat.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/it/messages.json b/platform/mv3/extension/_locales/it/messages.json
index 85e75699d66bf..d9fe64fc0041b 100644
--- a/platform/mv3/extension/_locales/it/messages.json
+++ b/platform/mv3/extension/_locales/it/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Abilita il blocco dei pop-up",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Quando attivo, i filtri corrispondenti chiuderanno automaticamente le schede del browser indesiderate create dai siti web.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/ja/messages.json b/platform/mv3/extension/_locales/ja/messages.json
index d0436cdcb0fcf..36205af3c1fa9 100644
--- a/platform/mv3/extension/_locales/ja/messages.json
+++ b/platform/mv3/extension/_locales/ja/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "ポップアップブロックを有効化",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "有効にすると、一致するフィルターはウェブサイトによって作成された不要なブラウザータブを自動的に閉じます。",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/ko/messages.json b/platform/mv3/extension/_locales/ko/messages.json
index ff654661de3dd..e3a150da441fe 100644
--- a/platform/mv3/extension/_locales/ko/messages.json
+++ b/platform/mv3/extension/_locales/ko/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "팝업 차단 켜기",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "켜면, 웹사이트에서 원치 않는 탭을 열 때 해당하는 필터가 자동으로 이를 닫습니다.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/lv/messages.json b/platform/mv3/extension/_locales/lv/messages.json
index b22bd8deb1140..9a4b9f523f37a 100644
--- a/platform/mv3/extension/_locales/lv/messages.json
+++ b/platform/mv3/extension/_locales/lv/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Iesspējot uzlecošos logu aizturēšanu",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Kad ieslēgts, atbilstošie aizturētāji automātiski aizvērs tīmekļvietņu izveidotas nevēlamas pārlūka cilnes.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/nb/messages.json b/platform/mv3/extension/_locales/nb/messages.json
index d7738607ca47d..3d80d44888df2 100644
--- a/platform/mv3/extension/_locales/nb/messages.json
+++ b/platform/mv3/extension/_locales/nb/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Aktiver popup blokkering",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Når denne er aktiv vil matchende filtre automatisk lukke uønskede nettleserfaner laget av nettsiden.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
@@ -268,7 +268,7 @@
"description": "Label for a checkbox in the options page"
},
"developerModeLegend": {
- "message": "Aktiver tilgang til funksjoner som er egnet for tekniske brukere.",
+ "message": "Aktiverer tilgang til funksjoner som er egnet for tekniske brukere.",
"description": "Short description for a checkbox in the options page"
},
"settingsBackupRestoreLabel": {
@@ -276,11 +276,11 @@
"description": "The header text for the back up/restore section"
},
"settingsBackupRestoreSummary": {
- "message": "Sikkerhetskopier dine egendefinerte regler, eller gjenopprett dine egendefinerte regler fra en fil.",
+ "message": "Sikkerhetskopier dine egendefinerte innstillinger til en fil, eller gjenopprett dine egendefinerte innstillinger fra en fil.",
"description": "A summary description of the back up/restore section."
},
"settingsBackupRestoreLegend": {
- "message": "Gjenoppretting vil overskrive dine nåværende egendefinerte regler.",
+ "message": "Gjenoppretting vil overskrive dine nåværende egendefinerte innstillinger.",
"description": "Important information about the back up/restore section."
},
"findListsPlaceholder": {
@@ -396,7 +396,7 @@
"description": "Text for buttons used to reset configurations to default"
},
"resetToDefaultConfirm": {
- "message": "All your custom settings will be removed. Do you really want to reset to default settings?",
+ "message": "Alle dine egendefinerte innstillinger vil bli fjernet. Vil du virkelig tilbakestille til standardinnstillingene?",
"description": "Message asking user to confirm reset to default settings"
},
"dnrRulesWarning": {
diff --git a/platform/mv3/extension/_locales/nl/messages.json b/platform/mv3/extension/_locales/nl/messages.json
index 8ecfc43074e1c..375118aaeeb56 100644
--- a/platform/mv3/extension/_locales/nl/messages.json
+++ b/platform/mv3/extension/_locales/nl/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Pop-upblokkering inschakelen",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Wanneer actief, sluiten overeenkomende filters automatisch ongewenste browsertabbladen die door websites zijn aangemaakt.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/pl/messages.json b/platform/mv3/extension/_locales/pl/messages.json
index 882ad0a916dd1..31366411488e2 100644
--- a/platform/mv3/extension/_locales/pl/messages.json
+++ b/platform/mv3/extension/_locales/pl/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Włącz blokowanie wyskakujących okienek",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Po aktywacji pasujące filtry będą automatycznie zamykać niechciane karty przeglądarki utworzone przez witryny internetowe.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/pt_BR/messages.json b/platform/mv3/extension/_locales/pt_BR/messages.json
index e6a3e7699a920..1ab07241b1a17 100644
--- a/platform/mv3/extension/_locales/pt_BR/messages.json
+++ b/platform/mv3/extension/_locales/pt_BR/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Ativar bloqueio de pop-ups",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Quando ativado, os filtros correspondentes fecharão automaticamente as abas indesejadas do navegador criadas por sites.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/ru/messages.json b/platform/mv3/extension/_locales/ru/messages.json
index 2db3db7ad2b56..8f2a6068f5501 100644
--- a/platform/mv3/extension/_locales/ru/messages.json
+++ b/platform/mv3/extension/_locales/ru/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Включить блокировку всплывающих окон",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Если активно, то подходящие фильтры будут автоматически закрывать нежелательные вкладки браузера, создаваемые веб-сайтами.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/sk/messages.json b/platform/mv3/extension/_locales/sk/messages.json
index 6fbe90b30681c..630a7b07e9ef0 100644
--- a/platform/mv3/extension/_locales/sk/messages.json
+++ b/platform/mv3/extension/_locales/sk/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Povoliť blokovanie vyskakovacích okien",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Ak je zapnuté, príslušné filtre automaticky zatvoria nepotrebné karty prehliadača, ktoré otvorili webové stránky.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/sv/messages.json b/platform/mv3/extension/_locales/sv/messages.json
index dccd0b61c5496..e1c7144c222ec 100644
--- a/platform/mv3/extension/_locales/sv/messages.json
+++ b/platform/mv3/extension/_locales/sv/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Aktivera popup-blockering",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "När funktionen är aktiv stänger matchande filter automatiskt oönskade flikar som webbplatser öppnat.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/tr/messages.json b/platform/mv3/extension/_locales/tr/messages.json
index 3e9f17ef7fc93..2365fa01a0650 100644
--- a/platform/mv3/extension/_locales/tr/messages.json
+++ b/platform/mv3/extension/_locales/tr/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Açılır pencere engellemeyi etkinleştir",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Etkinleştirildiğinde, uygun filtreler web sitelerinin açtığı istenmeyen sekmeleri otomatik olarak kapatır.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/vi/messages.json b/platform/mv3/extension/_locales/vi/messages.json
index 69255297a1470..df608d58a3d5b 100644
--- a/platform/mv3/extension/_locales/vi/messages.json
+++ b/platform/mv3/extension/_locales/vi/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Bật tính năng chặn cửa sổ bật lên",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Khi được kích hoạt, các bộ lọc phù hợp sẽ tự động đóng các tab trình duyệt không mong muốn do các trang web tạo ra.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/zh_CN/messages.json b/platform/mv3/extension/_locales/zh_CN/messages.json
index 4bed87489b0a2..c2b6c490ed098 100644
--- a/platform/mv3/extension/_locales/zh_CN/messages.json
+++ b/platform/mv3/extension/_locales/zh_CN/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "开启弹出窗口拦截",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "开启后,匹配的过滤器将自动关闭网站创建的不需要的浏览器标签页。",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/src/_locales/el/messages.json b/src/_locales/el/messages.json
index b4623718730b4..e011a600c4743 100644
--- a/src/_locales/el/messages.json
+++ b/src/_locales/el/messages.json
@@ -12,7 +12,7 @@
"description": "English: uBlock₀ — Dashboard"
},
"dashboardUnsavedWarning": {
- "message": "Προειδοποίηση! Έχετε μη αποθηκευμένες αλλαγές",
+ "message": "Προειδοποίηση: έχετε μη αποθηκευμένες αλλαγές!",
"description": "A warning in the dashboard when navigating away from unsaved changes"
},
"dashboardUnsavedWarningStay": {
@@ -68,15 +68,15 @@
"description": "Title for the advanced settings page"
},
"popupPowerSwitchInfo": {
- "message": "Κλικ: απενεργοποίηση/ενεργοποίηση του uBlock₀ για αυτόν τον ιστότοπο.\n\nCtrl+κλικ: απενεργοποίηση του uBlock₀ μόνο για αυτήν την σελίδα.",
+ "message": "Κλικ: απενεργοποίηση/ενεργοποίηση του uBlock₀ για αυτόν τον ιστότοπο.\n\nCtrl+κλικ: απενεργοποίηση του uBlock₀ μόνο σε αυτήν τη σελίδα.",
"description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
},
"popupPowerSwitchInfo1": {
- "message": "Κάντε κλικ για απενεργοποίηση του uBlock₀ για αυτήν την ιστοσελίδα.\n\nCtrl+κλικ για απενεργοποίηση του uBlock₀ μόνο σε αυτήν τη σελίδα.",
+ "message": "Κάντε κλικ για απενεργοποίηση του uBlock₀ για αυτόν τον ιστότοπο.\n\nCtrl+κλικ για απενεργοποίηση του uBlock₀ μόνο σε αυτήν τη σελίδα.",
"description": "Message to be read by screen readers"
},
"popupPowerSwitchInfo2": {
- "message": "Κάντε κλικ για ενεργοποίηση του uBlock₀ για αυτή την ιστοσελίδα.",
+ "message": "Κάντε κλικ για ενεργοποίηση του uBlock₀ για αυτόν τον ιστότοπο.",
"description": "Message to be read by screen readers"
},
"popupBlockedRequestPrompt": {
@@ -100,11 +100,11 @@
"description": "English: or"
},
"popupBlockedOnThisPage_v2": {
- "message": "Αποκλεισμένα σε αυτή τη σελίδα",
+ "message": "Αποκλεισμένα σε αυτήν τη σελίδα",
"description": "For the new mobile-friendly popup design"
},
"popupBlockedSinceInstall_v2": {
- "message": "Φραγμένο από εγκατάσταση",
+ "message": "Αποκλεισμένο από εγκατάσταση",
"description": "For the new mobile-friendly popup design"
},
"popupDomainsConnected_v2": {
@@ -112,7 +112,7 @@
"description": "For the new mobile-friendly popup design"
},
"popupTipDashboard": {
- "message": "Κάντε κλικ για να ανοίξετε τον πίνακα εργαλείων",
+ "message": "Ανοίξτε τον πίνακα ελέγχου",
"description": "English: Click to open the dashboard"
},
"popupTipZapper": {
@@ -128,7 +128,7 @@
"description": "Tooltip used for the logger icon in the panel"
},
"popupTipReport": {
- "message": "Αναφέρετε ένα πρόβλημα σε αυτόν τον ιστότοπο",
+ "message": "Αναφέρετε ένα σφάλμα σε αυτόν τον ιστότοπο",
"description": "Tooltip used for the 'chat' icon in the panel"
},
"popupTipNoPopups": {
diff --git a/src/_locales/et/messages.json b/src/_locales/et/messages.json
index 74a4a61d32d83..2da28a7477a45 100644
--- a/src/_locales/et/messages.json
+++ b/src/_locales/et/messages.json
@@ -220,7 +220,7 @@
"description": "Tooltip when hovering the top-most cell of the global-rules column."
},
"popupTipLocalRules": {
- "message": "Kohalikud reeglid: selle veeru reeglid kehtivad ainult praegusele saidile.\nKohalikud reeglid kirjutavad üldised reeglid üle.",
+ "message": "Kohalikud reeglid: selle veeru reeglid kehtivad ainult praegusele saidile.",
"description": "Tooltip when hovering the top-most cell of the local-rules column."
},
"popupTipSaveRules": {
diff --git a/src/_locales/pt_BR/messages.json b/src/_locales/pt_BR/messages.json
index a8c575b011a80..f9887e5d6af07 100644
--- a/src/_locales/pt_BR/messages.json
+++ b/src/_locales/pt_BR/messages.json
@@ -4,7 +4,7 @@
"description": "extension name."
},
"extShortDesc": {
- "message": "Até que enfim, um bloqueador eficiente. Bem otimizado para CPU e memória.",
+ "message": "Finalmente, um bloqueador eficiente. Com baixo uso de CPU e memória.",
"description": "this will be in the Chrome web store: must be 132 characters or less"
},
"dashboardName": {
@@ -16,7 +16,7 @@
"description": "A warning in the dashboard when navigating away from unsaved changes"
},
"dashboardUnsavedWarningStay": {
- "message": "Ficar",
+ "message": "Ficar aqui",
"description": "Label for button to prevent navigating away from unsaved changes"
},
"dashboardUnsavedWarningIgnore": {
From a82fcdb74deaf1844c87b5dfe7080ee1fb64a62e Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Wed, 13 May 2026 16:51:17 -0400
Subject: [PATCH 024/375] Make Firefox dev build auto-update
---
dist/firefox/updates.json | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dist/firefox/updates.json b/dist/firefox/updates.json
index d6db3aae47922..e32b382beaa7a 100644
--- a/dist/firefox/updates.json
+++ b/dist/firefox/updates.json
@@ -3,13 +3,13 @@
"uBlock0@raymondhill.net": {
"updates": [
{
- "version": "1.70.1.100",
+ "version": "1.71.1.0",
"browser_specific_settings": {
"gecko": {
"strict_min_version": "115.0"
}
},
- "update_link": "https://github.com/gorhill/uBlock/releases/download/1.70.1rc0/uBlock0_1.70.1rc0.firefox.signed.xpi"
+ "update_link": "https://github.com/gorhill/uBlock/releases/download/1.71.1b0/uBlock0_1.71.1b0.firefox.signed.xpi"
}
]
}
From e8ab0e2faac6bd6fae7ea8e248497a55151b5eda Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Sat, 16 May 2026 09:44:18 -0400
Subject: [PATCH 025/375] Import translation work from
https://crowdin.com/project/ublock
---
platform/mv3/extension/_locales/br_FR/messages.json | 2 +-
platform/mv3/extension/_locales/fi/messages.json | 8 ++++----
platform/mv3/extension/_locales/hr/messages.json | 4 ++--
platform/mv3/extension/_locales/sr/messages.json | 6 +++---
platform/mv3/extension/_locales/uk/messages.json | 4 ++--
src/_locales/hr/messages.json | 2 +-
6 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/platform/mv3/extension/_locales/br_FR/messages.json b/platform/mv3/extension/_locales/br_FR/messages.json
index 3ee9fbf1d78c3..a03e30d4f1716 100644
--- a/platform/mv3/extension/_locales/br_FR/messages.json
+++ b/platform/mv3/extension/_locales/br_FR/messages.json
@@ -256,7 +256,7 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Enaouiñ stankañ ar pop-upoù",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
diff --git a/platform/mv3/extension/_locales/fi/messages.json b/platform/mv3/extension/_locales/fi/messages.json
index 18616a1858d5b..6f8ba17c7f7da 100644
--- a/platform/mv3/extension/_locales/fi/messages.json
+++ b/platform/mv3/extension/_locales/fi/messages.json
@@ -92,7 +92,7 @@
"description": "Text label heading the import/export area of custom filters"
},
"customFiltersImportTextareaPlaceholder": {
- "message": "Liitä lisättävät kosmeettiset suodattimet tähän",
+ "message": "Liitä lisättävät kosmeettiset/scriptlet-suodattimet tähän",
"description": "Placeholder text which describes the purpose of the textarea widget"
},
"aboutChangelog": {
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Käytä ponnahdusestoa",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Kun käytössä, suljetaan suodattimia vastaavat verkkosivustojen avaamat ei-toivotut selainvälilehdet automaattisesti.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
@@ -272,7 +272,7 @@
"description": "Short description for a checkbox in the options page"
},
"settingsBackupRestoreLabel": {
- "message": "Varmuuskopioi / Palauta",
+ "message": "Varmuuskopiointi",
"description": "The header text for the back up/restore section"
},
"settingsBackupRestoreSummary": {
diff --git a/platform/mv3/extension/_locales/hr/messages.json b/platform/mv3/extension/_locales/hr/messages.json
index eb02c8ce15039..6fbbe74f16539 100644
--- a/platform/mv3/extension/_locales/hr/messages.json
+++ b/platform/mv3/extension/_locales/hr/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Omogući blokiranje skočnih prozora",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Kada su aktivni, odgovarajući filteri automatski će zatvoriti neželjene kartice preglednika koje su kreirale web-lokacije.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/sr/messages.json b/platform/mv3/extension/_locales/sr/messages.json
index a8cc081a60a97..1a55c8ed11c98 100644
--- a/platform/mv3/extension/_locales/sr/messages.json
+++ b/platform/mv3/extension/_locales/sr/messages.json
@@ -72,7 +72,7 @@
"description": "Header for a ruleset section in 'Filter lists pane'"
},
"3pGroupMalware": {
- "message": "Злонамерни домени",
+ "message": "Заштита од злонамерног софтвера, безбедност",
"description": "Header for a ruleset section in 'Filter lists pane'"
},
"3pGroupAnnoyances": {
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Омогући блокирање искачућих прозора",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Када је активно, одговарајући филтери ће аутоматски затворити нежељене картице прегледача које су креирале веб странице.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/platform/mv3/extension/_locales/uk/messages.json b/platform/mv3/extension/_locales/uk/messages.json
index bef14d2eff482..3232be576401e 100644
--- a/platform/mv3/extension/_locales/uk/messages.json
+++ b/platform/mv3/extension/_locales/uk/messages.json
@@ -256,11 +256,11 @@
"description": "Short description for a checkbox in the options page"
},
"enablePopupBlockLabel": {
- "message": "Enable pop-up blocking",
+ "message": "Увімкнути блокування спливних вікон",
"description": "Label for a checkbox in the options page"
},
"enablePopupBlockLegend": {
- "message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
+ "message": "Якщо увімкнено, фільтри автоматично закриватимуть небажані вкладки браузера, створені вебсайтами.",
"description": "Short description for a checkbox in the options page"
},
"developerModeLabel": {
diff --git a/src/_locales/hr/messages.json b/src/_locales/hr/messages.json
index d5101bf82b0c3..d6561f1204bfe 100644
--- a/src/_locales/hr/messages.json
+++ b/src/_locales/hr/messages.json
@@ -220,7 +220,7 @@
"description": "Tooltip when hovering the top-most cell of the global-rules column."
},
"popupTipLocalRules": {
- "message": "Lokalna pravila: ovaj stupac je za pravila koja vrijede samo za trenutnu stranicu.\nLokalna pravila nadjačavaju globalna pravila.",
+ "message": "Lokalna pravila: ovaj stupac je za pravila koja vrijede samo za trenutnu stranicu.",
"description": "Tooltip when hovering the top-most cell of the local-rules column."
},
"popupTipSaveRules": {
From 9e5299e7f4a422891509a7bb5efbd689b7871ba3 Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Mon, 18 May 2026 08:49:59 -0400
Subject: [PATCH 026/375] Improve `google-ima` shim
Related issue:
https://github.com/uBlockOrigin/uAssets/issues/32959
---
src/web_accessible_resources/google-ima.js | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/src/web_accessible_resources/google-ima.js b/src/web_accessible_resources/google-ima.js
index a3f6126628524..8359aa9593877 100644
--- a/src/web_accessible_resources/google-ima.js
+++ b/src/web_accessible_resources/google-ima.js
@@ -24,7 +24,9 @@
* - https://github.com/uBlockOrigin/uAssets/issues/31018
*
**/
-
+
+/* eslint-disable indent */
+
'use strict';
/* This Source Code Form is subject to the terms of the Mozilla Public
@@ -41,7 +43,7 @@
*/
if (!window.google || !window.google.ima || !window.google.ima.VERSION) {
- const VERSION = "3.517.2";
+ const VERSION = "3.764.0";
const ima = {};
class AdDisplayContainer {
@@ -481,7 +483,8 @@ if (!window.google || !window.google.ima || !window.google.ima.VERSION) {
return true;
}
}
- } catch (_) {}
+ } catch {
+ }
return false;
};
From 2eebc7579d75e12682caa19e004d699bfd643585 Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Mon, 18 May 2026 09:50:03 -0400
Subject: [PATCH 027/375] [mv3] Merge content scripts related to specific and
procedural cosmetic filters
There is now no benefit splitting them in two sets of content scripts.
---
.../mv3/extension/js/scripting-manager.js | 24 +--
.../extension/js/scripting/css-procedural.js | 64 --------
.../extension/js/scripting/css-specific.js | 145 +++++++++++++++++-
.../extension/js/scripting/isolated-api.js | 138 -----------------
platform/mv3/make-rulesets.js | 41 ++---
.../mv3/scriptlets/css-procedural.template.js | 37 -----
6 files changed, 170 insertions(+), 279 deletions(-)
delete mode 100644 platform/mv3/extension/js/scripting/css-procedural.js
delete mode 100644 platform/mv3/scriptlets/css-procedural.template.js
diff --git a/platform/mv3/extension/js/scripting-manager.js b/platform/mv3/extension/js/scripting-manager.js
index 99b4e041f2b7e..f0aafe1fb009b 100644
--- a/platform/mv3/extension/js/scripting-manager.js
+++ b/platform/mv3/extension/js/scripting-manager.js
@@ -169,17 +169,19 @@ function registerGeneric(context, genericDetails) {
/******************************************************************************/
-async function registerCosmetic(realm, context) {
+async function registerCosmetic(context) {
const { filteringModeDetails, rulesetsDetails } = context;
{
const keys = await localKeys();
- localRemove(keys.filter(a => a.startsWith(`css.${realm}.`)));
+ localRemove(keys.filter(a => a.startsWith('css.specific.')));
+ // TODO: remove after a few versions after 2026.516.1652
+ localRemove(keys.filter(a => a.startsWith('css.procedural.')));
}
const rulesetIds = [];
for ( const rulesetDetails of rulesetsDetails ) {
- const count = rulesetDetails.css?.[realm] || 0;
+ const count = rulesetDetails.css?.specific ?? 0;
if ( count === 0 ) { continue; }
rulesetIds.push(rulesetDetails.id);
}
@@ -196,8 +198,8 @@ async function registerCosmetic(realm, context) {
const promises = [];
for ( const id of rulesetIds ) {
promises.push(
- fetchJSON(`/rulesets/scripting/${realm}/${id}`).then(data => {
- return localWrite(`css.${realm}.${id}`, data);
+ fetchJSON(`/rulesets/scripting/specific/${id}`).then(data => {
+ return localWrite(`css.specific.${id}`, data);
})
);
}
@@ -206,13 +208,12 @@ async function registerCosmetic(realm, context) {
normalizeMatches(matches);
- const realmid = `css-${realm}`;
- const js = rulesetIds.map(id => `/rulesets/scripting/${realm}/${id}.js`);
+ const js = rulesetIds.map(id => `/rulesets/scripting/specific/${id}.js`);
js.unshift('/js/scripting/css-api.js', '/js/scripting/isolated-api.js');
- if ( realm === 'procedural' && webextFlavor === 'safari' ) {
+ if ( webextFlavor === 'safari' ) {
js.push('/js/scripting/css-procedural-api.js');
}
- js.push(`/js/scripting/${realmid}.js`);
+ js.push('/js/scripting/css-specific.js');
const excludeMatches = [];
if ( none.has('all-urls') === false && basic.has('all-urls') === false ) {
@@ -226,7 +227,7 @@ async function registerCosmetic(realm, context) {
}
const directive = {
- id: realmid,
+ id: 'css-specific',
js,
matches,
allFrames: true,
@@ -338,8 +339,7 @@ registerInjectables.register = async function register() {
await Promise.all([
registerScriptlet(context, scriptletDetails),
- registerCosmetic('specific', context),
- registerCosmetic('procedural', context),
+ registerCosmetic(context),
registerGeneric(context, genericDetails),
registerCustomFilters(context),
registerCustomScriptlets(context),
diff --git a/platform/mv3/extension/js/scripting/css-procedural.js b/platform/mv3/extension/js/scripting/css-procedural.js
deleted file mode 100644
index 221f162e7a1af..0000000000000
--- a/platform/mv3/extension/js/scripting/css-procedural.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/*******************************************************************************
-
- uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
- Copyright (C) 2014-present Raymond Hill
-
- This program 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.
-
- This program 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 this program. If not, see {http://www.gnu.org/licenses/}.
-
- Home: https://github.com/gorhill/uBlock
-*/
-
-// Important!
-// Isolate from global scope
-(async function uBOL_cssProcedural() {
-
-/******************************************************************************/
-
-const proceduralImports = self.proceduralImports || [];
-self.proceduralImports = undefined;
-
-/******************************************************************************/
-
-const selectors = await self.cosmeticAPI.getSelectors('procedural', proceduralImports);
-self.cosmeticAPI.release();
-if ( selectors.length === 0 ) { return; }
-
-proceduralImports.length = 0;
-
-if ( self.ProceduralFiltererAPI === undefined ) {
- self.ProceduralFiltererAPI = chrome.runtime.sendMessage({
- what: 'injectCSSProceduralAPI'
- }).catch(( ) => {
- });
-}
-
-await self.ProceduralFiltererAPI;
-
-self.listsProceduralFiltererAPI = new self.ProceduralFiltererAPI();
-
-const declaratives = selectors.filter(a => a.cssable);
-if ( declaratives.length !== 0 ) {
- self.listsProceduralFiltererAPI.addDeclaratives(declaratives);
-}
-
-const procedurals = selectors.filter(a => !a.cssable);
-if ( procedurals.length !== 0 ) {
- self.listsProceduralFiltererAPI.addProcedurals(procedurals);
-}
-
-/******************************************************************************/
-
-})();
-
-void 0;
diff --git a/platform/mv3/extension/js/scripting/css-specific.js b/platform/mv3/extension/js/scripting/css-specific.js
index 10de503f9bac7..85182058ccc58 100644
--- a/platform/mv3/extension/js/scripting/css-specific.js
+++ b/platform/mv3/extension/js/scripting/css-specific.js
@@ -30,10 +30,147 @@ self.specificImports = undefined;
/******************************************************************************/
-const selectors = await self.cosmeticAPI.getSelectors('specific', specificImports);
-self.cosmeticAPI.release();
-if ( selectors.length === 0 ) { return; }
-self.cssAPI.insert(`${selectors.join(',\n')}{display:none!important;}`);
+const { isolatedAPI } = self;
+
+const sessionRead = async function(key) {
+ try {
+ const bin = await chrome.storage.session.get(key);
+ return bin?.[key] ?? undefined;
+ } catch {
+ }
+};
+
+const sessionWrite = function(key, data) {
+ try {
+ chrome.storage.session.set({ [key]: data });
+ } catch {
+ }
+};
+
+const localRead = async function(key) {
+ try {
+ const bin = await chrome.storage.local.get(key);
+ return bin?.[key] ?? undefined;
+ } catch {
+ }
+};
+
+const selectorsFromListIndex = (data, ilist) => {
+ const list = JSON.parse(`[${data.selectorLists[ilist]}]`);
+ const { result } = data;
+ for ( const iselector of list ) {
+ if ( iselector >= 0 ) {
+ result.selectors.add(data.selectors[iselector]);
+ } else {
+ result.exceptions.add(data.selectors[~iselector]);
+ }
+ }
+};
+
+const selectorsFromHostnames = (haystack, needles, data) => {
+ let listref = -1;
+ for ( const needle of needles ) {
+ listref = isolatedAPI.binarySearch(haystack, needle, listref);
+ if ( listref >= 0 ) {
+ selectorsFromListIndex(data, data.selectorListRefs[listref]);
+ } else {
+ listref = ~listref;
+ }
+ }
+};
+
+const selectorsFromRuleset = async (rulesetId, result) => {
+ const data = await localRead(`css.specific.${rulesetId}`);
+ if ( typeof data !== 'object' || data === null ) { return; }
+ data.result = result;
+ selectorsFromHostnames(data.hostnames, isolatedAPI.contexts.hostnames, data);
+ if ( data.hasEntities ) {
+ selectorsFromHostnames(data.hostnames, isolatedAPI.contexts.entities, data);
+ }
+ const { regexes } = data;
+ for ( let i = 0, n = regexes.length; i < n; i += 3 ) {
+ if ( thisHostname.includes(regexes[i+0]) === false ) { continue; }
+ if ( typeof regexes[i+1] === 'string' ) {
+ regexes[i+1] = new RegExp(regexes[i+1]);
+ }
+ if ( regexes[i+1].test(thisHostname) === false ) { continue; }
+ selectorsFromListIndex(data, regexes[i+2]);
+ }
+};
+
+const fillCache = async function(rulesetIds) {
+ const selectors = new Set();
+ const exceptions = new Set();
+ const result = { selectors, exceptions };
+ const [ filteringModeDetails ] = await Promise.all([
+ localRead('filteringModeDetails'),
+ ...rulesetIds.map(a => selectorsFromRuleset(a, result)),
+ ]);
+ const skip = filteringModeDetails?.none.some(a => {
+ if ( topHostname.endsWith(a) === false ) { return false; }
+ const n = a.length;
+ return topHostname.length === n || topHostname.at(-n-1) === '.';
+ });
+ for ( const selector of exceptions ) {
+ selectors.delete(selector);
+ }
+ if ( skip ) {
+ selectors.clear();
+ }
+ cacheEntry.s = [];
+ cacheEntry.p = [];
+ for ( const selector of selectors ) {
+ if ( selector.startsWith('{') ) {
+ cacheEntry.p.push(JSON.parse(selector));
+ } else {
+ cacheEntry.s.push(selector);
+ }
+ }
+ return cacheEntry;
+};
+
+const topHostname = isolatedAPI.contexts.topHostname;
+const thisHostname = document.location.hostname || '';
+const cachePath = topHostname !== thisHostname ? `${topHostname}/` : '';
+const cacheKey = `cache.css.${cachePath}${thisHostname}`;
+
+let cacheEntry = await sessionRead(cacheKey) ?? { t: 0 };
+if ( cacheEntry.t === 0 ) {
+ cacheEntry = await fillCache(specificImports);
+}
+const now = Math.round(Date.now() / 15000);
+const since = now - cacheEntry.t;
+if ( since > 1 ) {
+ cacheEntry.t = now;
+ sessionWrite(cacheKey, cacheEntry);
+}
+
+const { s, p } = cacheEntry;
+
+if ( s.length !== 0 ) {
+ self.cssAPI.insert(`${s.join(',\n')}{display:none!important;}`);
+}
+
+if ( p.length === 0 ) { return; }
+
+if ( self.ProceduralFiltererAPI === undefined ) {
+ self.ProceduralFiltererAPI = chrome.runtime.sendMessage({
+ what: 'injectCSSProceduralAPI'
+ }).catch(( ) => {
+ });
+}
+
+await self.ProceduralFiltererAPI;
+self.listsProceduralFiltererAPI = new self.ProceduralFiltererAPI();
+
+const declaratives = p.filter(a => a.cssable);
+if ( declaratives.length !== 0 ) {
+ self.listsProceduralFiltererAPI.addDeclaratives(declaratives);
+}
+const procedurals = p.filter(a => !a.cssable);
+if ( procedurals.length !== 0 ) {
+ self.listsProceduralFiltererAPI.addProcedurals(procedurals);
+}
/******************************************************************************/
diff --git a/platform/mv3/extension/js/scripting/isolated-api.js b/platform/mv3/extension/js/scripting/isolated-api.js
index e8e8ea0ca219c..b5552cac993a6 100644
--- a/platform/mv3/extension/js/scripting/isolated-api.js
+++ b/platform/mv3/extension/js/scripting/isolated-api.js
@@ -102,144 +102,6 @@
})(self.isolatedAPI);
-
-(api => {
- if ( typeof api === 'object' ) { return; }
-
- const cosmeticAPI = self.cosmeticAPI = {};
- const { isolatedAPI } = self;
- const topHostname = isolatedAPI.contexts.topHostname;
- const thisHostname = document.location.hostname || '';
-
- const sessionRead = async function(key) {
- try {
- const bin = await chrome.storage.session.get(key);
- return bin?.[key] ?? undefined;
- } catch {
- }
- };
-
- const sessionWrite = function(key, data) {
- try {
- chrome.storage.session.set({ [key]: data });
- } catch {
- }
- };
-
- const localRead = async function(key) {
- try {
- const bin = await chrome.storage.local.get(key);
- return bin?.[key] ?? undefined;
- } catch {
- }
- };
-
- const selectorsFromListIndex = (data, ilist) => {
- const list = JSON.parse(`[${data.selectorLists[ilist]}]`);
- const { result } = data;
- for ( const iselector of list ) {
- if ( iselector >= 0 ) {
- result.selectors.add(data.selectors[iselector]);
- } else {
- result.exceptions.add(data.selectors[~iselector]);
- }
- }
- };
-
- const selectorsFromHostnames = (haystack, needles, data) => {
- let listref = -1;
- for ( const needle of needles ) {
- listref = isolatedAPI.binarySearch(haystack, needle, listref);
- if ( listref >= 0 ) {
- selectorsFromListIndex(data, data.selectorListRefs[listref]);
- } else {
- listref = ~listref;
- }
- }
- };
-
- const selectorsFromRuleset = async (realm, rulesetId, result) => {
- const data = await localRead(`css.${realm}.${rulesetId}`);
- if ( typeof data !== 'object' || data === null ) { return; }
- data.result = result;
- selectorsFromHostnames(data.hostnames, isolatedAPI.contexts.hostnames, data);
- if ( data.hasEntities ) {
- selectorsFromHostnames(data.hostnames, isolatedAPI.contexts.entities, data);
- }
- const { regexes } = data;
- for ( let i = 0, n = regexes.length; i < n; i += 3 ) {
- if ( thisHostname.includes(regexes[i+0]) === false ) { continue; }
- if ( typeof regexes[i+1] === 'string' ) {
- regexes[i+1] = new RegExp(regexes[i+1]);
- }
- if ( regexes[i+1].test(thisHostname) === false ) { continue; }
- selectorsFromListIndex(data, regexes[i+2]);
- }
- };
-
- const fillCache = async function(realm, rulesetIds) {
- const selectors = new Set();
- const exceptions = new Set();
- const result = { selectors, exceptions };
- const [ filteringModeDetails ] = await Promise.all([
- localRead('filteringModeDetails'),
- ...rulesetIds.map(a => selectorsFromRuleset(realm, a, result)),
- ]);
- const skip = filteringModeDetails?.none.some(a => {
- if ( topHostname.endsWith(a) === false ) { return false; }
- const n = a.length;
- return topHostname.length === n || topHostname.at(-n-1) === '.';
- });
- for ( const selector of exceptions ) {
- selectors.delete(selector);
- }
- if ( skip ) {
- selectors.clear();
- }
- cacheEntry[realm.charAt(0)] = Array.from(selectors).map(a =>
- a.startsWith('{') ? JSON.parse(a) : a
- );
- };
-
- const readCache = async ( ) => {
- cacheEntry = await sessionRead(cacheKey) || {};
- };
-
- const cacheKey =
- `cache.css.${topHostname !== thisHostname ? `${topHostname}/` : ''}${thisHostname || ''}`;
- let clientCount = 0;
- let cacheEntry;
-
- cosmeticAPI.getSelectors = async function(realm, rulesetIds) {
- clientCount += 1;
- const slot = realm.charAt(0);
- if ( cacheEntry === undefined ) {
- cacheEntry = readCache();
- }
- if ( cacheEntry instanceof Promise ) {
- await cacheEntry;
- }
- if ( cacheEntry[slot] === undefined ) {
- cacheEntry[slot] = fillCache(realm, rulesetIds);
- }
- if ( cacheEntry[slot] instanceof Promise ) {
- await cacheEntry[slot];
- }
- return cacheEntry[slot];
- };
-
- cosmeticAPI.release = function() {
- clientCount -= 1;
- if ( clientCount !== 0 ) { return; }
- self.cosmeticAPI = undefined;
- const now = Math.round(Date.now() / 15000);
- const since = now - (cacheEntry.t || 0);
- if ( since <= 1 ) { return; }
- cacheEntry.t = now;
- sessionWrite(cacheKey, cacheEntry);
- };
-})(self.cosmeticAPI);
-
/******************************************************************************/
void 0;
\ No newline at end of file
diff --git a/platform/mv3/make-rulesets.js b/platform/mv3/make-rulesets.js
index 57e64a2ae07fd..a60ed3ef5cc40 100644
--- a/platform/mv3/make-rulesets.js
+++ b/platform/mv3/make-rulesets.js
@@ -726,7 +726,7 @@ async function processGenericCosmeticFilters(
assetDetails,
selectorList,
exceptionList,
- declarativeMap
+ specificMap
) {
const exceptionSet = new Set(
exceptionList &&
@@ -754,11 +754,12 @@ async function processGenericCosmeticFilters(
// Specific exceptions
const exceptionMap = new Map();
- if ( declarativeMap ) {
- for ( const [ exception, details ] of declarativeMap ) {
+ if ( specificMap ) {
+ for ( const [ exception, details ] of specificMap ) {
if ( details.rejected ) { continue; }
if ( details.matches !== undefined ) { continue; }
if ( details.excludeMatches === undefined ) { continue; }
+ if ( exception.startsWith('{') ) { continue; }
for ( const hn of details.excludeMatches ) {
const exceptions = exceptionMap.get(hn);
if ( exceptions === undefined ) {
@@ -848,7 +849,7 @@ const hostnameCompare = (a, b) => {
/******************************************************************************/
-async function processCosmeticFilters(assetDetails, realm, mapin) {
+async function processCosmeticFilters(assetDetails, mapin) {
if ( mapin === undefined ) { return 0; }
if ( mapin.size === 0 ) { return 0; }
@@ -922,19 +923,19 @@ async function processCosmeticFilters(assetDetails, realm, mapin) {
return [ literalStrFromRegex(restr).slice(0,8), restr, a[1] ]
}).flat(),
};
- writeFile(`${scriptletDir}/${realm}/${assetDetails.id}.json`, JSON.stringify(data));
+ writeFile(`${scriptletDir}/specific/${assetDetails.id}.json`, JSON.stringify(data));
// The cosmetic filters will be injected programmatically as content
// script and the decisions to activate the cosmetic filters will be
// done at injection time according to the document's hostname.
const originalScriptletMap = await loadAllSourceScriptlets();
- let patchedScriptlet = originalScriptletMap.get(`css-${realm}`).replace(
+ let patchedScriptlet = originalScriptletMap.get(`css-specific`).replace(
'self.$rulesetId$',
JSON.stringify(assetDetails.id)
);
- writeFile(`${scriptletDir}/${realm}/${assetDetails.id}.js`, patchedScriptlet);
+ writeFile(`${scriptletDir}/specific/${assetDetails.id}.js`, patchedScriptlet);
- log(`CSS-${realm}: ${allSelectors.size} distinct filters for ${allHostnames.size} distinct hostnames`);
+ log(`CSS-specific: ${allSelectors.size} distinct filters for ${allHostnames.size} distinct hostnames`);
return sortedHostnames.length + allRegexesOrPaths.size;
}
@@ -1126,9 +1127,8 @@ async function rulesetFromURLs(assetDetails) {
}
// Split cosmetic filters into two groups: declarative and procedural
- const declarativeCosmetic = new Map();
- const proceduralCosmetic = new Map();
const rejectedCosmetic = [];
+ const specificCosmetic = new Map();
if ( results.specificCosmetic ) {
for ( const [ selector, details ] of results.specificCosmetic ) {
if ( details.rejected ) {
@@ -1136,12 +1136,12 @@ async function rulesetFromURLs(assetDetails) {
continue;
}
if ( selector.startsWith('{') === false ) {
- declarativeCosmetic.set(selector, details);
- continue;
+ specificCosmetic.set(selector, details);
+ } else {
+ const parsed = JSON.parse(selector);
+ parsed.raw = undefined;
+ specificCosmetic.set(JSON.stringify(parsed), details);
}
- const parsed = JSON.parse(selector);
- parsed.raw = undefined;
- proceduralCosmetic.set(JSON.stringify(parsed), details);
}
}
if ( rejectedCosmetic.length !== 0 ) {
@@ -1174,19 +1174,13 @@ async function rulesetFromURLs(assetDetails) {
assetDetails,
results.genericCosmeticFilters,
results.genericCosmeticExceptions,
- declarativeCosmetic
+ specificCosmetic
);
const specificCosmeticStats = await processCosmeticFilters(
assetDetails,
- 'specific',
- declarativeCosmetic
+ specificCosmetic
);
- const proceduralStats = await processCosmeticFilters(
- assetDetails,
- 'procedural',
- proceduralCosmetic
- );
await processScriptletFilters(assetDetails, results.scriptlet);
rulesetDetails.push({
@@ -1218,7 +1212,6 @@ async function rulesetFromURLs(assetDetails) {
css: {
generic: genericCosmeticStats,
specific: specificCosmeticStats,
- procedural: proceduralStats,
},
popups: popupStats,
});
diff --git a/platform/mv3/scriptlets/css-procedural.template.js b/platform/mv3/scriptlets/css-procedural.template.js
deleted file mode 100644
index 0aaf6c67f1d7a..0000000000000
--- a/platform/mv3/scriptlets/css-procedural.template.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
-
- uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
- Copyright (C) 2014-present Raymond Hill
-
- This program 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.
-
- This program 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 this program. If not, see {http://www.gnu.org/licenses/}.
-
- Home: https://github.com/gorhill/uBlock
-*/
-
-// Important!
-// Isolate from global scope
-(function uBOL_cssProceduralImport() {
-
-/******************************************************************************/
-
-const rulesetId = self.$rulesetId$;
-
-self.proceduralImports = self.proceduralImports || [];
-self.proceduralImports.push(rulesetId);
-
-/******************************************************************************/
-
-})();
-
-/******************************************************************************/
From 2479484ba9786374a91045f9c5a334ec80b53cff Mon Sep 17 00:00:00 2001
From: Raymond Hill
Date: Fri, 22 May 2026 08:03:12 -0400
Subject: [PATCH 028/375] [mv3] Add old-school filter editor for filter list
authors
The filter editor is in the "Custom filters" pane in the dashboard,
and is available only when "Developer mode" is enabled.
The filter editor is also only available in browsers which
WebExtensions framework supports the `userScripts` and `offscreen`
APIs (so only Chromium-based browsers currently).
The filter editor's main purpose is as a tool for filter list
authors, it's not meant to be a replacement for importing filter
lists due to the maxium number of dynamic DNR rules allowed.
This is a first version with a list of TODOs, and some filter
syntaxes are currently not supported:
- not possible to `badfilter` a filter
- cosmetic exception filters do not apply to stock lists
- generic cosmetic filters are currently discarded
- `popup` filters are discarded
- `doc` filters can't trigger the strict-block page
---
.../mv3/extension/_locales/en/messages.json | 8 +-
platform/mv3/extension/css/develop.css | 73 +--
platform/mv3/extension/css/filter-editor.css | 49 ++
platform/mv3/extension/css/settings.css | 18 +-
platform/mv3/extension/dashboard.html | 7 +-
platform/mv3/extension/js/admin.js | 8 +-
platform/mv3/extension/js/background.js | 524 ++++++++----------
platform/mv3/extension/js/develop.js | 4 +-
platform/mv3/extension/js/ext.js | 7 +
platform/mv3/extension/js/filter-editor.js | 368 ++++++++++++
.../mv3/extension/js/filter-manager-ui.js | 25 +
platform/mv3/extension/js/filter-manager.js | 201 ++++---
...e-scriptlets.html => compile-filters.html} | 3 +-
.../extension/js/offscreen/compile-filters.js | 208 +++++++
.../js/offscreen/compile-scriptlets.js | 61 --
.../js/offscreen/css-sandbox.template.js | 117 ++++
.../js/offscreen/make-cosmetic-filters.js | 108 ++++
.../js/{ => offscreen}/make-scriptlets.js | 15 +-
.../js/offscreen/make-utils.js} | 16 +-
.../js/{ => offscreen}/safe-replace.js | 0
.../js/{ => offscreen}/scriptlet.template.js | 0
platform/mv3/extension/js/ruleset-manager.js | 5 +
.../mv3/extension/js/scripting-manager.js | 29 +-
.../extension/js/scripting/css-specific.js | 2 +-
.../extension/js/scripting/isolated-api.js | 2 +-
platform/mv3/extension/js/settings.js | 3 +
platform/mv3/extension/js/ubo-parser.js | 6 +-
.../extension/lib/codemirror/codemirror-ubol | 2 +-
platform/mv3/make-rulesets.js | 124 +----
src/js/codemirror/ubo-static-filtering.js | 1 +
src/js/regex-analyzer.js | 4 +-
src/js/static-net-filtering.js | 2 +
src/lib/regexanalyzer/CHANGES.md | 4 +
src/lib/regexanalyzer/regex.js | 4 +
tools/make-mv3.sh | 15 +-
35 files changed, 1378 insertions(+), 645 deletions(-)
create mode 100644 platform/mv3/extension/css/filter-editor.css
create mode 100644 platform/mv3/extension/js/filter-editor.js
rename platform/mv3/extension/js/offscreen/{compile-scriptlets.html => compile-filters.html} (71%)
create mode 100644 platform/mv3/extension/js/offscreen/compile-filters.js
delete mode 100644 platform/mv3/extension/js/offscreen/compile-scriptlets.js
create mode 100644 platform/mv3/extension/js/offscreen/css-sandbox.template.js
create mode 100644 platform/mv3/extension/js/offscreen/make-cosmetic-filters.js
rename platform/mv3/extension/js/{ => offscreen}/make-scriptlets.js (96%)
rename platform/mv3/{scriptlets/css-generichigh.template.css => extension/js/offscreen/make-utils.js} (66%)
rename platform/mv3/extension/js/{ => offscreen}/safe-replace.js (100%)
rename platform/mv3/extension/js/{ => offscreen}/scriptlet.template.js (100%)
diff --git a/platform/mv3/extension/_locales/en/messages.json b/platform/mv3/extension/_locales/en/messages.json
index 586a45aed0fae..9596a9395d6c3 100644
--- a/platform/mv3/extension/_locales/en/messages.json
+++ b/platform/mv3/extension/_locales/en/messages.json
@@ -263,6 +263,10 @@
"message": "When active, matching filters will automatically close unwanted browser tabs created by websites.",
"description": "Short description for a checkbox in the options page"
},
+ "sandboxEditorLabel": {
+ "message": "Filter-creation sandbox",
+ "description": "Header for filter-creation section in the dashboard"
+ },
"developerModeLabel": {
"message": "Developer mode",
"description": "Label for a checkbox in the options page"
@@ -303,11 +307,11 @@
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
"description": "Text warning about an incoming redirect"
},
- "strictblockNoParamsPrompt": {
+ "strictblockNoParamsPrompt": {
"message": "without parameters",
"description": "Label to be used for the parameter-less URL"
},
- "strictblockBack": {
+ "strictblockBack": {
"message": "Go back",
"description": "A button to go back to the previous web page"
},
diff --git a/platform/mv3/extension/css/develop.css b/platform/mv3/extension/css/develop.css
index 3f165443e04eb..bda0a4ee72f88 100644
--- a/platform/mv3/extension/css/develop.css
+++ b/platform/mv3/extension/css/develop.css
@@ -19,57 +19,58 @@ section[data-pane="develop"] > div > * {
margin-top: 1em;
}
-#cm-container {
+.cm-container {
flex-grow: 1;
font-size: var(--monospace-size);
- overflow: hidden;
+ max-height: stretch;
+ padding-bottom: 2em;
}
/* https://discuss.codemirror.net/t/how-to-set-max-height-of-the-editor/2882/2 */
-#cm-container .cm-editor {
+.cm-container .cm-editor {
background-color: var(--surface-0);
height: 100%;
}
-#cm-container .cm-editor .cm-line:has(.ubol-boundary) {
+.cm-container .cm-editor .cm-line:has(.ubol-boundary) {
background-image: url('line-hor-dashed.png'), url('line-hor-dashed.png');
background-position: left 3px, left calc(100% - 3px);
background-repeat: repeat-x;
}
-#cm-container .cm-editor {
+.cm-container .cm-editor {
color: var(--ink-1);
}
-:root.dark #cm-container .cm-editor {
+:root.dark .cm-container .cm-editor {
color: var(--ink-2);
}
-#cm-container .cm-editor .cm-line .ubol-comment {
+.cm-container .cm-editor .cm-line .ubol-comment {
color: #ba5300;
}
-:root.dark #cm-container .cm-editor .cm-line .ubol-comment {
+:root.dark .cm-container .cm-editor .cm-line .ubol-comment {
color: #fa7000;
}
-#cm-container .cm-editor .cm-line .ubol-keyword {
+.cm-container .cm-editor .cm-line .ubol-keyword {
color: #ae42be;
}
-:root.dark #cm-container .cm-editor .cm-line .ubol-keyword {
+:root.dark .cm-container .cm-editor .cm-line .ubol-keyword {
color: #ea59ff;
}
-#cm-container .cm-editor .cm-line .ubol-literal {
+.cm-container .cm-editor .cm-line .ubol-literal {
color: #168156;
}
-:root.dark #cm-container .cm-editor .cm-line .ubol-literal {
+:root.dark .cm-container .cm-editor .cm-line .ubol-literal {
color: #1dae74;
}
-#cm-container .cm-editor .cm-line.badline {
+.cm-container .cm-editor .cm-line.badline {
background-color: color-mix(in srgb, var(--info3-ink) 15%, transparent 85%);
}
-#cm-container .cm-editor .cm-line .badmark {
+.cm-container .cm-editor .cm-line .badmark {
text-decoration: underline var(--cm-negative) wavy;
text-decoration-skip-ink: none;
}
-#cm-container .cm-editor .cm-panel.cm-search {
+.cm-container .cm-editor .cm-panel.cm-search {
display: flex;
flex-wrap: wrap;
font-family: sans-serif;
@@ -78,13 +79,13 @@ section[data-pane="develop"] > div > * {
padding: 0.5em 1.5em 0.5em 0.5em;
}
-#cm-container .cm-editor .cm-panel.cm-search > * {
+.cm-container .cm-editor .cm-panel.cm-search > * {
margin: 0;
}
-#cm-container .cm-editor .cm-panel.cm-search .cm-textfield,
-#cm-container .cm-editor .cm-panel.cm-search .cm-button,
-#cm-container .cm-editor .cm-panel.cm-search label {
+.cm-container .cm-editor .cm-panel.cm-search .cm-textfield,
+.cm-container .cm-editor .cm-panel.cm-search .cm-button,
+.cm-container .cm-editor .cm-panel.cm-search label {
background-image: inherit;
border: inherit;
flex-grow: 0;
@@ -92,11 +93,11 @@ section[data-pane="develop"] > div > * {
min-height: calc(var(--button-font-size) * 1.8);
}
-#cm-container .cm-editor .cm-panel .warning {
+.cm-container .cm-editor .cm-panel .warning {
color: var(--info3-ink);
}
-#cm-container .cm-editor .cm-panel.io-panel {
+.cm-container .cm-editor .cm-panel.io-panel {
background-color: var(--surface-1);
box-sizing: border-box;
display: inline-flex;
@@ -105,64 +106,64 @@ section[data-pane="develop"] > div > * {
padding-inline-start: 0;
width: 100%;
}
-#cm-container .cm-editor .cm-panel.io-panel button {
+.cm-container .cm-editor .cm-panel.io-panel button {
min-height: 30px;
}
-#cm-container .cm-editor .cm-panel.io-panel button#revert {
+.cm-container .cm-editor .cm-panel.io-panel button#revert {
margin-inline-end: 1em;
}
-#cm-container .cm-editor .cm-panel.io-panel:not([data-io~="apply"]) button#apply {
+.cm-container .cm-editor .cm-panel.io-panel:not([data-io~="apply"]) button#apply {
display: none;
}
-#cm-container .cm-editor .cm-panel.io-panel:not([data-io~="revert"]) button#revert {
+.cm-container .cm-editor .cm-panel.io-panel:not([data-io~="revert"]) button#revert {
display: none;
}
-#cm-container .cm-editor .cm-panel.io-panel:not([data-io~="import"]) button#import {
+.cm-container .cm-editor .cm-panel.io-panel:not([data-io~="import"]) button#import {
display: none;
}
-#cm-container .cm-editor .cm-panel.io-panel:not([data-io~="export"]) button#export {
+.cm-container .cm-editor .cm-panel.io-panel:not([data-io~="export"]) button#export {
display: none;
}
-#cm-container .cm-editor .cm-panel.info-panel {
+.cm-container .cm-editor .cm-panel.info-panel {
display: flex;
flex-wrap: nowrap;
font-size: var(--font-size);
padding: var(--default-gap-xxsmall) var(--default-gap-xsmall);
}
-#cm-container .cm-editor .cm-panel.info-panel .info {
+.cm-container .cm-editor .cm-panel.info-panel .info {
flex-grow: 1;
overflow: auto;
}
-#cm-container .cm-editor .cm-panel.info-panel .close {
+.cm-container .cm-editor .cm-panel.info-panel .close {
cursor: default;
flex-shrink: 0;
padding-inline-start: 1em;
}
-#cm-container .cm-editor .cm-panel.info-panel .close::after {
+.cm-container .cm-editor .cm-panel.info-panel .close::after {
content: '\2715';
}
-#cm-container .cm-editor .cm-panel.summary-panel {
+.cm-container .cm-editor .cm-panel.summary-panel {
background-color: color-mix(in srgb, var(--info1-ink) 15%, transparent 85%);
gap: 1em;
}
-#cm-container .cm-editor .cm-panel.summary-panel .info {
+.cm-container .cm-editor .cm-panel.summary-panel .info {
flex-shrink: 0;
}
-#cm-container .cm-editor .cm-panel.feedback-panel {
+.cm-container .cm-editor .cm-panel.feedback-panel {
background-color: color-mix(in srgb, var(--info3-ink) 15%, transparent 85%);
white-space: pre;
max-height: 10cqh;
}
-#cm-container .cm-editor .cm-gutterElement {
+.cm-container .cm-editor .cm-gutterElement {
cursor: default;
user-select: none;
}
-#cm-container .cm-editor .cm-tooltip .badmark-tooltip {
+.cm-container .cm-editor .cm-tooltip .badmark-tooltip {
background-color: color-mix(in srgb, var(--info3-ink) 15%, transparent 85%);
padding: var(--default-gap-xxsmall) var(--default-gap-xsmall);
}
\ No newline at end of file
diff --git a/platform/mv3/extension/css/filter-editor.css b/platform/mv3/extension/css/filter-editor.css
new file mode 100644
index 0000000000000..b9953890cdb2a
--- /dev/null
+++ b/platform/mv3/extension/css/filter-editor.css
@@ -0,0 +1,49 @@
+.sfp_comment {
+ color: var(--sf-comment-ink);
+ }
+.sfp_def {
+ color: var(--sf-def-ink);
+ }
+.sfp_directive {
+ color: var(--sf-directive-ink);
+ font-weight: bold;
+ }
+.sfp_error {
+ color: inherit;
+ }
+.sfp-ext-dom {
+ }
+.sfp-ext-html {
+ }
+.sfp-ext-js {
+ }
+.sfp_keyword {
+ color: var(--sf-keyword-ink);
+ }
+.sfp_link {
+ text-decoration: none;
+ }
+.sfp-net {
+ }
+.sfp_notice {
+ text-decoration-color: var(--sf-notice-ink);
+ text-decoration-style: solid;
+ text-decoration-line: underline;
+ }
+.sfp_strong {
+ font-weight: bold;
+ }
+.sfp_tag {
+ color: var(--sf-tag-ink);
+ }
+.sfp_unicode {
+ text-decoration-color: var(--sf-unicode-ink);
+ text-decoration-style: dashed;
+ text-decoration-line: underline;
+ }
+.sfp_value {
+ color: var(--sf-value-ink);
+ }
+.sfp_variable {
+ color: var(--sf-variable-ink);
+ }
diff --git a/platform/mv3/extension/css/settings.css b/platform/mv3/extension/css/settings.css
index 8dfae49cbd8c5..2541efea76f7a 100644
--- a/platform/mv3/extension/css/settings.css
+++ b/platform/mv3/extension/css/settings.css
@@ -320,11 +320,8 @@ html.desktop section[data-pane="filters"] li > div:hover {
html.desktop section[data-pane="filters"] li > div span.fa-icon:hover {
transform: scale(1.3);
}
-section[data-pane="filters"] aside {
- padding: 1em 0.5em;
- }
section[data-pane="filters"] aside details {
- padding: 0;
+ padding: 1em 0;
}
section[data-pane="filters"] aside summary {
cursor: default;
@@ -333,7 +330,7 @@ section[data-pane="filters"] aside summary {
section[data-pane="filters"] aside .importFromText {
color: var(--ink-2);
}
-section[data-pane="filters"] aside .importFromText textarea {
+section[data-pane="filters"] aside textarea {
background-color: var(--surface-1);
border: 1px solid var(--border-1);
box-sizing: border-box;
@@ -341,7 +338,7 @@ section[data-pane="filters"] aside .importFromText textarea {
resize: vertical;
width: 100%;
}
-section[data-pane="filters"] aside .importFromText textarea:focus {
+section[data-pane="filters"] aside textarea:focus {
background-color: var(--surface-0);
}
section[data-pane="filters"] aside .importFromText:has(textarea:placeholder-shown) button:has([data-i18n="addButton"]) {
@@ -359,6 +356,15 @@ section[data-pane="filters"] aside p {
section[data-pane="filters"] li.error[data-pretty] > div span[contenteditable] {
color: var(--info3-ink);
}
+body:not([data-supports~="user-scripts"]) section[data-pane="filters"] aside#sandboxEditor {
+ display: none;
+ }
+section[data-pane="filters"] aside#sandboxEditor .cm-scroller {
+ max-height: 480px;
+ }
+body:not([data-develop="true"]) section[data-pane="filters"] aside#sandboxEditor {
+ display: none;
+ }
@media (max-width: 480px) {
#defaultFilteringMode {
diff --git a/platform/mv3/extension/dashboard.html b/platform/mv3/extension/dashboard.html
index 5d958fe5cb113..e9d1e347ce3a5 100644
--- a/platform/mv3/extension/dashboard.html
+++ b/platform/mv3/extension/dashboard.html
@@ -13,6 +13,7 @@
+
@@ -129,6 +130,10 @@