<html>
    <head>
        <script>
            function test()
            {
                if (window.layoutTestController) {
                    layoutTestController.dumpAsText();
                    layoutTestController.waitUntilDone();
                }
                
                window.crash = "crash";
                delete window.crash;
                    
                if (window.navigationController)
                    navigationController.evalAfterBackForwardNavigation("continueTestAfterNavigation()");
            }
            
            function continueTestAfterNavigation()
            {
                print("PASS: You didn't crash");
                
                if (window.layoutTestController)
                    layoutTestController.notifyDone();
            }

            function print(message) {
                var paragraph = document.createElement("p");
                paragraph.appendChild(document.createTextNode(message));
                document.getElementById("console").appendChild(paragraph);
            }
        </script>
    </head>

    <body onload="test()">
        <p>Bug: rdar://problem/4465598 REGRESSION (TOT): Crash occurs at http://maps.google.com/?output=html ( KJS::Identifier::add(KJS::UString::Rep*)</p> 
        <p>This cause for this bug was that the code to save the window object's property map tried to use
        the deleted property sentinel key as a normal pointer.</p>
        <p>To run this test in Safari:</p>
        <ol>
            <li><a href="resources/go-back.html">Click here to do a back/forward navigation.</a></li>
            <li>You should not crash.</li>
        </ol>
        <p>When the automated version of this test passes, you'll see a PASS message below.
        (The automated version is currently disabled because DumpRenderTree doesn't work
        with the back/forward cache enabled.)</p>
        <hr>
        <div id="console"></div>
    </body>
</html>
