Loading toolkit/components/extensions/ExtensionParent.jsm +47 −0 Original line number Diff line number Diff line Loading @@ -263,6 +263,8 @@ const ProxyMessenger = { /** @type Map<number, ParentPort> */ ports: new Map(), _torRuntimeMessageListeners: [], init() { this.conduit = new BroadcastConduit(ProxyMessenger, { id: "ProxyMessenger", Loading Loading @@ -340,6 +342,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); let result = await this.conduit.castRuntimeMessage(kind, arg); Loading Loading @@ -2139,6 +2145,45 @@ for (let name of StartupCache.STORE_NAMES) { StartupCache[name] = new CacheStore(name); } 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(message), 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); }); } var ExtensionParent = { GlobalManager, HiddenExtensionPage, Loading @@ -2151,6 +2196,8 @@ var ExtensionParent = { watchExtensionProxyContextLoad, watchExtensionWorkerContextLoaded, DebugUtils, torSendExtensionMessage, torWaitForExtensionMessage, }; // browserPaintedPromise and browserStartupPromise are promises that Loading Loading
toolkit/components/extensions/ExtensionParent.jsm +47 −0 Original line number Diff line number Diff line Loading @@ -263,6 +263,8 @@ const ProxyMessenger = { /** @type Map<number, ParentPort> */ ports: new Map(), _torRuntimeMessageListeners: [], init() { this.conduit = new BroadcastConduit(ProxyMessenger, { id: "ProxyMessenger", Loading Loading @@ -340,6 +342,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); let result = await this.conduit.castRuntimeMessage(kind, arg); Loading Loading @@ -2139,6 +2145,45 @@ for (let name of StartupCache.STORE_NAMES) { StartupCache[name] = new CacheStore(name); } 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(message), 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); }); } var ExtensionParent = { GlobalManager, HiddenExtensionPage, Loading @@ -2151,6 +2196,8 @@ var ExtensionParent = { watchExtensionProxyContextLoad, watchExtensionWorkerContextLoaded, DebugUtils, torSendExtensionMessage, torWaitForExtensionMessage, }; // browserPaintedPromise and browserStartupPromise are promises that Loading