mirror of
https://github.com/gorhill/uBlock.git
synced 2026-03-11 09:04:36 +00:00
[mv3] Add admin setting defaultFiltering
Setting name: "defaultFiltering" Type: string Valid values: "none", "basic", "optimal", "complete" Additionally, fix default "basic" mode toggling back to "optimal" upon extension restart when uBOL has broad host permissions. The default mode will toggle automatically only when there is a change in broad host permissions status.
This commit is contained in:
parent
3b34f9439a
commit
b8adf5b027
4 changed files with 49 additions and 4 deletions
|
|
@ -31,6 +31,7 @@ import {
|
|||
} from './ruleset-manager.js';
|
||||
|
||||
import {
|
||||
getDefaultFilteringMode,
|
||||
getTrustedSites,
|
||||
readFilteringModeDetails,
|
||||
} from './mode-manager.js';
|
||||
|
|
@ -66,6 +67,13 @@ const adminSettings = {
|
|||
const [ adminRulesets, enabledRulesets ] = results;
|
||||
broadcastMessage({ adminRulesets, enabledRulesets });
|
||||
}
|
||||
if ( this.keys.has('defaultFiltering') ) {
|
||||
ubolLog('admin setting "defaultFiltering" changed');
|
||||
await readFilteringModeDetails(true);
|
||||
await registerInjectables();
|
||||
const defaultFilteringMode = await getDefaultFilteringMode();
|
||||
broadcastMessage({ defaultFilteringMode });
|
||||
}
|
||||
if ( this.keys.has('noFiltering') ) {
|
||||
ubolLog('admin setting "noFiltering" changed');
|
||||
await readFilteringModeDetails(true);
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ export const rulesetConfig = {
|
|||
showBlockedCount: true,
|
||||
strictBlockMode: true,
|
||||
developerMode: false,
|
||||
hasBroadHostPermissions: true,
|
||||
};
|
||||
|
||||
export const process = {
|
||||
|
|
|
|||
|
|
@ -33,6 +33,11 @@ import {
|
|||
sessionRead, sessionWrite,
|
||||
} from './ext.js';
|
||||
|
||||
import {
|
||||
rulesetConfig,
|
||||
saveRulesetConfig,
|
||||
} from './config.js';
|
||||
|
||||
import { adminReadEx } from './admin.js';
|
||||
import { filteringModesToDNR } from './ruleset-manager.js';
|
||||
|
||||
|
|
@ -219,14 +224,31 @@ export async function readFilteringModeDetails(bypassCache = false) {
|
|||
return readFilteringModeDetails.cache;
|
||||
}
|
||||
}
|
||||
let [ userModes, adminNoFiltering ] = await Promise.all([
|
||||
let [
|
||||
userModes,
|
||||
adminDefaultFiltering,
|
||||
adminNoFiltering,
|
||||
] = await Promise.all([
|
||||
localRead('filteringModeDetails'),
|
||||
adminReadEx('defaultFiltering'),
|
||||
adminReadEx('noFiltering'),
|
||||
]);
|
||||
if ( userModes === undefined ) {
|
||||
userModes = { optimal: [ 'all-urls' ] };
|
||||
}
|
||||
userModes = unserializeModeDetails(userModes);
|
||||
if ( adminDefaultFiltering !== undefined ) {
|
||||
const modefromName = {
|
||||
none: MODE_NONE,
|
||||
basic: MODE_BASIC,
|
||||
optimal: MODE_OPTIMAL,
|
||||
complete: MODE_COMPLETE,
|
||||
};
|
||||
const adminDefaultFilteringMode = modefromName[adminDefaultFiltering];
|
||||
if ( adminDefaultFilteringMode !== undefined ) {
|
||||
applyFilteringMode(userModes, 'all-urls', adminDefaultFilteringMode);
|
||||
}
|
||||
}
|
||||
if ( Array.isArray(adminNoFiltering) ) {
|
||||
if ( adminNoFiltering.includes('-*') ) {
|
||||
userModes.none.clear();
|
||||
|
|
@ -341,19 +363,29 @@ export async function setTrustedSites(hostnames) {
|
|||
/******************************************************************************/
|
||||
|
||||
export async function syncWithBrowserPermissions() {
|
||||
const [ permissions, beforeMode ] = await Promise.all([
|
||||
const [
|
||||
permissions,
|
||||
beforeMode,
|
||||
] = await Promise.all([
|
||||
browser.permissions.getAll(),
|
||||
getDefaultFilteringMode(),
|
||||
]);
|
||||
const allowedHostnames = new Set(hostnamesFromMatches(permissions.origins || []));
|
||||
const hasBroadHostPermissions = allowedHostnames.has('all-urls');
|
||||
const broadHostPermissionsToggled =
|
||||
hasBroadHostPermissions !== rulesetConfig.hasBroadHostPermissions;
|
||||
let modified = false;
|
||||
if ( beforeMode > MODE_BASIC && allowedHostnames.has('all-urls') === false ) {
|
||||
if ( beforeMode > MODE_BASIC && hasBroadHostPermissions === false ) {
|
||||
await setDefaultFilteringMode(MODE_BASIC);
|
||||
modified = true;
|
||||
} else if ( beforeMode === MODE_BASIC && allowedHostnames.has('all-urls') ) {
|
||||
} else if ( beforeMode === MODE_BASIC && hasBroadHostPermissions && broadHostPermissionsToggled ) {
|
||||
await setDefaultFilteringMode(MODE_OPTIMAL);
|
||||
modified = true;
|
||||
}
|
||||
if ( broadHostPermissionsToggled ) {
|
||||
rulesetConfig.hasBroadHostPermissions = hasBroadHostPermissions;
|
||||
saveRulesetConfig();
|
||||
}
|
||||
const afterMode = await getDefaultFilteringMode();
|
||||
if ( afterMode > MODE_BASIC ) { return afterMode !== beforeMode; }
|
||||
const filteringModes = await getFilteringModeDetails();
|
||||
|
|
|
|||
|
|
@ -2,6 +2,10 @@
|
|||
"$schema": "http://json-schema.org/draft-03/schema#",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"defaultFiltering": {
|
||||
"title": "The default filtering mode",
|
||||
"type": "string",
|
||||
},
|
||||
"noFiltering": {
|
||||
"title": "List of domains for which no filtering should occur",
|
||||
"type": "array",
|
||||
|
|
|
|||
Loading…
Reference in a new issue