summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/libs/declarative-content-scripts.ts36
1 files changed, 13 insertions, 23 deletions
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}) => {