<html> 
    <head> 
        <script> 
            function runTest()
            {
                if (window.testRunner)
                    testRunner.dumpAsText();
                else
                {
                    var win = window.open("about:blank");
                    var notification = win.webkitNotifications.createNotification('');
                    notification.show();
                    win.close();
                    notification.cancel();
                }
            }
         </script> 
    </head> 
    <body onload="runTest()"> 
        <p>This test needs to run manually and cannot run inside DumpRenderTree. Passes if it does not crash on running the test alongwith with a couple of page reloads.</p>
    </body> 
</html>

