<html>
<body>
<p>Test that when window.onerror handler is called, window.event is the corresponding ErrorEvent object. <a href="https://bugs.webkit.org/show_bug.cgi?id=8519">Bug 8519</a>.</p>
<div id="console"></div>
<script>
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

function log(msg) {
    document.getElementById("console").innerHTML += msg + "<br>";
}

function lastPathComponent(url) {
    return url ? url.match( /[^\/]+\/?$/ )[0] : url;
}

window.onerror = function(msg, url, line, column)
{
    log("Main frame window.onerror: " + msg + " at " + lastPathComponent(url) + ", line: " + line + ", column: " + column);
    log("window.event.type = " + window.event.type);
    log("window.event.message = " + window.event.message);
    log("window.event.filename = " + lastPathComponent(window.event.filename));
    log("window.event.lineno = " + window.event.lineno);
    log("window.event.colno = " + window.event.colno);
    if (window.testRunner)
        testRunner.notifyDone();
    return true;
}

throw new Error(2010);

</script>
</body>
</html>
