Skip to content

Commit 609f62a

Browse files
stoicallyjonathanKingston
authored andcommitted
Allow webextensions with contextualIdentities permission to get assignment
Closes #1095
1 parent ce84665 commit 609f62a

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

src/js/background/messageHandler.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,42 @@ const messageHandler = {
7272
return response;
7373
});
7474

75+
// Handles external messages from webextensions
76+
const externalExtensionAllowed = {};
77+
browser.runtime.onMessageExternal.addListener(async (message, sender) => {
78+
if (!externalExtensionAllowed[sender.id]) {
79+
const extensionInfo = await browser.management.get(sender.id);
80+
if (!extensionInfo.permissions.includes("contextualIdentities")) {
81+
throw new Error("Missing contextualIdentities permission");
82+
}
83+
externalExtensionAllowed[sender.id] = true;
84+
}
85+
let response;
86+
switch (message.method) {
87+
case "getAssignment":
88+
if (typeof message.url === "undefined") {
89+
throw new Error("Missing message.url");
90+
}
91+
response = assignManager.storageArea.get(message.url);
92+
break;
93+
default:
94+
throw new Error("Unknown message.method");
95+
}
96+
return response;
97+
});
98+
// Delete externalExtensionAllowed if add-on installs/updates; permissions might change
99+
browser.management.onInstalled.addListener(extensionInfo => {
100+
if (externalExtensionAllowed[extensionInfo.id]) {
101+
delete externalExtensionAllowed[extensionInfo.id];
102+
}
103+
});
104+
// Delete externalExtensionAllowed if add-on uninstalls; not needed anymore
105+
browser.management.onUninstalled.addListener(extensionInfo => {
106+
if (externalExtensionAllowed[extensionInfo.id]) {
107+
delete externalExtensionAllowed[extensionInfo.id];
108+
}
109+
});
110+
75111
if (browser.contextualIdentities.onRemoved) {
76112
browser.contextualIdentities.onRemoved.addListener(({contextualIdentity}) => {
77113
const userContextId = backgroundLogic.getUserContextIdFromCookieStoreId(contextualIdentity.cookieStoreId);

0 commit comments

Comments
 (0)