<html>
<script>
    var blockedPorts = [ 1, 7, 9, 11, 13, 15, 17, 19, 20,
      21, 22, 23, 25, 37, 42, 43, 53, 77, 79, 87, 95, 101, 102,
      103, 104, 109, 110, 111, 113, 115, 117, 119, 123, 135, 139,
      143, 179, 389, 465, 512, 513, 514, 515, 526, 530, 531, 532,
      540, 556, 563, 587, 601, 636, 993, 995, 2049, 3659, 4045,
      6000, 6665, 6666, 6667, 6668, 6669,

      // Port numbers that we consider to be invalid due to being out of range.
      Math.pow(2, 16) - 1, Math.pow(2, 16), Math.pow(2, 32) - 1, Math.pow(2, 32),
     
      // We don't like FTP.
      "ftp://255.255.255.255/test.jpg",
      "ftp://255.255.255.255:21/test.jpg",
      "ftp://255.255.255.255:22/test.jpg",
    ];

    var allowedPorts = [0, 80, ""];

    if (window.testRunner) {
        testRunner.waitUntilDone();
        testRunner.dumpResourceLoadCallbacks();
    }
   
    function loadHandler(e) {
        console.log("FAIL: load event fired for " + currentURL);
        nextURL();
    }
   
    function errorHandler(e) {
        console.log("PASS: error event fired for " + currentURL);
        nextURL();
    }

    var baseURL = "http://255.255.255.255";
    var currentPort = 0;
    var currentURL = "";
    var theImage;
    function nextURL() {
        if (currentPort < blockedPorts.length) {
            if (typeof blockedPorts[currentPort] === "number")
                currentURL = baseURL + ":" + blockedPorts[currentPort] + "/test.jpg";
            else
                currentURL = blockedPorts[currentPort]
        } else if (currentPort < blockedPorts.length + allowedPorts.length) {
            currentURL = baseURL + ":" + allowedPorts[currentPort - blockedPorts.length] + "/test.jpg";
        } else {
            return finishTesting();
        }
        theImage.src = currentURL;
        currentPort++;
    }

    window.onload = function startTesting() {
        theImage = document.createElement('img');
        theImage.addEventListener('error', errorHandler);
        theImage.addEventListener('load', errorHandler);
        document.body.appendChild(theImage);
        nextURL();
    }

    function finishTesting() {
        if (window.testRunner) {
            testRunner.dumpAsText();
            setTimeout("testRunner.notifyDone()", 0);
        }
    }
</script>
<body>
    <p>This test attempts to change the src of an IMG tag to all black listed ports to confirm that each fires an
    error event. It also tries the FTP ports for exemptions.</p>
</p>
</body>
</html>
