blob: 40afc79c5af6d8bc8e50722f1492177d826fcd27 [file] [log] [blame]
<!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>