@@ -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