<html>
<head>
<script src="resources/sw-test-pre.js"></script>
</head>
<body>
<script>
let initialController = null;

function listenForControllerChange(frame)
{
    frame.contentWindow.navigator.serviceWorker.addEventListener("controllerchange", function() {
        log("PASS: controllerchange event has been fired");

        let newController = frame.contentWindow.navigator.serviceWorker.controller;
        if (newController != null && newController != initialController)
             log("PASS: controller has been updated");
        else
             log("FAIL: controller has not been updated");

        finishSWTest();
    });
}

async function test() {
    let scopeURL = "/workers/service/resources/";
    let registration = await registerAndWaitForActive("resources/updating-fetch-worker.php", scopeURL);
    let frame = await withFrame(scopeURL);
    initialController = frame.contentWindow.navigator.serviceWorker.controller;
    if (initialController === null) {
        log("FAIL: frame does not have a controller");
        finishSWTest();
        return;
    }

    log("PASS: frame has a controller");
    
    listenForControllerChange(frame);
    registration.update();
}

test();
</script>
</body>
</html>
