diff --git a/extension-manifest-v2/package.json b/extension-manifest-v2/package.json index 387f3afe7..a8ee0b97b 100644 --- a/extension-manifest-v2/package.json +++ b/extension-manifest-v2/package.json @@ -37,8 +37,8 @@ }, "homepage": "https://github.com/ghostery/ghostery-extension#readme", "dependencies": { - "@cliqz/adblocker": "^1.26.12", - "@cliqz/adblocker-webextension": "^1.26.12", + "@cliqz/adblocker": "^1.27.0", + "@cliqz/adblocker-webextension": "^1.27.0", "@cliqz/url-parser": "^1.1.5", "@duckduckgo/autoconsent": "^10.3.2", "@ghostery/libs": "^1.0.0", diff --git a/extension-manifest-v3/package.json b/extension-manifest-v3/package.json index 50902c3b1..889ec435f 100644 --- a/extension-manifest-v3/package.json +++ b/extension-manifest-v3/package.json @@ -31,8 +31,8 @@ "web-ext": "^7.11.0" }, "dependencies": { - "@cliqz/adblocker": "^1.26.12", - "@cliqz/adblocker-webextension-cosmetics": "^1.26.12", + "@cliqz/adblocker": "^1.27.0", + "@cliqz/adblocker-webextension-cosmetics": "^1.27.0", "@duckduckgo/autoconsent": "^10.3.2", "@ghostery/libs": "^1.0.0", "@ghostery/trackers-preview": "^1.0.0", diff --git a/extension-manifest-v3/src/pages/settings/components/custom-filters.js b/extension-manifest-v3/src/pages/settings/components/custom-filters.js index 9e27ee693..0c1a7b050 100644 --- a/extension-manifest-v3/src/pages/settings/components/custom-filters.js +++ b/extension-manifest-v3/src/pages/settings/components/custom-filters.js @@ -44,7 +44,7 @@ function parseFilters(text = '') { } async function submitFilters(host) { - const { networkFilters, cosmeticFilters } = host.filters; + const { networkFilters } = host.filters; // Update DNR if (__PLATFORM__ !== 'firefox') { @@ -75,7 +75,7 @@ async function submitFilters(host) { // Update engine await chrome.runtime.sendMessage({ action: 'customFilters:engine', - filters: [...networkFilters, ...cosmeticFilters].join('\n'), + filters: host.input.text, }); // Save input diff --git a/extension-manifest-v3/src/utils/engines.js b/extension-manifest-v3/src/utils/engines.js index 453ae0b17..5a573f571 100644 --- a/extension-manifest-v3/src/utils/engines.js +++ b/extension-manifest-v3/src/utils/engines.js @@ -22,6 +22,32 @@ import { registerDatabase } from '/utils/indexeddb.js'; export const CUSTOM_ENGINE = 'custom-filters'; +const checkUserAgent = (pattern) => navigator.userAgent.indexOf(pattern) !== -1; + +const ENV = new Map([ + ['ext_ghostery', true], + ['cap_html_filtering', checkUserAgent('Firefox')], + ['env_firefox', checkUserAgent('Firefox')], + ['env_chromium', checkUserAgent('Chrome')], + ['env_edge', checkUserAgent('Edg')], + ['env_mobile', checkUserAgent('Mobile')], +]); + +function deserializeEngine(engineBytes) { + const engine = FiltersEngine.deserialize(engineBytes); + engine.updateEnv(ENV); + return engine; +} + +function parseFilters(filters) { + const config = new Config({ + enableHtmlFiltering: ENV.get('cap_html_filtering'), + }); + const engine = FiltersEngine.parse(filters, config); + engine.updateEnv(ENV); + return engine; +} + const engines = new Map(); function loadFromMemory(name) { @@ -94,7 +120,7 @@ async function loadFromStorage(name) { const engineBytes = await table.get(name); if (engineBytes) { - const engine = FiltersEngine.deserialize(engineBytes); + const engine = deserializeEngine(engineBytes); shareExceptions(name, engine); saveToMemory(name, engine); @@ -190,8 +216,7 @@ async function update(name) { .then((res) => res.arrayBuffer()); const engineBytes = new Uint8Array(arrayBuffer); - engine = FiltersEngine.deserialize(engineBytes); - + engine = deserializeEngine(engineBytes); shareExceptions(name, engine); // Save the new engine to memory and storage saveToMemory(name, engine); @@ -280,7 +305,7 @@ async function update(name) { // `engine.update` method will return `true` if anything was // updated and `false` otherwise. const cumulativeDiff = mergeDiffs(diffs); - let updated = engine.updateFromDiff(cumulativeDiff); + let updated = engine.updateFromDiff(cumulativeDiff, ENV); // Last but not least, check if resources.txt should be updated. This can be // done independently of filters as the data is stored in a separate object. @@ -325,8 +350,7 @@ async function loadFromDisk(name) { ); const engineBytes = new Uint8Array(await response.arrayBuffer()); - const engine = FiltersEngine.deserialize(engineBytes); - + const engine = deserializeEngine(engineBytes); shareExceptions(name, engine); saveToMemory(name, engine); saveToStorage(name); @@ -374,10 +398,7 @@ export async function init(name) { } export async function createCustomEngine(filters = '') { - const config = new Config({ - enableHtmlFiltering: true, - }); - const engine = FiltersEngine.parse(filters, config); + const engine = parseFilters(filters); saveToMemory(CUSTOM_ENGINE, engine); saveToStorage(CUSTOM_ENGINE); diff --git a/package-lock.json b/package-lock.json index ddc4751ce..1ae275fdc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,8 +32,8 @@ "hasInstallScript": true, "license": "MPL-2.0", "dependencies": { - "@cliqz/adblocker": "^1.26.12", - "@cliqz/adblocker-webextension": "^1.26.12", + "@cliqz/adblocker": "^1.27.0", + "@cliqz/adblocker-webextension": "^1.27.0", "@cliqz/url-parser": "^1.1.5", "@duckduckgo/autoconsent": "^10.3.2", "@ghostery/libs": "^1.0.0", @@ -110,8 +110,8 @@ "hasInstallScript": true, "license": "MPL-2.0", "dependencies": { - "@cliqz/adblocker": "^1.26.12", - "@cliqz/adblocker-webextension-cosmetics": "^1.26.12", + "@cliqz/adblocker": "^1.27.0", + "@cliqz/adblocker-webextension-cosmetics": "^1.27.0", "@duckduckgo/autoconsent": "^10.3.2", "@ghostery/libs": "^1.0.0", "@ghostery/trackers-preview": "^1.0.0", @@ -722,51 +722,51 @@ } }, "node_modules/@cliqz/adblocker": { - "version": "1.26.15", - "resolved": "https://registry.npmjs.org/@cliqz/adblocker/-/adblocker-1.26.15.tgz", - "integrity": "sha512-qmrQd0a6DC+HXWvamezwtdg91mvdyvrmufcg0l/I2EGJV1nLC81S81/Fln3TnJiJTuC7rqko6pq2E+GfoDdRPg==", + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@cliqz/adblocker/-/adblocker-1.27.0.tgz", + "integrity": "sha512-et4TMfy5Y2DNRr05pKVsVOuwFhRseaf7Z3xCMBTAuQTAbgiOJtaWsD7Dl5H/mitLxYA7owXRN+afThZ3pb1rYg==", "dependencies": { - "@cliqz/adblocker-content": "^1.26.15", - "@cliqz/adblocker-extended-selectors": "^1.26.15", + "@cliqz/adblocker-content": "^1.27.0", + "@cliqz/adblocker-extended-selectors": "^1.27.0", "@remusao/guess-url-type": "^1.2.1", "@remusao/small": "^1.2.1", "@remusao/smaz": "^1.9.1", - "@types/chrome": "^0.0.256", + "@types/chrome": "^0.0.263", "@types/firefox-webext-browser": "^120.0.0", "tldts-experimental": "^6.0.14" } }, "node_modules/@cliqz/adblocker-content": { - "version": "1.26.15", - "resolved": "https://registry.npmjs.org/@cliqz/adblocker-content/-/adblocker-content-1.26.15.tgz", - "integrity": "sha512-F1G+HCVW1SjCtHihXdh4iR6JeuI/50agBPl4EmAmZhlC2ALLAf0kZDswNr2L5sNQ1/j1XBbeNzu4YrDonnq7NQ==", + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@cliqz/adblocker-content/-/adblocker-content-1.27.0.tgz", + "integrity": "sha512-53AZF6pXRkrcBPlppe4F9HQtRWtSC4hUHl5RCRlfxHVMDH8kqVHktyeKpB4cjoIyH19av9mYQ66f7JBC+Bk/Bg==", "dependencies": { - "@cliqz/adblocker-extended-selectors": "^1.26.15" + "@cliqz/adblocker-extended-selectors": "^1.27.0" } }, "node_modules/@cliqz/adblocker-extended-selectors": { - "version": "1.26.15", - "resolved": "https://registry.npmjs.org/@cliqz/adblocker-extended-selectors/-/adblocker-extended-selectors-1.26.15.tgz", - "integrity": "sha512-dM51IMHrRjQPj0JnoYfIBRoG9q9yYKQ7uDW27wfy0QW4pqlGRkEuHjXKK2dC8aOWUgNjDypnzWxfUMf7v0lEXA==" + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@cliqz/adblocker-extended-selectors/-/adblocker-extended-selectors-1.27.0.tgz", + "integrity": "sha512-NeXJSFQ6K2APg6xSHcDNmr5FREyxlMeQvinftGa2wL0UGYRMpAk0jM+lTLxi7IfO7eEqIQzc72hqo0dwUuvbhg==" }, "node_modules/@cliqz/adblocker-webextension": { - "version": "1.26.15", - "resolved": "https://registry.npmjs.org/@cliqz/adblocker-webextension/-/adblocker-webextension-1.26.15.tgz", - "integrity": "sha512-ZKyA276V4B4R21tE3C6zMDDjYmpmsa6KRlNhvisY+5G7uHGQUnB5KxcudsPpIGjKgNHQsmKdfxdTVJLRW2Qk1g==", + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@cliqz/adblocker-webextension/-/adblocker-webextension-1.27.0.tgz", + "integrity": "sha512-c6rR8ZCdckjgNgMoU7aWDietavc5EzTXMI8P/jz5eJnVVq7MmXEJ4dDPf7CWHk1S/uygbxOjvpsLGFyivLP9AA==", "dependencies": { - "@cliqz/adblocker": "^1.26.15", - "@cliqz/adblocker-content": "^1.26.15", + "@cliqz/adblocker": "^1.27.0", + "@cliqz/adblocker-content": "^1.27.0", "tldts-experimental": "^6.0.14", "webextension-polyfill-ts": "^0.26.0" } }, "node_modules/@cliqz/adblocker-webextension-cosmetics": { - "version": "1.26.15", - "resolved": "https://registry.npmjs.org/@cliqz/adblocker-webextension-cosmetics/-/adblocker-webextension-cosmetics-1.26.15.tgz", - "integrity": "sha512-lAb1acO+4adb9zL+pbUgdj5z+maA33unUO+zgk1lZfA7dVtEFOnMl9HKp8e03yus3XSZ765omnz+IvZDZXw7GA==", + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@cliqz/adblocker-webextension-cosmetics/-/adblocker-webextension-cosmetics-1.27.0.tgz", + "integrity": "sha512-VAjg6k90SLWtSwOYfdUwmdkqtrhqSPqxFK9cVIXeJ0A6n+lgIvgMQBsHjc3r/w1KNvAcC9TYulFEZFQNOFssMg==", "dependencies": { - "@cliqz/adblocker-content": "^1.26.15", - "@cliqz/adblocker-extended-selectors": "^1.26.15" + "@cliqz/adblocker-content": "^1.27.0", + "@cliqz/adblocker-extended-selectors": "^1.27.0" } }, "node_modules/@cliqz/url-parser": { @@ -3339,9 +3339,9 @@ } }, "node_modules/@types/chrome": { - "version": "0.0.256", - "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.256.tgz", - "integrity": "sha512-NleTQw4DNzhPwObLNuQ3i3nvX1rZ1mgnx5FNHc2KP+Cj1fgd3BrT5yQ6Xvs+7H0kNsYxCY+lxhiCwsqq3JwtEg==", + "version": "0.0.263", + "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.263.tgz", + "integrity": "sha512-As0vzv99ov3M6ZR7R6VzhMWFZXkPMrFrCEXXVrMN576Cm70fTkj7Df2CF+qEo170JepX50pd11cX6O4DSAtl2Q==", "dependencies": { "@types/filesystem": "*", "@types/har-format": "*" @@ -3374,17 +3374,17 @@ "dev": true }, "node_modules/@types/filesystem": { - "version": "0.0.35", - "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.35.tgz", - "integrity": "sha512-1eKvCaIBdrD2mmMgy5dwh564rVvfEhZTWVQQGRNn0Nt4ZEnJ0C8oSUCzvMKRA4lGde5oEVo+q2MrTTbV/GHDCQ==", + "version": "0.0.36", + "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.36.tgz", + "integrity": "sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==", "dependencies": { "@types/filewriter": "*" } }, "node_modules/@types/filewriter": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.32.tgz", - "integrity": "sha512-Kpi2GXQyYJdjL8mFclL1eDgihn1SIzorMZjD94kdPZh9E4VxGOeyjPxi5LpsM4Zku7P0reqegZTt2GxhmA9VBg==" + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.33.tgz", + "integrity": "sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==" }, "node_modules/@types/firefox-webext-browser": { "version": "120.0.0", @@ -4144,9 +4144,9 @@ } }, "node_modules/addons-linter/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -9487,13 +9487,13 @@ } }, "node_modules/ghostery-common": { - "version": "1.3.14", - "resolved": "https://registry.npmjs.org/ghostery-common/-/ghostery-common-1.3.14.tgz", - "integrity": "sha512-HIxtBvCljPaoMh2OfnWn3UB2cqLSKsfhjsyGNS28ZUV+siUxzEnM4iVC5M2d/yqx1wGpzN/i3InAyB8dDFAMRQ==", + "version": "1.3.15", + "resolved": "https://registry.npmjs.org/ghostery-common/-/ghostery-common-1.3.15.tgz", + "integrity": "sha512-C1rsDKpAmpDxFZ51mufEKL4xtRSP9X6j7sQCKC+peVauPccnz35Pk4Ac6tzGltUflHVNsT5mdfO3YoB7QD5eqA==", "dependencies": { "@cliqz-oss/dexie": "^2.0.4", - "@cliqz/adblocker-webextension": "^1.26.9", - "@cliqz/adblocker-webextension-cosmetics": "^1.26.9", + "@cliqz/adblocker-webextension": "^1.27.0", + "@cliqz/adblocker-webextension-cosmetics": "^1.27.0", "@cliqz/url-parser": "^1.1.5", "abortcontroller-polyfill": "^1.5.0", "anonymous-credentials": "https://github.com/whotracksme/anonymous-credentials/releases/download/1.0.0/anonymous-credentials-1.0.0.tgz",