Loading toolkit/components/extensions/ExtensionParent.sys.mjs +47 −0 Original line number Diff line number Diff line Loading @@ -247,6 +247,8 @@ const ProxyMessenger = { /** @type {Map<number, Promise>} */ portPromises: new Map(), _torRuntimeMessageListeners: [], init() { this.conduit = new lazy.BroadcastConduit(ProxyMessenger, { id: "ProxyMessenger", Loading Loading @@ -347,6 +349,10 @@ const ProxyMessenger = { }, async recvRuntimeMessage(arg, { sender }) { // We need to listen to some extension messages in Tor Browser for (const listener of this._torRuntimeMessageListeners) { listener(arg); } arg.firstResponse = true; let kind = await this.normalizeArgs(arg, sender); arg.query = true; Loading Loading @@ -2406,6 +2412,45 @@ export var StartupCache = { Services.obs.addObserver(StartupCache, "startupcache-invalidate"); async function torSendExtensionMessage(extensionId, message) { // This should broadcast the message to all children "conduits" // listening for a "RuntimeMessage". Those children conduits // will either be extension background pages or other extension // pages listening to browser.runtime.onMessage. const result = await ProxyMessenger.conduit.castRuntimeMessage("messenger", { extensionId, holder: new StructuredCloneHolder("torSendExtensionMessage", null, message), query: true, firstResponse: true, sender: { id: extensionId, envType: "addon_child", }, }); return result ? result.value : Promise.reject({ message: ERROR_NO_RECEIVERS }); } async function torWaitForExtensionMessage(extensionId, checker) { return new Promise(resolve => { const msgListener = msg => { try { if (msg && msg.extensionId === extensionId) { const deserialized = msg.holder.deserialize({}); if (checker(deserialized)) { const idx = ProxyMessenger._torRuntimeMessageListeners.indexOf(msgListener); ProxyMessenger._torRuntimeMessageListeners.splice(idx, 1); resolve(deserialized); } } } catch (e) {} }; ProxyMessenger._torRuntimeMessageListeners.push(msgListener); }); } export var ExtensionParent = { GlobalManager, HiddenExtensionPage, Loading @@ -2418,6 +2463,8 @@ export var ExtensionParent = { watchExtensionProxyContextLoad, watchExtensionWorkerContextLoaded, DebugUtils, torSendExtensionMessage, torWaitForExtensionMessage, }; // browserPaintedPromise and browserStartupPromise are promises that Loading Loading
toolkit/components/extensions/ExtensionParent.sys.mjs +47 −0 Original line number Diff line number Diff line Loading @@ -247,6 +247,8 @@ const ProxyMessenger = { /** @type {Map<number, Promise>} */ portPromises: new Map(), _torRuntimeMessageListeners: [], init() { this.conduit = new lazy.BroadcastConduit(ProxyMessenger, { id: "ProxyMessenger", Loading Loading @@ -347,6 +349,10 @@ const ProxyMessenger = { }, async recvRuntimeMessage(arg, { sender }) { // We need to listen to some extension messages in Tor Browser for (const listener of this._torRuntimeMessageListeners) { listener(arg); } arg.firstResponse = true; let kind = await this.normalizeArgs(arg, sender); arg.query = true; Loading Loading @@ -2406,6 +2412,45 @@ export var StartupCache = { Services.obs.addObserver(StartupCache, "startupcache-invalidate"); async function torSendExtensionMessage(extensionId, message) { // This should broadcast the message to all children "conduits" // listening for a "RuntimeMessage". Those children conduits // will either be extension background pages or other extension // pages listening to browser.runtime.onMessage. const result = await ProxyMessenger.conduit.castRuntimeMessage("messenger", { extensionId, holder: new StructuredCloneHolder("torSendExtensionMessage", null, message), query: true, firstResponse: true, sender: { id: extensionId, envType: "addon_child", }, }); return result ? result.value : Promise.reject({ message: ERROR_NO_RECEIVERS }); } async function torWaitForExtensionMessage(extensionId, checker) { return new Promise(resolve => { const msgListener = msg => { try { if (msg && msg.extensionId === extensionId) { const deserialized = msg.holder.deserialize({}); if (checker(deserialized)) { const idx = ProxyMessenger._torRuntimeMessageListeners.indexOf(msgListener); ProxyMessenger._torRuntimeMessageListeners.splice(idx, 1); resolve(deserialized); } } } catch (e) {} }; ProxyMessenger._torRuntimeMessageListeners.push(msgListener); }); } export var ExtensionParent = { GlobalManager, HiddenExtensionPage, Loading @@ -2418,6 +2463,8 @@ export var ExtensionParent = { watchExtensionProxyContextLoad, watchExtensionWorkerContextLoaded, DebugUtils, torSendExtensionMessage, torWaitForExtensionMessage, }; // browserPaintedPromise and browserStartupPromise are promises that Loading