<html>
<head>
    <script>
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.waitUntilDone();
        }

        function onloadForButtonChild() { 
            var targetChild = document.getElementById('targetChild');
            targetChild.src = "resources/targetChild-JSTargetNode-onclick-shortcut.html";
            targetChild.onload = start;
        }

        function start() {
            var buttonChild = window.frames[1];
            buttonChild.document.getElementById('button').click();

            if (window.testRunner)
                testRunner.notifyDone();
        }
    </script>
</head>
<body>
    <p>This tests that frame used when setting eventListeners on an EventTarget with the shortcut (onclick, etc), 
       is the target nodes frame. (rdar://problem/5426142).  This test passes if you don't see an alert dialog with
       the domain of "localhost" in it and an "Unsafe JavaScript" warning is logged to the console.</p>
    <iframe id="targetChild" src=""></iframe>
    <iframe src="resources/childWithButton.html" onload="onloadForButtonChild();"></iframe>
</body>
</html>
