<!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 filtered(url){
    var parser = document.createElement('a');
    parser.href = url;
    if (parser.protocol.indexOf("javascript") == -1) {
  	    parser.click();
    }
}

function unfiltered(url){
    var parser = document.createElement('a');
    parser.href = url;
    if (parser.protocol === "javascript:") {
  	    parser.click();
    };
}

description("Tests that we properly handle JavaScript URLs containing comment characters, newlines, and carriage returns.");

let cases = [ "javascript:alert(count); ++count;",
    "javascript:// A fun test%0aalert(count); ++count;",
    "javascript://:%0aalert(count); ++count;",
    "javascript://:%0dalert(count); ++count;",
    "javascript://:%0a%0dalert(count); ++count;",
    "javascript://%0a://%0dalert(count); ++count;",
    "javascript://%0d//:%0aalert(count); ++count;"
];

for (var c in cases)
    filtered(cases[c]);

setTimeout(function () {
    if (!count)
        testPassed("No JavaScript URLs executed.");
    else
        testFailed("JavaScript URLs were executed.")

    for (var c in cases)
        unfiltered(cases[c]);

    setTimeout(function() {
        if (count == cases.length)
            testPassed("JavaScript URLs were executed.")
        else
            testFailed("No JavaScript URLs executed.");

    	finishJSTest();        
    }, 0);
}, 0);
</script>
</body>
</html>
