<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Security-Policy" content="connect-src http://127.0.0.1:8000/security/contentSecurityPolicy/resources/redir.py">
    <script src="/js-test-resources/js-test-pre.js"></script>
</head>
<body>
    <script>
        window.jsTestIsAsync = true;
        function log(msg) {
            document.getElementById("console").appendChild(document.createTextNode(msg + "\n"));
        }

        var haveReportedXhrError = false;
        var haveReportedDocumentURI = false;

        // Expect the document URI to be the document URL stripped for reporting.
        document.addEventListener('securitypolicyviolation', e => {
            document.body.innerHTML += `documentURI = <b>${e.documentURI}</b><br/><br/>`;
            haveReportedDocumentURI = true;
            if (haveReportedXhrError)
                finishJSTest();
        });

        var xhr = new XMLHttpRequest;
        try {
            // Redirect to a different host, because as of CSP2 paths
            // are ignored when matching after a redirect.
            xhr.open("GET", "resources/redir.py?url=http://localhost:8000/security/contentSecurityPolicy/resources/xhr-redirect-not-allowed.py", true);
        } catch(e) {
            testFailed("XMLHttpRequest.open() should not throw an exception.");
        }

        xhr.onload = function () {
            testFailed("XMLHttpRequest.send() should fail to follow the disallowed redirect.");
            finishJSTest();
        };

        xhr.onerror = function () {
            testPassed("XMLHttpRequest.send() did not follow the disallowed redirect.");
            haveReportedXhrError = true;
            if (haveReportedDocumentURI)
                finishJSTest();
        };

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