<html>
<head>
<script>

if (window.testRunner) {
    window.testRunner.dumpAsText();
    window.testRunner.waitUntilDone();
}

var submissionCount      = 0;
var disallowedSubmission = false;

function allowedFormSubmitted()
{
    ++submissionCount;

    if (submissionCount == 10) {
        document.getElementById("test_status").innerHTML = (disallowedSubmission ? "FAIL" : "PASS");
      
        if (window.testRunner)
            window.testRunner.notifyDone();
    }
}

function disallowedFormSubmitted()
{
    disallowedSubmission = true;
}

</script>
</head>

<body>

    <p>This test runs five IFrames with forms allowed, one IFrame with forms
    disallowed, then five more IFrames with forms allowed. If ten form
    submissions are made, and the disallowed submission is not one of them,
    we consider the test to have passed. This test will print
    &quot;PASS&quot; on success.</p>

    <!-- five IFrames with forms allowed -->

    <iframe style="width: 60px; height: 60px;"
        sandbox="allow-scripts allow-forms allow-same-origin"
        src="resources/sandboxed-iframe-form-allowed.html">
    </iframe>
    <iframe style="width: 60px; height: 60px;"
        sandbox="allow-scripts allow-forms allow-same-origin"
        src="resources/sandboxed-iframe-form-allowed.html">
    </iframe>
    <iframe style="width: 60px; height: 60px;"
        sandbox="allow-scripts allow-forms allow-same-origin"
        src="resources/sandboxed-iframe-form-allowed.html">
    </iframe>
    <iframe style="width: 60px; height: 60px;"
        sandbox="allow-scripts allow-forms allow-same-origin"
        src="resources/sandboxed-iframe-form-allowed.html">
    </iframe>
    <iframe style="width: 60px; height: 60px;"
        sandbox="allow-scripts allow-forms allow-same-origin"
        src="resources/sandboxed-iframe-form-allowed.html">
    </iframe>

    <!-- one IFrame with forms disallowed -->

    <iframe style="width: 60px; height: 60px;"
        sandbox="allow-scripts allow-same-origin"
        src="resources/sandboxed-iframe-form-disallowed.html">
    </iframe>

    <!-- five more IFrames with forms allowed -->

    <iframe style="width: 60px; height: 60px;"
        sandbox="allow-scripts allow-forms allow-same-origin"
        src="resources/sandboxed-iframe-form-allowed.html">
    </iframe>
    <iframe style="width: 60px; height: 60px;"
        sandbox="allow-scripts allow-forms allow-same-origin"
        src="resources/sandboxed-iframe-form-allowed.html">
    </iframe>
    <iframe style="width: 60px; height: 60px;"
        sandbox="allow-scripts allow-forms allow-same-origin"
        src="resources/sandboxed-iframe-form-allowed.html">
    </iframe>
    <iframe style="width: 60px; height: 60px;"
        sandbox="allow-scripts allow-forms allow-same-origin"
        src="resources/sandboxed-iframe-form-allowed.html">
    </iframe>
    <iframe style="width: 60px; height: 60px;"
        sandbox="allow-scripts allow-forms allow-same-origin"
        src="resources/sandboxed-iframe-form-allowed.html">
    </iframe>
    
    <p id='test_status'>FAIL: Script didn't run</p>
</body>
</html>
