<!DOCTYPE html>
<html>

<head>
    <title>frame-src-allowed</title>
    <meta http-equiv="Content-Security-Policy" content="frame-src 'self'; script-src 'self' 'unsafe-inline'; connect-src 'self';">
    <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."]'></script>
    <script>
        window.addEventListener('securitypolicyviolation', function(e) {
            log("Fail");
        });

        window.addEventListener("message", function(event) {
            alert_assert(event.data);
        }, false);

        var t_alert = async_test('Expecting alerts: ["PASS"]');
        var expected_alerts = ["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_equals(expected_alerts[i], msg);
                        expected_alerts.splice(i, 1);
                        if (expected_alerts.length == 0) {
                            t_alert.done();
                        }
                        return;
                    }
                }
                assert_unreached('unexpected alert: ' + msg);
                t_log.done();
            });
        }

    </script>
    <p>
        This iframe should be allowed.
    </p>
    <script>
        window.wasPostTestScriptParsed = true;
        var loads = 0;

        function loadEvent() {
            loads++;
            log("PASS " + "IFrame #" + loads + " generated a load event.");
        }

    </script>
</head>

<body>
    <iframe src="/content-security-policy/support/postmessage-pass.html" onload="loadEvent()"></iframe>
    <div id="log"></div>
</body>

</html>
