blob: f8f7ee33e9e922a86c5d655ce9102671d75b8a88 [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>
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); };
}
function gc()
{
if (window.GCController)
return GCController.collect();
for (var i = 0; i < 10000; i++) { // force garbage collection (FF requires about 9K allocations before a collect).
var s = new String("abc");
}
}
</script>
</body>