From b469c5a495e1ae608cfbfe3f75fdcb0f719eb1ef Mon Sep 17 00:00:00 2001 From: Tomislav Jovanovic Date: Wed, 15 Mar 2023 17:38:14 +0000 Subject: [PATCH] Bug 1805526 - Refactor extension.startup() permissions setup, r=robwu Differential Revision: https://phabricator.services.mozilla.com/D171220 --- toolkit/components/extensions/Extension.jsm | 131 ++++++++++++++-------------- 1 file changed, 65 insertions(+), 66 deletions(-) diff --git a/toolkit/components/extensions/Extension.jsm b/toolkit/components/extensions/Extension.jsm index 60996408b3fc..36762978ad3e 100644 --- a/toolkit/components/extensions/Extension.jsm +++ b/toolkit/components/extensions/Extension.jsm @@ -3123,72 +3123,7 @@ class Extension extends ExtensionData { } await this.clearCache(this.startupReason); - - // We automatically add permissions to system/built-in extensions. - // Extensions expliticy stating not_allowed will never get permission. - let isAllowed = this.permissions.has(PRIVATE_ALLOWED_PERMISSION); - if (this.manifest.incognito === "not_allowed") { - // If an extension previously had permission, but upgrades/downgrades to - // a version that specifies "not_allowed" in manifest, remove the - // permission. - if (isAllowed) { - lazy.ExtensionPermissions.remove(this.id, { - permissions: [PRIVATE_ALLOWED_PERMISSION], - origins: [], - }); - this.permissions.delete(PRIVATE_ALLOWED_PERMISSION); - } - } else if ( - !isAllowed && - this.isPrivileged && - !this.temporarilyInstalled - ) { - // Add to EP so it is preserved after ADDON_INSTALL. We don't wait on the add here - // since we are pushing the value into this.permissions. EP will eventually save. - lazy.ExtensionPermissions.add(this.id, { - permissions: [PRIVATE_ALLOWED_PERMISSION], - origins: [], - }); - this.permissions.add(PRIVATE_ALLOWED_PERMISSION); - } - - // Allow other extensions to access static themes in private browsing windows - // (See Bug 1790115). - if (this.type === "theme") { - this.permissions.add(PRIVATE_ALLOWED_PERMISSION); - } - - // We only want to update the SVG_CONTEXT_PROPERTIES_PERMISSION during install and - // upgrade/downgrade startups. - if (INSTALL_AND_UPDATE_STARTUP_REASONS.has(this.startupReason)) { - if (isMozillaExtension(this)) { - // Add to EP so it is preserved after ADDON_INSTALL. We don't wait on the add here - // since we are pushing the value into this.permissions. EP will eventually save. - lazy.ExtensionPermissions.add(this.id, { - permissions: [SVG_CONTEXT_PROPERTIES_PERMISSION], - origins: [], - }); - this.permissions.add(SVG_CONTEXT_PROPERTIES_PERMISSION); - } else { - lazy.ExtensionPermissions.remove(this.id, { - permissions: [SVG_CONTEXT_PROPERTIES_PERMISSION], - origins: [], - }); - this.permissions.delete(SVG_CONTEXT_PROPERTIES_PERMISSION); - } - } - - // Ensure devtools permission is set - if ( - this.manifest.devtools_page && - !this.manifest.optional_permissions.includes("devtools") - ) { - lazy.ExtensionPermissions.add(this.id, { - permissions: ["devtools"], - origins: [], - }); - this.permissions.add("devtools"); - } + this._setupStartupPermissions(); GlobalManager.init(this); @@ -3293,6 +3228,70 @@ class Extension extends ExtensionData { } } + _setupStartupPermissions() { + // We automatically add permissions to system/built-in extensions. + // Extensions expliticy stating not_allowed will never get permission. + let isAllowed = this.permissions.has(PRIVATE_ALLOWED_PERMISSION); + if (this.manifest.incognito === "not_allowed") { + // If an extension previously had permission, but upgrades/downgrades to + // a version that specifies "not_allowed" in manifest, remove the + // permission. + if (isAllowed) { + lazy.ExtensionPermissions.remove(this.id, { + permissions: [PRIVATE_ALLOWED_PERMISSION], + origins: [], + }); + this.permissions.delete(PRIVATE_ALLOWED_PERMISSION); + } + } else if (!isAllowed && this.isPrivileged && !this.temporarilyInstalled) { + // Add to EP so it is preserved after ADDON_INSTALL. We don't wait on the add here + // since we are pushing the value into this.permissions. EP will eventually save. + lazy.ExtensionPermissions.add(this.id, { + permissions: [PRIVATE_ALLOWED_PERMISSION], + origins: [], + }); + this.permissions.add(PRIVATE_ALLOWED_PERMISSION); + } + + // Allow other extensions to access static themes in private browsing windows + // (See Bug 1790115). + if (this.type === "theme") { + this.permissions.add(PRIVATE_ALLOWED_PERMISSION); + } + + // We only want to update the SVG_CONTEXT_PROPERTIES_PERMISSION during install and + // upgrade/downgrade startups. + if (INSTALL_AND_UPDATE_STARTUP_REASONS.has(this.startupReason)) { + if (isMozillaExtension(this)) { + // Add to EP so it is preserved after ADDON_INSTALL. We don't wait on the add here + // since we are pushing the value into this.permissions. EP will eventually save. + lazy.ExtensionPermissions.add(this.id, { + permissions: [SVG_CONTEXT_PROPERTIES_PERMISSION], + origins: [], + }); + this.permissions.add(SVG_CONTEXT_PROPERTIES_PERMISSION); + } else { + lazy.ExtensionPermissions.remove(this.id, { + permissions: [SVG_CONTEXT_PROPERTIES_PERMISSION], + origins: [], + }); + this.permissions.delete(SVG_CONTEXT_PROPERTIES_PERMISSION); + } + } + + // Ensure devtools permission is set + if ( + this.manifest.devtools_page && + !this.manifest.optional_permissions.includes("devtools") + ) { + lazy.ExtensionPermissions.add(this.id, { + permissions: ["devtools"], + origins: [], + }); + this.permissions.add("devtools"); + } + } + cleanupGeneratedFile() { if (!this.cleanupFile) { return; -- 2.11.4.GIT