blob: e84353af61ff3299a17d588e2eef44caf1fc8dcf [file] [log] [blame]
description("This test checks whether shared workers exit when the parent document closes");
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
waitUntilWorkerThreadsExit(runTests);
} else {
debug("NOTE: This test relies on functionality in DumpRenderTree to detect when workers have exited - test results will be incorrect when run in a browser.");
runTests();
}
function runTests()
{
createWorkerFrame("frame1", "worker1");
createWorkerFrame("frame2", "worker1,worker2");
createWorkerFrame("frame3", "worker3");
createWorkerFrame("frame4", "worker1");
waitUntilThreadCountMatches(closeFrame1, 3);
}
function createWorkerFrame(id, workerNames)
{
var iframe = document.createElement("iframe");
iframe.setAttribute("id", id);
iframe.setAttribute("src", "resources/create-shared-worker-frame.html?" + workerNames);
document.body.appendChild(iframe);
}
function closeFrame(id)
{
var frame = document.getElementById(id);
frame.parentNode.removeChild(frame);
}
function closeFrame1()
{
closeFrame("frame1");
ensureThreadCountMatches(closeFrame2, 3);
}
function closeFrame2()
{
testPassed("Frame1 closed, shared workers kept running");
closeFrame("frame2");
ensureThreadCountMatches(closeFrame3, 2);
}
function closeFrame3()
{
testPassed("Frame2 closed, shared worker2 exited");
closeFrame("frame3");
ensureThreadCountMatches(closeFrame4, 1);
}
function closeFrame4()
{
testPassed("Frame3 closed, shared worker3 exited");
closeFrame("frame4");
waitUntilWorkerThreadsExit(complete);
}
function complete()
{
testPassed("Frame4 closed, all workers closed");
done();
}