<!-- webkit-test-runner [ useEphemeralSession=true ] -->
<!DOCTYPE html>
<html>
<head>
    <script src="/js-test-resources/js-test.js"></script>
</head>
<body>
<script>
    description("Tests that only the origin is sent as referrer for third-party resources in private browsing mode.");
    jsTestIsAsync = true;

    testRunner.dumpChildFramesAsText();

    function openIframe(url, onLoadHandler) {
        const element = document.createElement("iframe");
        element.src = url;
        if (onLoadHandler) {
            element.onload = onLoadHandler;
        }
        document.body.appendChild(element);
    }

    var referrer;
    fetch("resources/echo-referrer.php").then(function(response) {
        return response.text();
    }).then(function(data) {
        referrer = data;
        shouldBeEqualToString("referrer", "http://127.0.0.1:8000/security/strip-referrer-to-origin-for-third-party-requests-in-private-mode.html");

        fetch("http://localhost:8000/security/resources/echo-referrer.php").then(function(response) {
            return response.text();
        }).then(function(data) {
            referrer = data;
            shouldBeEqualToString("referrer", "http://127.0.0.1:8000/");
            openIframe("http://localhost:8000/security/resources/echo-referrer.php", finishJSTest);
        }).catch(function(error) {
            console.log(error.message);
            finishJSTest();
        });

    }).catch(function(error) {
        console.log(error.message);
        finishJSTest();
    });

</script>
</body>
</html>
