<!DOCTYPE HTML> <html> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=1070842 --> <head> <meta charset="utf-8"> <title>Test for Bug 1070842</title> <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> <script type="application/javascript"> /** Test for error reporting behavior. **/ SimpleTest.waitForExplicitFinish(); function testErrorReportingHelper(f, rgxp, preventDefault) { return new Promise(function(resolve, reject) { window.addEventListener('error', function l(e) { window.removeEventListener('error', l); ok(rgxp.test(e.message), "Should get message matching " + rgxp + ". Got: " + e.message); var expectedMessages; if (preventDefault) { e.preventDefault(); expectedMessages = []; } else { expectedMessages = [{message: rgxp}]; } SimpleTest.monitorConsole(resolve, expectedMessages, /* forbidUnexpectedMsgs = */ true); setTimeout(SimpleTest.endMonitorConsole.bind(SimpleTest), 0); }); // Notify the test harness to avoid treating the next exception as a test failure. SimpleTest.expectUncaughtException(); // Invoke the function async so that the exception doesn't get eaten by // the Promise machinery. setTimeout(f, 0); }); } function testErrorReporting(f, rgxp) { return new Promise(function(resolve, reject) { testErrorReportingHelper.bind(null, f, rgxp, false)().then( testErrorReportingHelper.bind(null, f, rgxp, true)).then( resolve); }); } function go() { var otherWin = $('emptyFrame').contentWindow; var clickMe = $('clickMe'); testErrorReporting.bind(null, () => { throw Error("Simple Error") }, /Simple Error/)().then( testErrorReporting.bind(null, () => otherWin.eval('throw Error("Cross Global Error")'), /Cross Global Error/)).then( testErrorReporting.bind(null, () => clickMe.dispatchEvent(new MouseEvent('click')), /thrwan/)).then( testErrorReporting.bind(null, () => { clickMe.setAttribute('onclick', ' '); /* Make sure we recompile. */ clickMe.setAttribute('onclick', '?'); clickMe.onclick; }, /SyntaxError/)).then( SimpleTest.finish.bind(SimpleTest)); } </script> </head> <body onload="go();"> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1070842">Mozilla Bug 1070842</a> <p id="display"></p> <div id="content" style="display: none"> <button id="clickMe" onclick="thrwan.error;">Click Me</button> <iframe id="emptyFrame"></iframe> </div> <pre id="test"> </pre> </body> </html>