<body onload="test()">
<p>The regression test for <a href=https://bugs.webkit.org/show_bug.cgi?id=99658>Bug 99658</a></p>
<p>The test starts bunch of workers that just throw an exception. During that time, current document is unloaded. The test passes if there are no crashes after the page unload.</p>
<p>Note that the test is potentially flaky and may produce false positives if we are unlucky with the worker exceptions timing. It should not fail if there is no bug though.</p>
<script src="../../resources/gc.js"></script>
<script>
function test() {
    if (document.location.search == "?done") {
          // Set timeout to give the test some time to crash.
          setTimeout(function() {
              if (window.testRunner) {
                  console.log("No crashes: PASSED!");
                  testRunner.notifyDone();
              }
          }, 100);
        return;
    }

    if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
    }

    // Create sufficiently large number of workers in hopes that one of the exceptions they throw will be processed in short time interval in
    // which it could case the crash from the bug.
    var workers = [];
    console.log("Creating the workers.")
    for (var i = 0; i < 30; i++) {
        setTimeout(function() {
            try {
                var worker = new Worker('resources/worker-exception.js');
                worker.onerror = function(evt) {
                    // The number of worker exceptions that will be catched is not deterministic,
                    // so let's make sire the excption is not written to console to have deterministic text output.
                    evt.preventDefault();
                };
                workers.push(worker);
            } catch (ex) {
            }
        }, i / 2);
    }

    setTimeout(function() {
        console.log("Unloading the current document to see if there will be a crash.");
        document.location.href = "?done";
        workers = null;
        gc();
    }, 10);
}
</script>
</body>
