| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'"> | |
| <script src="../../http/tests/inspector/resources/inspector-test.js"></script> | |
| <script> | |
| TestPage.allowUncaughtExceptions = true; | |
| TestPage.needToSanitizeUncaughtExceptionURLs = true; | |
| function triggerCSPExceptionInsideScript() { | |
| eval("console.log('Inside Script - CSP should prevent this')"); | |
| } | |
| function triggerCSPExceptionOutsideScript() { | |
| let iframe = document.createElement("iframe"); | |
| iframe.src = "resources/csp-exception-iframe.html"; | |
| document.body.appendChild(iframe); | |
| } | |
| function test() | |
| { | |
| let suite = InspectorTest.createAsyncSuite("PauseOnCSPExceptionDoesNotCrash"); | |
| suite.addTestCase({ | |
| name: "TriggerCSPExceptionInsideOfScript", | |
| description: "Trigger a CSP Exception inside of script should pause.", | |
| test(resolve, reject) { | |
| InspectorTest.evaluateInPage("setTimeout(triggerCSPExceptionInsideScript)"); | |
| WI.debuggerManager.singleFireEventListener(WI.DebuggerManager.Event.Paused, (event) => { | |
| InspectorTest.pass("CSP Exception caused by script evaluation should pause."); | |
| WI.debuggerManager.resume(); | |
| }); | |
| WI.consoleManager.singleFireEventListener(WI.ConsoleManager.Event.MessageAdded, (event) => { | |
| let {message} = event.data; | |
| InspectorTest.assert(message.level === WI.ConsoleMessage.MessageLevel.Error); | |
| InspectorTest.assert(message.line > 0); | |
| InspectorTest.assert(message.column > 0); | |
| InspectorTest.pass("CSP Exception Console Message: " + message.messageText); | |
| resolve(); | |
| }); | |
| } | |
| }); | |
| suite.addTestCase({ | |
| name: "TriggerCSPExceptionOutsideOfScript", | |
| description: "Trigger a CSP Exception outside of script should not pause or crash.", | |
| test(resolve, reject) { | |
| InspectorTest.evaluateInPage("setTimeout(triggerCSPExceptionOutsideScript)"); | |
| let didPause = false; | |
| let tempPauseFailListener = WI.debuggerManager.singleFireEventListener(WI.DebuggerManager.Event.Paused, (event) => { | |
| didPause = true; | |
| InspectorTest.fail("CSP Exception caused outside of script evaluation should not pause, but did."); | |
| WI.debuggerManager.resume(); | |
| reject(); | |
| }); | |
| WI.consoleManager.singleFireEventListener(WI.ConsoleManager.Event.MessageAdded, (event) => { | |
| WI.debuggerManager.removeEventListener(WI.DebuggerManager.Event.Paused, tempPauseFailListener, null); | |
| let {message} = event.data; | |
| InspectorTest.assert(message.level === WI.ConsoleMessage.MessageLevel.Error); | |
| InspectorTest.assert(message.line > 0); | |
| InspectorTest.assert(message.column > 0); | |
| InspectorTest.expectFalse(didPause, "CSP Exception caused outside of script evaluation should not pause."); | |
| InspectorTest.pass("CSP Exception Console Message: " + message.messageText); | |
| resolve(); | |
| }); | |
| } | |
| }); | |
| DebuggerAgent.setPauseOnExceptions("all"); | |
| suite.runTestCasesAndFinish(); | |
| } | |
| </script> | |
| </head> | |
| <body onload="runTest()"> | |
| <p>Test for the CSP exception handling when pause on all exceptions is enabled.</p> | |
| </body> | |
| </html> |