diff --git a/platform/mv3/extension/js/filter-lists.js b/platform/mv3/extension/js/filter-lists.js index a609a7d53..1cb54e78b 100644 --- a/platform/mv3/extension/js/filter-lists.js +++ b/platform/mv3/extension/js/filter-lists.js @@ -29,7 +29,7 @@ import { hashFromIterable } from './dashboard.js'; export const rulesetMap = new Map(); let cachedRulesetData = {}; -let hideUnusedSet = new Set([ 'regions' ]); +let hideUnusedSet = new Set([ 'ads', 'regions' ]); /******************************************************************************/ @@ -218,6 +218,11 @@ export function renderFilterLists(rulesetData) { rulesetDetails.filter(ruleset => ruleset.group === 'default' ), + ], [ + 'ads', + rulesetDetails.filter(ruleset => + ruleset.group === 'ads' + ), ], [ 'privacy', rulesetDetails.filter(ruleset => diff --git a/platform/mv3/extension/js/ruleset-manager.js b/platform/mv3/extension/js/ruleset-manager.js index 0bcf23fb4..d87133fc9 100644 --- a/platform/mv3/extension/js/ruleset-manager.js +++ b/platform/mv3/extension/js/ruleset-manager.js @@ -476,7 +476,7 @@ async function filteringModesToDNR(modes) { /******************************************************************************/ -async function defaultRulesetsFromLanguage() { +async function defaultRulesetsFromEnv() { const dropCountry = lang => { const pos = lang.indexOf('-'); if ( pos === -1 ) { return lang; } @@ -494,6 +494,10 @@ async function defaultRulesetsFromLanguage() { `\\b(${Array.from(langSet).join('|')})\\b` ); + const reMobile = /\bMobile\b/.test(navigator.userAgent) + ? /\bmobile\b/ + : null + const rulesetDetails = await getRulesetDetails(); const out = []; for ( const ruleset of rulesetDetails.values() ) { @@ -502,10 +506,20 @@ async function defaultRulesetsFromLanguage() { out.push(id); continue; } - if ( typeof ruleset.lang !== 'string' ) { continue; } - if ( reTargetLang.test(ruleset.lang) === false ) { continue; } - out.push(id); + if ( typeof ruleset.lang === 'string' ) { + if ( reTargetLang.test(ruleset.lang) ) { + out.push(id); + continue; + } + } + if ( typeof ruleset.tags === 'string' ) { + if ( reMobile?.test(ruleset.tags) ) { + out.push(id); + continue; + } + } } + return out; } @@ -518,7 +532,7 @@ async function patchDefaultRulesets() { staticRulesetIds, ] = await Promise.all([ localRead('defaultRulesetIds'), - defaultRulesetsFromLanguage(), + defaultRulesetsFromEnv(), getStaticRulesets().then(r => r.map(a => a.id)), ]); const toAdd = []; @@ -649,7 +663,6 @@ async function getEnabledRulesetsDetails() { /******************************************************************************/ export { - defaultRulesetsFromLanguage, enableRulesets, excludeFromStrictBlock, filteringModesToDNR, diff --git a/platform/mv3/rulesets.json b/platform/mv3/rulesets.json index 7bcd6d9da..07efaf5f5 100644 --- a/platform/mv3/rulesets.json +++ b/platform/mv3/rulesets.json @@ -63,6 +63,17 @@ ], "homeURL": "https://gitlab.com/malware-filter/urlhaus-filter" }, + { + "id": "adguard-mobile", + "name": "AdGuard – Mobile Ads", + "group": "ads", + "enabled": false, + "tags": "mobile", + "urls": [ + "https://filters.adtidy.org/extension/ublock/filters/11.txt" + ], + "homeURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, { "id": "block-lan", "name": "Block Outsider Intrusion into LAN",