<html>
    <script src="../../resources/js-test-pre.js"></script>
    <body onload="runTest()">
        <div id="console"></div>
        <form id="form1" style="display:none" target="test" action="about:blank"></form>
        <script>
            if (window.testRunner)
            {
                testRunner.dumpAsText();
                testRunner.waitUntilDone();
            }
        
            function runTest()
            {
                document.getElementById('form1').submit();
                
                if (window.testRunner)
                    testRunner.notifyDone();
                document.getElementById('console').innerHTML = 'PASS';
            }

            count = 0;
            document.addEventListener("beforeload", function(event) {
                event.preventDefault();
                count = count + 1;
                if (count == 2)
                {
                    document.body.removeChild(document.getElementById('test'));
                    gc();
                    document.body.offsetTop;
                }
            }, true);
       </script>
       <iframe id="test" src="about:blank"></iframe>
   </body>
</html>

