| Index: LayoutTests/fast/events/window-onerror-isolatedworld-02.html
|
| diff --git a/LayoutTests/fast/events/window-onerror-isolatedworld-02.html b/LayoutTests/fast/events/window-onerror-isolatedworld-02.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e502a93eaa63dd8355d9fcad52dbce95869959fa
|
| --- /dev/null
|
| +++ b/LayoutTests/fast/events/window-onerror-isolatedworld-02.html
|
| @@ -0,0 +1,66 @@
|
| +<!DOCTYPE html>
|
| +<html>
|
| +<head>
|
| +</head>
|
| +<body>
|
| + <p>Test that window.onerror and "error" event listeners from isolated world are
|
| + invoked for uncaught exceptions in scripts running in isolate worlds as
|
| + well as for exceptions in the main world.<a href="https://bugs.webkit.org/show_bug.cgi?id=8519">Bug 8519.</a>
|
| + </p>
|
| + <pre id="console"></pre>
|
| + <script>
|
| + var expectedRecordCount = 10;
|
| + var recordCount = 0;
|
| + document.getElementById("console").addEventListener("DOMNodeInserted", function(e) {
|
| + if (++recordCount === expectedRecordCount && window.testRunner)
|
| + testRunner.notifyDone();
|
| + }, false);
|
| +
|
| +
|
| + var throwExceptions = function(isolatedWorld)
|
| + {
|
| + window.addEventListener("load", function(e) {
|
| + // Do the following call from load listener to make sure error in the setTimeout callback always happens after the error in this listener.
|
| + setTimeout(function() {
|
| + throw new Error("Error in " + isolatedWorld + " setTimeout callback.");
|
| + }, 0);
|
| + throw new Error("Error in " + isolatedWorld + " load handler.");
|
| + }, false);
|
| +
|
| + throw new Error("Error in "+ isolatedWorld + " inline script.");
|
| + };
|
| +
|
| + var errorHandlers = function(isolatedWorld)
|
| + {
|
| + function lastUrlComponent(url) {
|
| + return url ? url.match( /[^\/]+\/?$/ )[0] : url;
|
| + }
|
| +
|
| + function log(msg) {
|
| + var record = document.createElement("div");
|
| + record.innerHTML = msg;
|
| + document.getElementById("console").appendChild(record);
|
| + }
|
| +
|
| + window.onerror = function(msg, url, line) {
|
| + log(isolatedWorld + " window.onerror: " + msg + " at " + lastUrlComponent(url) + ":" + line, "*");
|
| + return true;
|
| + }
|
| +
|
| + window.addEventListener("error", function(e) {
|
| + var url = lastUrlComponent(e.filename);
|
| + log(isolatedWorld + " error event listener: " + e.message + " at " + url + ":" + e.lineno, "*");
|
| + e.preventDefault();
|
| + }, false);
|
| + };
|
| +
|
| + if (window.testRunner) {
|
| + testRunner.dumpAsText();
|
| + testRunner.waitUntilDone();
|
| + testRunner.evaluateScriptInIsolatedWorld(1, "(" + errorHandlers + ")('isolated world'); (" + throwExceptions + ")('isolated world')");
|
| + }
|
| +
|
| + throwExceptions("main world");
|
| + </script>
|
| +</body>
|
| +</html>
|
|
|