6 <p>Test that window.onerror and "error" event listeners from main world are
7 invoked for uncaught exceptions in user scripts running in isolate worlds as
8 well as for exceptions in the main world.<a href="https://bugs.webkit.org/show_bug.cgi?id=8519">Bug 8519.</a>
10 <div id="console"></div>
13 var expectedRecordCount = 12;
15 document.getElementById("console").addEventListener("DOMNodeInserted", function(e) {
17 if (recordCount === expectedRecordCount && window.layoutTestController)
18 layoutTestController.notifyDone();
22 var record = document.createElement("div");
23 record.innerHTML = msg;
24 document.getElementById("console").appendChild(record);
27 function lastUrlComponent(url) {
28 return url ? url.match( /[^\/]+\/?$/ )[0] : url;
31 window.onerror = function(msg, url, line)
33 log("Main world window.onerror: " + msg + " at " + lastUrlComponent(url) + ":" + line);
37 window.addEventListener("error", function(e)
39 var url = lastUrlComponent(e.filename);
40 log("Main world error event listener: " + e.message + " at " + url + ":" + e.lineno);
44 var exceptions = function(isolatedWorld)
46 window.addEventListener("load", function(e) {
47 // Do the following call from load listener to make sure error in the setTimeout callback always happens after the error in this listener.
48 setTimeout(function() {
49 throw new Error("Error in " + isolatedWorld + " setTimeout callback.");
51 throw new Error("Error in " + isolatedWorld + " load handler.");
55 throw new Error("Error in "+ isolatedWorld + " inline script.");
58 if (window.layoutTestController) {
59 layoutTestController.dumpAsText();
60 layoutTestController.waitUntilDone();
61 layoutTestController.addUserScript("(" + exceptions + ")('user script')", false, true);
64 exceptions("main world");