let state = "WaitingForHang";

navigator.serviceWorker.addEventListener("message", function(event) {
    log(event.data);
    if (state === "WaitingForHang") {
        log("PASS: ServiceWorker received message: " + event.data);
        log("Service Worker should now be hung");
        log("Terminating service worker...")
        internals.terminateServiceWorker(worker);
        log("Terminated service worker.");
        state = "WaitingForMessageAfterTerminatingHungServiceWorker"
        handle = setInterval(function() {
            worker.postMessage("MessageAfterTerminatingHungServiceWorker");
        }, 10);
        return;
    }
    if (state === "WaitingForMessageAfterTerminatingHungServiceWorker") {
        log("PASS: Service worker responded to message after hanging and being terminated");
        state = "Done";
        clearInterval(handle);
        finishSWTest();
        return;
    }
});

async function doTest()
{
    if (window.testRunner) {
        testRunner.setUseSeparateServiceWorkerProcess(true);
        await fetch("").then(() => { }, () => { });
    }
 
    const registration = await navigator.serviceWorker.register("resources/postmessage-echo-worker-mayhang.js", { });
    worker = registration.installing;
    worker.postMessage("HANG");
}

doTest();

