commit 740f0edb4ab2885cfe11db3c996e8dc8ea751f10 Author: Bill McCloskey Date: Thu Dec 3 14:25:40 2015 -0800 extensionId filter fix diff --git a/toolkit/components/extensions/Extension.jsm b/toolkit/components/extensions/Extension.jsm index 41677e3..4fa4a77 100644 --- a/toolkit/components/extensions/Extension.jsm +++ b/toolkit/components/extensions/Extension.jsm @@ -188,26 +188,30 @@ function ExtensionPage(extension, params) let {type, contentWindow, uri, docShell} = params; this.extension = extension; this.type = type; this.contentWindow = contentWindow || null; this.uri = uri || extension.baseURI; this.incognito = params.incognito || false; this.onClose = new Set(); - // This is the sender property passed to the Messenger for this - // page. It can be augmented by the "page-open" hook. + // This is the MessageSender property passed to extension. + // It can be augmented by the "page-open" hook. let sender = {id: extension.id}; if (uri) { sender.url = uri.spec; } - let delegate = {}; + let delegate = { + getSender() {}, + }; Management.emit("page-load", this, params, sender, delegate); - let filter = {id: extension.id}; + // Properties in |filter| must match those in the |recipient| + // parameter of sendMessage. + let filter = {extensionId: extension.id}; this.messenger = new Messenger(this, globalBroker, sender, filter, delegate); this.extension.views.add(this); } ExtensionPage.prototype = { get cloneScope() { return this.contentWindow; diff --git a/toolkit/components/extensions/ExtensionContent.jsm b/toolkit/components/extensions/ExtensionContent.jsm index d299b16..3b4640c 100644 --- a/toolkit/components/extensions/ExtensionContent.jsm +++ b/toolkit/components/extensions/ExtensionContent.jsm @@ -226,18 +226,22 @@ function ExtensionContext(extensionId, contentWindow) let delegate = { getSender(context, target, sender) { // Nothing to do here. } }; let url = contentWindow.location.href; let broker = ExtensionContent.getBroker(mm); - this.messenger = new Messenger(this, broker, {id: extensionId, frameId, url}, - {id: extensionId, frameId}, delegate); + // The |sender| parameter is passed directly to the extension. + let sender = {id: extensionId, frameId, url}; + // Properties in |filter| must match those in the |recipient| + // parameter of sendMessage. + let filter = {extensionId, frameId}; + this.messenger = new Messenger(this, broker, sender, filter, delegate); let chromeObj = Cu.createObjectIn(this.sandbox, {defineAs: "browser"}); // Sandboxes don't get Xrays for some weird compatibility // reason. However, we waive here anyway in case that changes. Cu.waiveXrays(this.sandbox).chrome = Cu.waiveXrays(this.sandbox).browser; injectAPI(api(this), chromeObj); } diff --git a/toolkit/components/extensions/ExtensionUtils.jsm b/toolkit/components/extensions/ExtensionUtils.jsm index fb7edcf..529ad69 100644 --- a/toolkit/components/extensions/ExtensionUtils.jsm +++ b/toolkit/components/extensions/ExtensionUtils.jsm @@ -677,17 +677,17 @@ function getMessageManager(target) } } // Each extension scope gets its own Messenger object. It handles the // basics of sendMessage, onMessage, connect, and onConnect. // // |context| is the extension scope. // |broker| is a MessageBroker used to receive and send messages. -// |sender| is an object describing the sender (usually giving its extensionId, tabId, etc.) +// |sender| is an object describing the sender (usually giving its extension id, tabId, etc.) // |filter| is a recipient filter to apply to incoming messages from the broker. // |delegate| is an object that must implement a few methods: // getSender(context, messageManagerTarget, sender): returns a MessageSender // See https://developer.chrome.com/extensions/runtime#type-MessageSender. function Messenger(context, broker, sender, filter, delegate) { this.context = context; this.broker = broker; diff --git a/toolkit/components/extensions/test/mochitest/mochitest.ini b/toolkit/components/extensions/test/mochitest/mochitest.ini index dbf3953..ac20e6a 100644 --- a/toolkit/components/extensions/test/mochitest/mochitest.ini +++ b/toolkit/components/extensions/test/mochitest/mochitest.ini @@ -26,16 +26,17 @@ support-files = [test_ext_generate.html] [test_ext_localStorage.html] [test_ext_notifications.html] [test_ext_runtime_connect.html] [test_ext_runtime_disconnect.html] [test_ext_runtime_getPlatformInfo.html] [test_ext_sandbox_var.html] [test_ext_sendmessage_reply.html] +[test_ext_sendmessage_reply2.html] [test_ext_sendmessage_doublereply.html] [test_ext_storage.html] [test_ext_background_runtime_connect_params.html] [test_ext_cookies.html] [test_ext_bookmarks.html] [test_ext_alarms.html] [test_ext_background_window_properties.html] [test_ext_background_sub_windows.html] diff --git a/toolkit/components/extensions/test/mochitest/test_ext_sendmessage_reply2.html b/toolkit/components/extensions/test/mochitest/test_ext_sendmessage_reply2.html new file mode 100644 index 0000000..bd2a857 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_sendmessage_reply2.html @@ -0,0 +1,93 @@ + + + + WebExtension test + + + + + + + + + + + +