blob: 1759089c2737ae71d8d4599e36a553cc19d36195 [file] [edit]
<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test.js"></script>
<script>
if (window.testRunner) {
testRunner.waitUntilDone();
testRunner.dumpAsText();
}
jsTestIsAsync = true;
var count = 0;
</script>
</head>
<body>
<script>
function maybeClick(url) {
const parser = document.createElement('a');
parser.href = url;
parser.click();
}
description("Tests that we properly handle JavaScript URLs containing comment characters, newlines, and carriage returns.");
const ignoreCases = [
"javascript:// A fun test%0aalert(count); ++count;",
"javascript://:%0aalert(count); ++count;",
"javascript://:%0dalert(count); ++count;",
"javascript://:%0a%0dalert(count); ++count;"
];
const executeCases = [
"javascript:alert(count); ++count;",
"javascript://%0a://%0dalert(count); ++count;",
"javascript://%0d//:%0aalert(count); ++count;"
];
for (const c of ignoreCases)
maybeClick(c);
setTimeout(function () {
if (count)
testFailed("A to be ignored JavaScript URL was executed.");
else
testPassed("Ignorable JavaScript URLs were ignored.");
for (const c of executeCases)
maybeClick(c);
setTimeout(() => {
if (count != executeCases.length)
testFailed("An executable JavaScript URLs was ignored.");
else
testPassed("All executable JavaScript URLs were executed.");
finishJSTest();
}, 0);
}, 0);
</script>
</body>
</html>