<!DOCTYPE HTML>
<html>
<head>
<script src="/js-test-resources/js-test.js"></script>
<script>
description("Testing navigator.sendBeacon() within same origin.");

window.jsTestIsAsync = true;

var binary_array = new Uint32Array(10);
for (var i = 0; i < binary_array.length; i++) {
    binary_array[i] = 64 + i;
}

var blob = new Blob(["hello", " ", "world"], {type: "text/plain;from-beacon=true"});
var form = new FormData();
form.append("key", "value");
var searchParams = new URLSearchParams("a=b&c=d");

var tests = [
    "SameOrigin",
    binary_array,
    blob,
    form,
    searchParams];

var payload;
function testOne() {
    payload = tests.shift();
    if (!payload) {
        finishJSTest();
        return;
    }
    debug("Sending beacon with type: " + Object.prototype.toString.call(payload));
    shouldBeTrue('navigator.sendBeacon("resources/save-beacon.php?name=same-origin", payload);');
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "resources/check-beacon.php?name=same-origin");
    xhr.onload = function () {
        var lines = xhr.responseText.split("\n");
        for (var i in lines)
            testPassed(lines[i]);
        testOne();
    };
    xhr.onerror = function () {
        testFailed("Unable to fetch beacon status");
        testOne();
    };
    xhr.send();
}

function test() {
    if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
        //testRunner.dumpPingLoaderCallbacks();
    }
    testOne();
}
</script>
</head>
<body onload="test();">
</body>
</html>
