diff options
-rw-r--r-- | package-lock.json | 13 | ||||
-rw-r--r-- | package.json | 1 | ||||
-rw-r--r-- | source/libs/declarative-content-scripts.ts | 36 |
3 files changed, 23 insertions, 27 deletions
diff --git a/package-lock.json b/package-lock.json index 285a60a0..8180ee5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -511,7 +511,6 @@ "version": "0.0.86", "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.86.tgz", "integrity": "sha512-7ehebPf/5IR64SYdD2Vig0q0oUCNbWMQ29kASlNJaHVVtA5/J/DnrxnYVPCID70o7LgHdYsav6I4/XdqAxjTLQ==", - "dev": true, "requires": { "@types/filesystem": "*" } @@ -564,7 +563,6 @@ "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.29.tgz", "integrity": "sha512-85/1KfRedmfPGsbK8YzeaQUyV1FQAvMPMTuWFQ5EkLd2w7szhNO96bk3Rh/SKmOfd9co2rCLf0Voy4o7ECBOvw==", - "dev": true, "requires": { "@types/filewriter": "*" } @@ -572,8 +570,7 @@ "@types/filewriter": { "version": "0.0.28", "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.28.tgz", - "integrity": "sha1-wFTor02d11205jq8dviFFocU1LM=", - "dev": true + "integrity": "sha1-wFTor02d11205jq8dviFFocU1LM=" }, "@types/firefox-webext-browser": { "version": "67.0.2", @@ -16370,6 +16367,14 @@ "web-ext": "^3.1.1" } }, + "webext-additional-permissions": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/webext-additional-permissions/-/webext-additional-permissions-0.1.0.tgz", + "integrity": "sha512-eA1o6BdRbpU5ClL6GcmwhGtVVzNTbQSqX9esakpurWYVt9ykpGQ1ZNe5l30Yt19GW0eRC8VdroOeJSumP5cMpQ==", + "requires": { + "@types/chrome": "0.0.86" + } + }, "webext-detect-page": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/webext-detect-page/-/webext-detect-page-1.0.2.tgz", diff --git a/package.json b/package.json index 71e791e5..ea29aadc 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "select-dom": "^5.1.0", "shorten-repo-url": "^1.5.2", "tiny-version-compare": "^1.0.0", + "webext-additional-permissions": "^0.1.0", "webext-detect-page": "^1.0.2", "webext-domain-permission-toggle": "^1.0.0-1", "webext-options-sync": "^0.21.1", diff --git a/source/libs/declarative-content-scripts.ts b/source/libs/declarative-content-scripts.ts index 8786253a..fc61acae 100644 --- a/source/libs/declarative-content-scripts.ts +++ b/source/libs/declarative-content-scripts.ts @@ -1,6 +1,7 @@ /* global chrome */ import 'content-scripts-register-polyfill'; import 'webext-permissions-events-polyfill'; +import {getAdditionalPermissions} from 'webext-additional-permissions'; const registeredScripts = new Map< string, @@ -13,22 +14,13 @@ function convertPath(file: string): browser.extensionTypes.ExtensionFileOrCode { return {file: url.pathname}; } -async function registerOnOrigins(origins: string[]): Promise<void> { - const manifest = browser.runtime.getManifest(); - const configs = manifest.content_scripts!; - const manifestOrigins = [ - ...(manifest.permissions || []).filter(permission => permission.includes('://')), - ...configs.flatMap(config => config.matches) - ]; - - for (const config of configs) { - // Register one at a time to allow removing one at a time as well - for (const origin of origins) { - // This origin is already part of `manifest.json` - if (manifestOrigins.includes(origin)) { - continue; - } +// Automatically register the content scripts on the new origins +async function registerOnOrigins({origins: newOrigins}: chrome.permissions.Permissions): Promise<void> { + const manifest = browser.runtime.getManifest().content_scripts!; + // Register one at a time to allow removing one at a time as well + for (const origin of newOrigins || []) { + for (const config of manifest) { const registeredScript = browser.contentScripts.register({ js: (config.js || []).map(convertPath), css: (config.css || []).map(convertPath), @@ -41,16 +33,14 @@ async function registerOnOrigins(origins: string[]): Promise<void> { } } -// Automatically register the content scripts on the new origins. -// `registerOnOrigins` already takes care of excluding origins in `manifest.json` -chrome.permissions.getAll(async ({origins}) => registerOnOrigins(origins!)); +(async () => { + registerOnOrigins(await getAdditionalPermissions()); +})(); -chrome.permissions.onAdded.addListener(({origins}) => { - if (!origins || origins.length === 0) { - return; +chrome.permissions.onAdded.addListener(permissions => { + if (permissions.origins && permissions.origins.length > 0) { + registerOnOrigins(permissions); } - - registerOnOrigins(origins); }); chrome.permissions.onRemoved.addListener(async ({origins}) => { |