blob: 674ab059eff3420091e1f5df1d1b296dba15b4a4 [file] [log] [blame]
<body>
<p>Test SharedWorker event listener. Should print a series of PASS messages, followed with DONE.</p>
<div id=result></div>
<script src="../../resources/gc.js"></script>
<script>
function log(message)
{
document.getElementById("result").innerHTML += message + "<br>";
}
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
var worker = new SharedWorker("resources/worker-common.js", "foobar");
var numListenerCalls = 0;
function countListenerCallbacks(event)
{
if (event.type != "foo")
log("FAIL: Received unexpected event: " + event.type);
numListenerCalls++;
}
worker.addEventListener("foo", countListenerCallbacks, false);
var event = document.createEvent("Events");
event.initEvent("foo", false, false);
worker.dispatchEvent(event);
if (numListenerCalls == 1) {
log("SUCCESS: Listener was called.");
} else {
log("FAIL: Listener was not called.");
}
worker.removeEventListener("foo", countListenerCallbacks, false);
worker.dispatchEvent(event);
if (numListenerCalls == 1) {
log("SUCCESS: Listener was not called after removal.");
} else {
log("FAIL: Listener was called after removal.");
}
// Test to make sure that event listeners survive GC.
worker.addEventListener("foo", createNewListener(countListenerCallbacks), false);
gc();
worker.dispatchEvent(event);
if (numListenerCalls == 2) {
log("SUCCESS: Listener was called after GC.");
} else {
log("FAIL: Listener was not called after GC.");
}
log("DONE");
if (window.testRunner)
testRunner.notifyDone();
function createNewListener(func)
{
return function(event) { func(event); };
}
</script>
</body>