chromium/third_party/blink/web_tests/fast/workers/shared-worker-event-listener.html

<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>