<!DOCTYPE html>
<html>
<head>
    <script src="/js-test-resources/js-test.js"></script>
    <script src="resources/util.js"></script>
</head>
<body>
<script>
    description("Tests that only the origin is sent as referrer for third-party requests.");
    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);
    }

    let referrer;
    setEnableFeature(true, function() {
        fetch("resources/echo-referrer.py").then(function(response) {
            return response.text();
        }).then(function(data) {
            referrer = data;
            shouldBeEqualToString("referrer", "http://127.0.0.1:8000/resourceLoadStatistics/strip-referrer-to-origin-for-third-party-requests.html");

            fetch("http://localhost:8000/resourceLoadStatistics/resources/echo-referrer.py").then(function(response) {
                return response.text();
            }).then(function(data) {
                referrer = data;
                shouldBeEqualToString("referrer", "http://127.0.0.1:8000/");

                openIframe("resources/redirect.py?redirectTo=http://localhost:8000/resourceLoadStatistics/resources/echo-referrer.py", function() {
                    setEnableFeature(false, finishJSTest);
                });

            }).catch(function(error) {
                console.log(error.message);
                setEnableFeature(false, finishJSTest);
            });
        }).catch(function(error) {
            console.log(error.message);
            setEnableFeature(false, finishJSTest);
        });
    });
</script>
</body>
</html>
