<!DOCTYPE html>
<html>

<head>
    <!-- Programmatically converted from a WebKit Reftest, please forgive resulting idiosyncracies.-->
    <meta http-equiv="Content-Security-Policy" content="child-src 'self' http://www1.{{host}}:{{ports[http][0]}}; script-src 'self' 'unsafe-inline'; connect-src 'self';">
    <title>child-src-cross-origin-load</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src='../support/logTest.sub.js?logs=["PASS IFrame %231 generated a load event.","PASS IFrame %232 generated a load event.","PASS IFrame %233 generated a load event.", "violated-directive=frame-src"]'></script>
    <script>
        window.addEventListener("message", function(event) {
            alert_assert(event.data);
        }, false);

        window.addEventListener("securitypolicyviolation", function(e) {
            log("violated-directive=" + e.violatedDirective);
        });

        var t_alert = async_test('Expecting alerts: ["PASS","PASS"]');
        var expected_alerts = ["PASS", "PASS"];

        function alert_assert(msg) {
            t_alert.step(function() {
                if (msg.match(/^FAIL/i)) {
                    assert_unreached(msg);
                    t_alert.done();
                }
                for (var i = 0; i < expected_alerts.length; i++) {
                    if (expected_alerts[i] == msg) {
                        assert_true(expected_alerts[i] == msg);
                        expected_alerts.splice(i, 1);
                        if (expected_alerts.length == 0) {
                            t_alert.done();
                        }
                        return;
                    }
                }
                assert_unreached('unexpected alert: ' + msg);
                t_alert.done();
            });
        }

    </script>
    <!-- enforcing policy:
child-src 'self' http://www1.{{host}}:{{ports[http][0]}}; script-src 'self' 'unsafe-inline'; connect-src 'self';
-->
    <p>
        IFrames blocked by CSP should generate a 'load', not 'error' event, regardless of blocked state. This means they appear to be normal cross-origin loads, thereby not leaking URL information directly to JS.
    </p>
    <script>
        window.wasPostTestScriptParsed = true;
        var loads = 0;

        function loadEvent() {
            loads++;
            log("PASS " + "IFrame #" + loads + " generated a load event.");
            if (loads == 3)
                log("TEST COMPLETE");
        }

    </script>
</head>

<body>
    <iframe src="/content-security-policy/support/postmessage-pass.html" onload="loadEvent()"></iframe>
    <iframe src="http://{{domains[www1]}}:{{ports[http][0]}}/content-security-policy/support/postmessage-pass.html" onload="loadEvent()"></iframe>
    <iframe src="http://{{domains[www2]}}:{{ports[http][0]}}/content-security-policy/support/postmessage-fail.html" onload="loadEvent()" onerror="log('FAIL')"></iframe>
    <div id="log"></div>
</body>

</html>
