<!DOCTYPE html>
<html>
<head>
    <title>W3C Beacon As Fetch (Fetch KeepAlive) Navigate Test</title>
</head>
<body>
    <script src="beacon-common.sub.js"></script>
    <script>
        "use strict";

        // An array should be passed through postMessage to this iFrame, where
        //     [0] contains a test case id as defined in beacon-common.js.
        //     [1] is the URL for the keep alive fetch() or sendBeacon().
        //     [2] string indicating the function to call - "fetch" to call fetch() or "beacon" to call sendBeacon().
        // The testcase id is returned back to the window through postMesage.
        var tests = 0;
        window.onmessage = function(e) {
            var testCaseId = e.data[0];
            var url = e.data[1];
            var func = e.data[2];
            tests++;

            // Reconstruct enough of the test case to send the keep alive fetch (data and url).
            var testCase = testLookup[testCaseId];
            testCase.url = url;

            if (func === "beacon") {
                // sendData calls sendBeacon
                sendData(testCase);
            }
            else {
                throw new Error(func + " is an invalid function");
            }

            // Let the main page continue the test if we don't immediately throw an exception.
            parent.postMessage(testCaseId, "*");

            // Now navigate ourselves.
            if (tests == sampleTests.length) {
                window.location = "http://{{host}}:{{ports[http][0]}}/";
            }
        }
    </script>
</body>
</html>
