<html>
<head>
    <script type="text/javascript">
        function finish()
        {
            if (window.testRunner)
                testRunner.notifyDone();
        }

        function crash_step2()
        {
          var target = document.getElementById("target");
          target.contentDocument.body.parentNode.removeChild(target.contentDocument.body);
          target.parentNode.removeChild(target);
          setTimeout(finish, 10);
        }

        function test()
        {
            if (window.testRunner) {
                testRunner.dumpAsText();
                testRunner.waitUntilDone();
                var target = document.getElementById("target");
                eventSender.mouseMoveTo(target.offsetLeft + target.offsetWidth / 2, target.offsetTop + target.offsetHeight / 2);
                setTimeout(crash_step2, 100);
            }
        }
    </script>
</head>
<body onload="test()">
    <p>
        Test for <i><a href="http://bugs.webkit.org/show_bug.cgi?id=13124">http://bugs.webkit.org/show_bug.cgi?id=13124</a>
        REGRESSION: Reproducible crash in Widget::getView</i>.
    </p>
    <p>
        To test interactively, move the mouse into the yellow rect and wait a second.
    </p>
    <p>
        No crash means SUCCESS.
    </p>
    <iframe onmouseover="if (!window.testRunner) setTimeout(crash_step2, 1000)" id="target" src="data:text/html,<body bgcolor='yellow'></body>" style="border: solid black"></iframe>
</body>
</html>
