<html>
<head>
    <script>
        function loaded()
        {
            var beenHere = document.getElementById("beenHere");
            var input = document.getElementById("input");

            if (beenHere.value) {
                var result = "FAIL";
                if (input.value == "PASS") {
                    beenHere.value = "PASS";
                    result = "PASS";
                }

                document.getElementById("result").innerText = result;

                if (window.layoutTestController)
                    layoutTestController.notifyDone();
                return;
            }

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

            beenHere.value = "FAIL";

            input.value = "PASS";

            var form = document.getElementById("form");
            form.submit();
        }
    </script>
</head>
<!-- the unload handler keeps this page out of the B/F cache -->
<body onunload="" onload="loaded()">
    <p>
        This is a test for <i><a href="http://bugs.webkit.org/show_bug.cgi?id=14400">http://bugs.webkit.org/show_bug.cgi?id=14400</a>
        Assertion failure (SHOULD NEVER BE REACHED) going back on YouTube</i>.
    </p>
    <p>
        Test result: <span id="result">test did not complete</span>
    </p>
    <button type="button" name="foo">Button</button>
    <input id="input" type="button" name="foo" value="FAIL">
    <input id="beenHere">
    <form action="data:text/html,<script>history.back()</script>" method="POST" id="form"></form>
</body>
</html>
