summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--package-lock.json13
-rw-r--r--package.json1
-rw-r--r--source/libs/declarative-content-scripts.ts36
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}) => {