| <!DOCTYPE html> |
| <html> |
| <head> |
| <script> |
| window.jsTestIsAsync = true; |
| window.isOnErrorTest = true; |
| </script> |
| <script src="../../resources/js-test.js"></script> |
| <script src="resources/onerror-test.js"></script> |
| </head> |
| <body> |
| <script> |
| description('Test that window.onerror and "error" event listeners from main world are not invoked for uncaught exceptions in scripts running in isolate worlds, but only for exceptions in the main world.'); |
| |
| var onerrorsHandled = 0; |
| function onErrorCallback(errorsHandled) { |
| onerrorsHandled++; |
| if (onerrorsHandled > 3) |
| testFailed("Only main-world exceptions should be caught by onerror handlers."); |
| |
| // FIXME: This should be 6 once we correctly handle 'error' event dispatch for worlds: crbug.com/225513 |
| if (errorsHandled === 9) |
| finishJSTest(); |
| } |
| |
| var errorEventsHandled = 0; |
| function errorEventCallback(errorsHandled) { |
| errorEventsHandled++; |
| if (errorEventsHandled > 3) { |
| // FIXME: This currently fails. We need to correctly handle 'error' event dispatch for worlds: crbug.com/225513 |
| testFailed("Only main-world exceptions should be caught by ErrorEvent listeners."); |
| } |
| |
| // FIXME: This should be 6 once we correctly handle 'error' event dispatch for worlds: crbug.com/225513 |
| if (errorsHandled === 9) |
| finishJSTest(); |
| } |
| |
| dumpOnErrorArgumentValuesAndReturn(true, onErrorCallback); |
| dumpErrorEventAndPreventDefault(errorEventCallback); |
| |
| var exceptions = function(worldType) |
| { |
| 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 " + worldType + " world setTimeout callback."); |
| }, 0); |
| throw new Error("Error in " + worldType + " world load handler."); |
| }, false); |
| |
| throw new Error("Error in " + worldType + " world inline script."); |
| } |
| |
| if (window.testRunner) |
| testRunner.evaluateScriptInIsolatedWorld(1, "(" + exceptions + ")('isolated')"); |
| |
| exceptions("main"); |
| |
| </script> |
| </body> |
| </html> |