8000 [mv3] Add admin setting `defaultFiltering` · gorhill/uBlock@b8adf5b · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Commit b8adf5b

Browse files
committed
[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.
1 parent 3b34f94 commit b8adf5b

File tree

4 files changed

+49
-4
lines changed

4 files changed

+49
-4
lines changed

platform/mv3/extension/js/admin.js

+8
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import {
3131
} from './ruleset-manager.js';
3232

3333
import {
34+
getDefaultFilteringMode,
3435
getTrustedSites,
3536
readFilteringModeDetails,
3637
} from './mode-manager.js';
@@ -66,6 +67,13 @@ const adminSettings = {
6667
const [ adminRulesets, enabledRulesets ] = results;
6768
broadcastMessage({ adminRulesets, enabledRulesets });
6869
}
70+
if ( this.keys.has('defaultFiltering') ) {
71+
ubolLog('admin setting "defaultFiltering" changed');
72+
await readFilteringModeDetails(true);
73+
await registerInjectables();
74+
const defaultFilteringMode = await getDefaultFilteringMode();
75+
broadcastMessage({ defaultFilteringMode });
76+
}
6977
if ( this.keys.has('noFiltering') ) {
7078
ubolLog('admin setting "noFiltering" changed');
7179
await readFilteringModeDetails(true);

platform/mv3/extension/js/config.js

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export const rulesetConfig = {
3333
showBlockedCount: true,
3434
strictBlockMode: true,
3535
developerMode: false,
36+
hasBroadHostPermissions: true,
3637
};
3738

3839
export const process = {

platform/mv3/extension/js/mode-manager.js

+36-4
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ import {
3333
sessionRead, sessionWrite,
3434
} from './ext.js';
3535

36+
import {
37+
rulesetConfig,
38+
saveRulesetConfig,
39+
} from './config.js';
40+
3641
import { adminReadEx } from './admin.js';
3742
import { filteringModesToDNR } from './ruleset-manager.js';
3843

@@ -219,14 +224,31 @@ export async function readFilteringModeDetails(bypassCache = false) {
219224
return readFilteringModeDetails.cache;
220225
}
221226
}
222-
let [ userModes, adminNoFiltering ] = await Promise.all([
227+
let [
228+
userModes,
229+
adminDefaultFiltering,
230+
adminNoFiltering,
231+
] = await Promise.all([
223232
localRead('filteringModeDetails'),
233+
adminReadEx('defaultFiltering'),
224234
adminReadEx('noFiltering'),
225235
]);
226236
if ( userModes === undefined ) {
227237
userModes = { optimal: [ 'all-urls' ] };
228238
}
229239
userModes = unserializeModeDetails(userModes);
240+
if ( adminDefaultFiltering !== undefined ) {
241+
const modefromName = {
242+
none: MODE_NONE,
243+
basic: MODE_BASIC,
244+
optimal: MODE_OPTIMAL,
245+
complete: MODE_COMPLETE,
246+
};
247+
const adminDefaultFilteringMode = modefromName[adminDefaultFiltering];
248+
if ( adminDefaultFilteringMode !== undefined ) {
249+
applyFilteringMode(userModes, 'all-urls', adminDefaultFilteringMode);
250+
}
251+
}
230252
if ( Array.isArray(adminNoFiltering) ) {
231253
if ( adminNoFiltering.includes('-*') ) {
232254
userModes.none.clear();
@@ -341,19 +363,29 @@ export async function setTrustedSites(hostnames) {
341363
/******************************************************************************/
342364

343365
export async function syncWithBrowserPermissions() {
344-
const [ permissions, beforeMode ] = await Promise.all([
366+
const [
367+
permissions,
368+
beforeMode,
369+
] = await Promise.all([
345370
browser.permissions.getAll(),
346371
getDefaultFilteringMode(),
347372
]);
348373
const allowedHostnames = new Set(hostnamesFromMatches(permissions.origins || []));
374+
const hasBroadHostPermissions = allowedHostnames.has('all-urls');
375+
const broadHostPermissionsToggled =
376+
hasBroadHostPermissions !== rulesetConfig.hasBroadHostPermissions;
349377
let modified = false;
350-
if ( beforeMode > MODE_BASIC && allowedHostnames.has('all-urls') === false ) {
378+
if ( beforeMode > MODE_BASIC && hasBroadHostPermissions === false ) {
351379
await setDefaultFilteringMode(MODE_BASIC);
352380
modified = true;
353-
} else if ( beforeMode === MODE_BASIC && allowedHostnames.has('all-urls') ) {
381+
} else if ( beforeMode === MODE_BASIC && hasBroadHostPermissions && broadHostPermissionsToggled ) {
354382
await setDefaultFilteringMode(MODE_OPTIMAL);
355383
modified = true;
356384
}
385+
if ( broadHostPermissionsToggled ) {
386+
rulesetConfig.hasBroadHostPermissions = hasBroadHostPermissions;
387+
saveRulesetConfig();
388+
}
357389
const afterMode = await getDefaultFilteringMode();
358390
if ( afterMode > MODE_BASIC ) { return afterMode !== beforeMode; }
359391
const filteringModes = await getFilteringModeDetails();

platform/mv3/extension/managed_storage.json

+4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
"$schema": "http://json-schema.org/draft-03/schema#",
33
"type": "object",
44
"properties": {
5+
"defaultFiltering": {
6+
"title": "The default filtering mode",
7+
"type": "string",
8+
},
59
"noFiltering": {
610
"title": "List of domains for which no filtering should occur",
711
"type": "array",

0 commit comments

Comments
 (0)
0