<html>
<body>
    <p>This tests that a javascript: URL subframe can access a child javascript: URL subframe of itself.</p>
    <iframe name="aFrame" id="aFrame" style="width: 500px; height: 300px;"></iframe>
    <script>
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.dumpChildFramesAsText();
            testRunner.waitUntilDone();
        }

        var innerURL = 'javascript:\\\"<html>'
            + "<body>"
            +     '<p id=\\\\\\\"accessMe\\\\\\\">FAIL: Cross frame access from a javascript: URL was denied.</p>'
            +     "<p>Inner-inner iframe.</p>"
            + "</body>"
            + '</html>\\\"';

        var url = "javascript:\"<html>"
            + "<body>"
            +     "<iframe src='" + innerURL + "'></iframe>"
            +     "<p>Inner iframe.</p>"
            +     "<scr" + "ipt>"
            +         "var testDone = false;"
            +         "setTimeout(test, 1);"
            +         "setTimeout(function() {"
            +             "if (!testDone) {"
            +                 "alert('FAIL: Test timed out');"
            +                 "if (parent.testRunner)"
            +                     "parent.testRunner.notifyDone();"
            +             "}"
            +         "}, 2000);"
            +         "function test() {"
            +             "try {"
            +                 "if (frames[0].document.body && frames[0].document.getElementById('accessMe')) {"
            +                     "frames[0].document.getElementById('accessMe').innerHTML = 'PASS: Cross frame access from a javascript: URL was allowed!';"
            +                     "if (parent.testRunner)"
            +                         "parent.testRunner.notifyDone();"
            +                     "testDone = true;"
            +                     "return;"
            +                 "}"
            +             "} catch (e) {"
            +             "}"
            +             "setTimeout(test, 1);"
            +         "}"
            +     "</scri" + "pt>"
            + "</body>"
            + "</html>\"";

        var iframe = document.getElementById("aFrame");
        iframe.src = url;
    </script>
</body>
</html>
