Bug 1313980 Avoid listening on browser-specific MM with connectNative() r=kmag

MozReview-Commit-ID: Al57DUrys63

--HG--
extra : rebase_source : c12b8733ccc156fbc39cd7e57d61690a658e8f80
This commit is contained in:
Andrew Swan 2016-11-10 15:17:51 -08:00
parent d73c1e3013
commit 19d6f8a342
2 changed files with 37 additions and 1 deletions

View File

@ -231,7 +231,7 @@ this.NativeApp = class extends EventEmitter {
*/
static onConnectNative(context, messageManager, portId, sender, application) {
let app = new NativeApp(context, application);
let port = new ExtensionUtils.Port(context, messageManager, [messageManager], "", portId, sender, sender);
let port = new ExtensionUtils.Port(context, messageManager, [Services.mm], "", portId, sender, sender);
app.once("disconnect", (what, err) => port.disconnect(err));
/* eslint-disable mozilla/balanced-listeners */

View File

@ -476,3 +476,39 @@ add_task(function* test_stderr() {
notEqual(lines[1], -1, "Saw second line of stderr output on the console");
notEqual(lines[0], lines[1], "Stderr output lines are separated in the console");
});
// Test that calling connectNative() multiple times works
// (bug 1313980 was a previous regression in this area)
add_task(function* test_multiple_connects() {
async function background() {
function once() {
return new Promise(resolve => {
let MSG = "hello";
let port = browser.runtime.connectNative("echo");
port.onMessage.addListener(msg => {
browser.test.assertEq(MSG, msg, "Got expected message back");
port.disconnect();
resolve();
});
port.postMessage(MSG);
});
}
await once();
await once();
browser.test.notifyPass("multiple-connect");
}
let extension = ExtensionTestUtils.loadExtension({
background,
manifest: {
applications: {gecko: {id: ID}},
permissions: ["nativeMessaging"],
},
});
yield extension.startup();
yield extension.awaitFinish("multiple-connect");
yield extension.unload();
});