1
0
mirror of https://github.com/gorhill/uBlock.git synced 2024-10-02 23:57:10 +02:00

[mv3] Handle permissions being revoked while uBOL is disabled

This commit is contained in:
Raymond Hill 2022-10-18 08:48:31 -04:00
parent 8aa379ef9e
commit b4c63f6ae5
No known key found for this signature in database
GPG Key ID: 25E1490B761470C2
3 changed files with 36 additions and 17 deletions

View File

@ -50,7 +50,7 @@ import {
setFilteringMode, setFilteringMode,
getDefaultFilteringMode, getDefaultFilteringMode,
setDefaultFilteringMode, setDefaultFilteringMode,
syncWithDemotedOrigins, syncWithBrowserPermissions,
} from './mode-manager.js'; } from './mode-manager.js';
/******************************************************************************/ /******************************************************************************/
@ -154,13 +154,15 @@ function hasOmnipotence() {
}); });
} }
function onPermissionsRemoved(permissions) { async function onPermissionsRemoved() {
if ( permissions.origins?.includes('<all_urls>') ) { const beforeMode = await getDefaultFilteringMode();
const modified = await syncWithBrowserPermissions();
if ( modified === false ) { return; }
const afterMode = await getDefaultFilteringMode();
if ( beforeMode > 1 && afterMode <= 1 ) {
updateDynamicRules(); updateDynamicRules();
} }
syncWithDemotedOrigins(permissions.origins).then(( ) => { registerInjectables();
registerInjectables(permissions.origins);
});
} }
/******************************************************************************/ /******************************************************************************/
@ -287,6 +289,9 @@ async function start() {
}); });
} }
// Permissions may have been removed while the extension was disabled
await onPermissionsRemoved();
// Unsure whether the browser remembers correctly registered css/scripts // Unsure whether the browser remembers correctly registered css/scripts
// after we quit the browser. For now uBOL will check unconditionally at // after we quit the browser. For now uBOL will check unconditionally at
// launch time whether content css/scripts are properly registered. // launch time whether content css/scripts are properly registered.
@ -307,7 +312,9 @@ async function start() {
runtime.onMessage.addListener(onMessage); runtime.onMessage.addListener(onMessage);
browser.permissions.onRemoved.addListener(onPermissionsRemoved); browser.permissions.onRemoved.addListener(
( ) => { onPermissionsRemoved(); }
);
if ( rulesetConfig.firstRun ) { if ( rulesetConfig.firstRun ) {
runtime.openOptionsPage(); runtime.openOptionsPage();

View File

@ -25,7 +25,10 @@
/******************************************************************************/ /******************************************************************************/
import { dnr } from './ext.js'; import {
browser,
dnr,
} from './ext.js';
import { import {
hostnamesFromMatches, hostnamesFromMatches,
@ -326,22 +329,31 @@ async function setDefaultFilteringMode(afterLevel) {
/******************************************************************************/ /******************************************************************************/
async function syncWithDemotedOrigins(demotedOrigins) { async function syncWithBrowserPermissions() {
const demotedHostnames = new Set(hostnamesFromMatches(demotedOrigins)); const permissions = await browser.permissions.getAll();
if ( demotedHostnames.has('all-urls') ) { const allowedHostnames = new Set(hostnamesFromMatches(permissions.origins || []));
const beforeMode = await getDefaultFilteringMode();
let modified = false;
if ( beforeMode > 1 && allowedHostnames.has('all-urls') === false ) {
await setDefaultFilteringMode(1); await setDefaultFilteringMode(1);
modified = true;
} }
const afterMode = await getDefaultFilteringMode();
if ( afterMode > 1 ) { return false; }
const filteringModes = await getFilteringModeDetails(); const filteringModes = await getFilteringModeDetails();
const { extendedSpecific, extendedGeneric } = filteringModes; const { extendedSpecific, extendedGeneric } = filteringModes;
for ( const hn of extendedSpecific ) { for ( const hn of extendedSpecific ) {
if ( demotedHostnames.has(hn) === false ) { continue; } if ( allowedHostnames.has(hn) ) { continue; }
extendedSpecific.delete(hn); extendedSpecific.delete(hn);
modified = true;
} }
for ( const hn of extendedGeneric ) { for ( const hn of extendedGeneric ) {
if ( demotedHostnames.has(hn) === false ) { continue; } if ( allowedHostnames.has(hn) ) { continue; }
extendedGeneric.delete(hn); extendedGeneric.delete(hn);
modified = true;
} }
return setFilteringModeDetails(filteringModes); await setFilteringModeDetails(filteringModes);
return modified;
} }
/******************************************************************************/ /******************************************************************************/
@ -362,5 +374,5 @@ export {
setDefaultFilteringMode, setDefaultFilteringMode,
getFilteringModeDetails, getFilteringModeDetails,
getAllTrustedSiteDirectives, getAllTrustedSiteDirectives,
syncWithDemotedOrigins, syncWithBrowserPermissions,
}; };

View File

@ -28,8 +28,8 @@
/******************************************************************************/ /******************************************************************************/
/// name no-windowOpen-if /// name no-windowopen-if
/// alias no-windowopen-if /// alias no-windowOpen-if
/// alias nowoif /// alias nowoif
/******************************************************************************/ /******************************************************************************/