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

        function firstPartLoaded()
        {
            window.stop();
            document.getElementById("results").innerHTML = "PASS";
            if (window.testRunner)
                testRunner.notifyDone();
        }
    </script>
</head>
<body>
    <p>
        Test for <i><a href="http://bugs.webkit.org/show_bug.cgi?id=13360">http://bugs.webkit.org/show_bug.cgi?id=13360</a>
        REGRESSION: Crash closing live web cam viewer page</i>.
    </p>
    <p>
        If WebKit does not assert or crash after the test, then it passed.
    </p>
    <img width=24 height=24 src="resources/multipart.php?interval=0&img1=2x2-green.png&img2=2x2-green.png&wait=3" onload="firstPartLoaded()">
    <p id="results"></p>
</body>
</html>
