Skip to content

Commit b4c63f6

Browse files
committed
[mv3] Handle permissions being revoked while uBOL is disabled
1 parent 8aa379e commit b4c63f6

File tree

3 files changed

+36
-17
lines changed

3 files changed

+36
-17
lines changed

platform/mv3/extension/js/background.js

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ import {
5050
setFilteringMode,
5151
getDefaultFilteringMode,
5252
setDefaultFilteringMode,
53-
syncWithDemotedOrigins,
53+
syncWithBrowserPermissions,
5454
} from './mode-manager.js';
5555

5656
/******************************************************************************/
@@ -154,13 +154,15 @@ function hasOmnipotence() {
154154
});
155155
}
156156

157-
function onPermissionsRemoved(permissions) {
158-
if ( permissions.origins?.includes('<all_urls>') ) {
157+
async function onPermissionsRemoved() {
158+
const beforeMode = await getDefaultFilteringMode();
159+
const modified = await syncWithBrowserPermissions();
160+
if ( modified === false ) { return; }
161+
const afterMode = await getDefaultFilteringMode();
162+
if ( beforeMode > 1 && afterMode <= 1 ) {
159163
updateDynamicRules();
160164
}
161-
syncWithDemotedOrigins(permissions.origins).then(( ) => {
162-
registerInjectables(permissions.origins);
163-
});
165+
registerInjectables();
164166
}
165167

166168
/******************************************************************************/
@@ -287,6 +289,9 @@ async function start() {
287289
});
288290
}
289291

292+
// Permissions may have been removed while the extension was disabled
293+
await onPermissionsRemoved();
294+
290295
// Unsure whether the browser remembers correctly registered css/scripts
291296
// after we quit the browser. For now uBOL will check unconditionally at
292297
// launch time whether content css/scripts are properly registered.
@@ -307,7 +312,9 @@ async function start() {
307312

308313
runtime.onMessage.addListener(onMessage);
309314

310-
browser.permissions.onRemoved.addListener(onPermissionsRemoved);
315+
browser.permissions.onRemoved.addListener(
316+
( ) => { onPermissionsRemoved(); }
317+
);
311318

312319
if ( rulesetConfig.firstRun ) {
313320
runtime.openOptionsPage();

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

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@
2525

2626
/******************************************************************************/
2727

28-
import { dnr } from './ext.js';
28+
import {
29+
browser,
30+
dnr,
31+
} from './ext.js';
2932

3033
import {
3134
hostnamesFromMatches,
@@ -326,22 +329,31 @@ async function setDefaultFilteringMode(afterLevel) {
326329

327330
/******************************************************************************/
328331

329-
async function syncWithDemotedOrigins(demotedOrigins) {
330-
const demotedHostnames = new Set(hostnamesFromMatches(demotedOrigins));
331-
if ( demotedHostnames.has('all-urls') ) {
332+
async function syncWithBrowserPermissions() {
333+
const permissions = await browser.permissions.getAll();
334+
const allowedHostnames = new Set(hostnamesFromMatches(permissions.origins || []));
335+
const beforeMode = await getDefaultFilteringMode();
336+
let modified = false;
337+
if ( beforeMode > 1 && allowedHostnames.has('all-urls') === false ) {
332338
await setDefaultFilteringMode(1);
339+
modified = true;
333340
}
341+
const afterMode = await getDefaultFilteringMode();
342+
if ( afterMode > 1 ) { return false; }
334343
const filteringModes = await getFilteringModeDetails();
335344
const { extendedSpecific, extendedGeneric } = filteringModes;
336345
for ( const hn of extendedSpecific ) {
337-
if ( demotedHostnames.has(hn) === false ) { continue; }
346+
if ( allowedHostnames.has(hn) ) { continue; }
338347
extendedSpecific.delete(hn);
348+
modified = true;
339349
}
340350
for ( const hn of extendedGeneric ) {
341-
if ( demotedHostnames.has(hn) === false ) { continue; }
351+
if ( allowedHostnames.has(hn) ) { continue; }
342352
extendedGeneric.delete(hn);
353+
modified = true;
343354
}
344-
return setFilteringModeDetails(filteringModes);
355+
await setFilteringModeDetails(filteringModes);
356+
return modified;
345357
}
346358

347359
/******************************************************************************/
@@ -362,5 +374,5 @@ export {
362374
setDefaultFilteringMode,
363375
getFilteringModeDetails,
364376
getAllTrustedSiteDirectives,
365-
syncWithDemotedOrigins,
377+
syncWithBrowserPermissions,
366378
};

platform/mv3/scriptlets/no-windowopen-if.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828

2929
/******************************************************************************/
3030

31-
/// name no-windowOpen-if
32-
/// alias no-windowopen-if
31+
/// name no-windowopen-if
32+
/// alias no-windowOpen-if
3333
/// alias nowoif
3434

3535
/******************************************************************************/

0 commit comments

Comments
 (0)