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:
parent
8aa379ef9e
commit
b4c63f6ae5
@ -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();
|
||||||
|
@ -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,
|
||||||
};
|
};
|
||||||
|
@ -28,8 +28,8 @@
|
|||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
/// name no-windowOpen-if
|
/// name no-windowopen-if
|
||||||
/// alias no-windowopen-if
|
/// alias no-windowOpen-if
|
||||||
/// alias nowoif
|
/// alias nowoif
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
Loading…
Reference in New Issue
Block a user