<!DOCTYPE HTML>
<html>
<head>
<script src="/js-test-resources/js-test.js"></script>
<script>
description("Checking transmission of Beacons involving cookies.");

window.jsTestIsAsync = true;

function test() {
    if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
        //testRunner.dumpPingLoaderCallbacks();
    }
    try {
        var xhr = new XMLHttpRequest();
        xhr.open("GET", "../../cookies/resources/setCookies.cgi", false);
        xhr.setRequestHeader("SET-COOKIE", "hello=world;path=/");
        xhr.send(null);
        if (xhr.status != 200) {
            testFailed("cookie not set");
            finishJSTest();
        }
    } catch (e) {
        testFailed("cookie not set");
        finishJSTest();
    }

    shouldBeTrue('navigator.sendBeacon("resources/save-beacon.php?name=cookie", "Blip");');
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "resources/check-beacon.php?name=cookie");
    xhr.onload = function () {
        var lines = xhr.responseText.split("\n");
        for (var i in lines)
            testPassed(lines[i]);
        finishJSTest();
    };
    xhr.onerror = function () {
        testFailed("Unable to fetch beacon status");
        finishJSTest();
    };

    xhr.send();
}
</script>
</head>
<body onload="test();">
</body>
</html>
