mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-25 05:41:12 +00:00
Backed out changeset 7c026e26932d (bug 1287245) for Mochitest test_ext_background_runtime_connect_params.html failure
This commit is contained in:
parent
956584cb73
commit
23202d54b2
@ -954,7 +954,7 @@ function promiseDocumentReady(doc) {
|
||||
* Messaging primitives.
|
||||
*/
|
||||
|
||||
let gNextPortId = 1;
|
||||
var nextPortId = 1;
|
||||
|
||||
// Abstraction for a Port object in the extension API. Each port has a unique ID.
|
||||
function Port(context, messageManager, name, id, sender) {
|
||||
@ -1164,8 +1164,7 @@ Messenger.prototype = {
|
||||
},
|
||||
|
||||
connect(messageManager, name, recipient) {
|
||||
// TODO(robwu): Use a process ID instead of the process type. bugzil.la/1287626
|
||||
let portId = `${gNextPortId++}-${Services.appInfo.processType}`;
|
||||
let portId = nextPortId++;
|
||||
let port = new Port(this.context, messageManager, name, portId, null);
|
||||
let msg = {name, portId};
|
||||
// TODO: Disconnect the port if no response?
|
||||
|
@ -60,8 +60,6 @@ skip-if = buildapp == 'b2g' # runat != document_idle is not supported.
|
||||
skip-if = buildapp == 'b2g' # JavaScript error: jar:remoteopenfile:///data/local/tmp/generated-extension.xpi!/content.js, line 46: NS_ERROR_ILLEGAL_VALUE:
|
||||
[test_ext_runtime_connect.html]
|
||||
skip-if = (os == 'android' || buildapp == 'b2g') # port.sender.tab is undefined on b2g. Bug 1258975 on android.
|
||||
[test_ext_runtime_connect_twoway.html]
|
||||
skip-if = (os == 'android' || buildapp == 'b2g') # port.sender.tab is undefined on b2g. Bug 1258975 on android.
|
||||
[test_ext_runtime_connect2.html]
|
||||
skip-if = (os == 'android' || buildapp == 'b2g') # port.sender.tab is undefined on b2g. Bug 1258975 on android.
|
||||
[test_ext_runtime_disconnect.html]
|
||||
|
@ -1,127 +0,0 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>WebExtension test</title>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SpawnTask.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/ExtensionTestUtils.js"></script>
|
||||
<script type="text/javascript" src="head.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
add_task(function* test_connect_bidirectionally_and_postMessage() {
|
||||
function backgroundScript() {
|
||||
let onConnectCount = 0;
|
||||
browser.runtime.onConnect.addListener(port => {
|
||||
// 3. onConnect by connect() from CS.
|
||||
browser.test.assertEq("from-cs", port.name);
|
||||
browser.test.assertEq(1, ++onConnectCount,
|
||||
"BG onConnect should be called once");
|
||||
|
||||
let tabId = port.sender.tab.id;
|
||||
browser.test.assertTrue(tabId, "content script must have a tab ID");
|
||||
|
||||
let port2;
|
||||
let postMessageCount1 = 0;
|
||||
port.onMessage.addListener(msg => {
|
||||
// 11. port.onMessage by port.postMessage in CS.
|
||||
browser.test.assertEq("from CS to port", msg);
|
||||
browser.test.assertEq(1, ++postMessageCount1,
|
||||
"BG port.onMessage should be called once");
|
||||
|
||||
// 12. should trigger port2.onMessage in CS.
|
||||
port2.postMessage("from BG to port2");
|
||||
});
|
||||
|
||||
// 4. Should trigger onConnect in CS.
|
||||
port2 = browser.tabs.connect(tabId, {name: "from-bg"});
|
||||
let postMessageCount2 = 0;
|
||||
port2.onMessage.addListener(msg => {
|
||||
// 7. onMessage by port2.postMessage in CS.
|
||||
browser.test.assertEq("from CS to port2", msg);
|
||||
browser.test.assertEq(1, ++postMessageCount2,
|
||||
"BG port2.onMessage should be called once");
|
||||
|
||||
// 8. Should trigger port.onMessage in CS.
|
||||
port.postMessage("from BG to port");
|
||||
});
|
||||
});
|
||||
|
||||
// 1. Notify test runner to create a new tab.
|
||||
browser.test.sendMessage("ready");
|
||||
}
|
||||
|
||||
function contentScript() {
|
||||
let onConnectCount = 0;
|
||||
let port;
|
||||
browser.runtime.onConnect.addListener(port2 => {
|
||||
// 5. onConnect by connect() from BG.
|
||||
browser.test.assertEq("from-bg", port2.name);
|
||||
browser.test.assertEq(1, ++onConnectCount,
|
||||
"CS onConnect should be called once");
|
||||
|
||||
let postMessageCount2 = 0;
|
||||
port2.onMessage.addListener(msg => {
|
||||
// 12. port2.onMessage by port2.postMessage in BG.
|
||||
browser.test.assertEq("from BG to port2", msg);
|
||||
browser.test.assertEq(1, ++postMessageCount2,
|
||||
"CS port2.onMessage should be called once");
|
||||
|
||||
// TODO(robwu): Do not explicitly disconnect, it should not be a problem
|
||||
// if we keep the ports open. However, not closing the ports causes the
|
||||
// test to fail with NS_ERROR_NOT_INITIALIZED in ExtensionUtils.jsm, in
|
||||
// Port.prototype.disconnect (nsIMessageSender.sendAsyncMessage).
|
||||
port.disconnect();
|
||||
port2.disconnect();
|
||||
browser.test.notifyPass("ping pong done");
|
||||
});
|
||||
// 6. should trigger port2.onMessage in BG.
|
||||
port2.postMessage("from CS to port2");
|
||||
});
|
||||
|
||||
// 2. should trigger onConnect in BG.
|
||||
port = browser.runtime.connect({name: "from-cs"});
|
||||
let postMessageCount1 = 0;
|
||||
port.onMessage.addListener(msg => {
|
||||
// 9. onMessage by port.postMessage in BG.
|
||||
browser.test.assertEq("from BG to port", msg);
|
||||
browser.test.assertEq(1, ++postMessageCount1,
|
||||
"CS port.onMessage should be called once");
|
||||
|
||||
// 10. should trigger port.onMessage in BG.
|
||||
port.postMessage("from CS to port");
|
||||
});
|
||||
}
|
||||
|
||||
let extensionData = {
|
||||
background: `(${backgroundScript})();`,
|
||||
manifest: {
|
||||
content_scripts: [{
|
||||
js: ["contentscript.js"],
|
||||
matches: ["http://mochi.test/*/file_sample.html"],
|
||||
}],
|
||||
},
|
||||
files: {
|
||||
"contentscript.js": `(${contentScript})();`,
|
||||
},
|
||||
};
|
||||
|
||||
let extension = ExtensionTestUtils.loadExtension(extensionData);
|
||||
yield extension.startup();
|
||||
info("extension loaded");
|
||||
|
||||
yield extension.awaitMessage("ready");
|
||||
|
||||
let win = window.open("file_sample.html");
|
||||
yield extension.awaitFinish("ping pong done");
|
||||
win.close();
|
||||
|
||||
yield extension.unload();
|
||||
info("extension unloaded");
|
||||
});
|
||||
</script>
|
||||
</body>
|
Loading…
Reference in New Issue
Block a user