<html>
<head>
<title></title>
<script type='text/javascript'>
function doGC()
{
    if (window.GCController)
        return GCController.collect();

    if (window.gc)
        return window.gc();

    for (var i = 0; i < 10000; i++)
        var s = new String("");
}

function sendTouchUp()
{
    doGC();
    // This touchend will cause a crash if the bug is present.
    eventSender.releaseTouchPoint(0);
    eventSender.touchEnd();
    // This touchstart will finish the test when we don't crash.
    eventSender.addTouchPoint(10,10);
    eventSender.touchStart();
}

function finishTest(e)
{
    layoutTestController.notifyDone();
}

document.ontouchstart =  finishTest;
</script>
</head>
<body onload="sendTouchUp();">
<p>If the test doesn't crash, then PASS</p>
</body>
</html>
