Bug 1177013 - test_cpows.xul test for CPOW cancelation (r=dvander)

This commit is contained in:
Bill McCloskey 2015-07-13 14:34:31 -07:00
parent b446664f65
commit 60892ee16e
2 changed files with 101 additions and 1 deletions

View File

@ -17,7 +17,9 @@ const Cu = Components.utils;
sync_test,
async_test,
rpc_test,
lifetime_test
lifetime_test,
cancel_test,
cancel_test2,
];
function go() {
@ -266,3 +268,72 @@ function lifetime_test(finish)
sendRpcMessage("cpows:lifetime_test_2");
});
}
function cancel_test(finish)
{
if (!is_remote) {
// No point in doing this in single-process mode.
finish();
return;
}
let fin1 = false, fin2 = false;
// CPOW from the parent runs f. When it sends a sync message, the
// CPOW is canceled. The parent starts running again immediately
// after the CPOW is canceled; f also continues running.
function f() {
let res = sendSyncMessage("cpows:cancel_sync_message");
ok(res[0] == 12, "cancel_sync_message result correct");
fin1 = true;
if (fin1 && fin2) finish();
}
sendAsyncMessage("cpows:cancel_test", null, {f: f});
addMessageListener("cpows:cancel_test_done", msg => {
fin2 = true;
if (fin1 && fin2) finish();
});
}
function cancel_test2(finish)
{
if (!is_remote) {
// No point in doing this in single-process mode.
finish();
return;
}
let fin1 = false, fin2 = false;
// CPOW from the parent runs f. When it does a sync XHR, the
// CPOW is canceled. The parent starts running again immediately
// after the CPOW is canceled; f also continues running.
function f() {
let req = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].
createInstance(Components.interfaces.nsIXMLHttpRequest);
let fin = false;
let reqListener = () => {
if (req.readyState != req.DONE) {
return;
}
ok(req.status == 200, "XHR succeeded");
fin = true;
};
req.onload = reqListener;
req.open("get", "http://example.com", false);
req.send(null);
ok(fin == true, "XHR happened");
fin1 = true;
if (fin1 && fin2) finish();
}
sendAsyncMessage("cpows:cancel_test2", null, {f: f});
addMessageListener("cpows:cancel_test2_done", msg => {
fin2 = true;
if (fin1 && fin2) finish();
});
}

View File

@ -364,6 +364,32 @@
});
}
function recvCancelTest(msg) {
let failed = false;
try {
msg.objects.f();
} catch (e if /cross-process JS call failed/.test(String(e))) {
failed = true;
}
ok(failed, "CPOW should fail due to cancelation");
msg.target.messageManager.sendAsyncMessage("cpows:cancel_test_done");
}
function recvCancelSyncMessage() {
return 12;
}
function recvCancelTest2(msg) {
let failed = false;
try {
msg.objects.f();
} catch (e if /cross-process JS call failed/.test(String(e))) {
failed = true;
}
ok(failed, "CPOW should fail due to cancelation");
msg.target.messageManager.sendAsyncMessage("cpows:cancel_test2_done");
}
function run_tests(type) {
info("Running tests: " + type);
var node = document.getElementById('cpowbrowser_' + type);
@ -400,6 +426,9 @@
mm.addMessageListener("cpows:postmessage_test", recvPostMessageTest);
mm.addMessageListener("cpows:lifetime_test_1", recvLifetimeTest1);
mm.addMessageListener("cpows:lifetime_test_2", recvLifetimeTest2);
mm.addMessageListener("cpows:cancel_test", recvCancelTest);
mm.addMessageListener("cpows:cancel_sync_message", recvCancelSyncMessage);
mm.addMessageListener("cpows:cancel_test2", recvCancelTest2);
mm.loadFrameScript("chrome://mochitests/content/chrome/dom/base/test/chrome/cpows_child.js", true);
}