<!DOCTYPE html><!-- webkit-test-runner [ isAppInitiated=false ] -->
<html>
<head>
    <script src="../resources/js-test-pre.js"></script>
</head>
<body onload="runTest()">
<script>
description('Ensure beacons are attributed correctly.');

window.jsTestIsAsync = true;

function askForAttribution() {
    var didLoadAppInitiatedRequest = testRunner.didLoadAppInitiatedRequest();
    var didLoadNonAppInitiatedRequest = testRunner.didLoadNonAppInitiatedRequest();

    if (!didLoadNonAppInitiatedRequest) {
        testFailed("Did not load non-app initiated request");
        finishJSTest();
        return;
    }

    if (didLoadAppInitiatedRequest) {
        testFailed("Did load app initiated request");
        finishJSTest();
        return;
    }

    testPassed("Successfully loaded only non-app-initiated beacon requests");

    finishJSTest();
}

function runTest()
{
    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("../blink/sendbeacon/resources/save-beacon.py?name=cookie", "Blip");');
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "../blink/sendbeacon/resources/check-beacon.py?name=cookie");
    xhr.onload = function () {
        var lines = xhr.responseText.split("\n");
        for (var i in lines)
            testPassed(lines[i]);
        askForAttribution();
    };
    xhr.onerror = function () {
        testFailed("Unable to fetch beacon status");
        finishJSTest();
    };

    xhr.send();
}
</script>
<script src="../resources/js-test-post.js"></script>
</body>
</html>
