<!-- 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 redirects 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.py").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-redirects-in-private-mode.html");

        openIframe("resources/redirect.py?redirectTo=http://localhost:8000/security/resources/echo-referrer.py", finishJSTest);

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

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