From c38ff72c4cdcd29366463bcb97b32b3bec1ecbad Mon Sep 17 00:00:00 2001 From: Mike Conley Date: Wed, 18 Sep 2024 13:32:10 +0000 Subject: [PATCH] Bug 1890427 - Part 8: Use an observer to regenerate backups on permission removal. r=backup-reviewers,kpatenio Differential Revision: https://phabricator.services.mozilla.com/D218878 --- .../components/backup/BackupService.sys.mjs | 13 +++++++++++- .../test_BackupService_regeneration.js | 20 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/browser/components/backup/BackupService.sys.mjs b/browser/components/backup/BackupService.sys.mjs index c5093057d758..9bf11ae06f3e 100644 --- a/browser/components/backup/BackupService.sys.mjs +++ b/browser/components/backup/BackupService.sys.mjs @@ -3167,6 +3167,7 @@ export class BackupService extends EventTarget { Services.obs.addObserver(this.#observer, "passwordmgr-storage-changed"); Services.obs.addObserver(this.#observer, "formautofill-storage-changed"); Services.obs.addObserver(this.#observer, "sanitizer-sanitization-complete"); + Services.obs.addObserver(this.#observer, "perm-changed"); Services.obs.addObserver(this.#observer, "quit-application-granted"); } @@ -3197,7 +3198,11 @@ export class BackupService extends EventTarget { Services.obs.removeObserver(this.#observer, "passwordmgr-storage-changed"); Services.obs.removeObserver(this.#observer, "formautofill-storage-changed"); - Services.obs.removeObserver(this.#observer, "sanitizer-sanitization-complete"); + Services.obs.removeObserver( + this.#observer, + "sanitizer-sanitization-complete" + ); + Services.obs.removeObserver(this.#observer, "perm-changed"); Services.obs.removeObserver(this.#observer, "quit-application-granted"); this.#observer = null; @@ -3248,6 +3253,12 @@ export class BackupService extends EventTarget { this.#debounceRegeneration(); break; } + case "perm-changed": { + if (data == "deleted") { + this.#debounceRegeneration(); + } + break; + } } } diff --git a/browser/components/backup/tests/xpcshell/test_BackupService_regeneration.js b/browser/components/backup/tests/xpcshell/test_BackupService_regeneration.js index 399959ad705c..af151ea448a2 100644 --- a/browser/components/backup/tests/xpcshell/test_BackupService_regeneration.js +++ b/browser/components/backup/tests/xpcshell/test_BackupService_regeneration.js @@ -455,3 +455,23 @@ add_task(async function test_sanitization() { await Sanitizer.sanitize(["siteSettings"]); }, "Saw regeneration on sanitization of site settings."); }); + +/** + * Tests that backup regeneration occurs after a permission is removed. + */ +add_task(async function test_permission_removed() { + let principal = + Services.scriptSecurityManager.createContentPrincipalFromOrigin( + "https://test-permission-site.com" + ); + const PERMISSION_TYPE = "desktop-notification"; + Services.perms.addFromPrincipal( + principal, + PERMISSION_TYPE, + Services.perms.ALLOW_ACTION + ); + + await expectRegeneration(async () => { + Services.perms.removeFromPrincipal(principal, PERMISSION_TYPE); + }, "Saw regeneration on permission removal."); +});