<html>
<script>
    var blockedPorts = new Array(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, 4045, 6000, 0);
    
    var baseURL = "255.255.255.255";
    var currentPort = 0;
    
    if (window.layoutTestController) {
        layoutTestController.waitUntilDone();
        layoutTestController.dumpResourceLoadCallbacks();
    }
        
    function nextTest() {
        if (!blockedPorts[currentPort]) {
            ftpTest();
            return;
        }
        var newURL = "http://" + baseURL + ":" + blockedPorts[currentPort] + "/test.jpg";
        currentPort++;
        testIMG.src = newURL;
    }
    
    function ftpTest() {
        testIMG.setAttribute("onError", "ftp21Test();");
        var newURL = "ftp://" + baseURL + "/test.jpg";
        testIMG.src = newURL;
    }
    
    function ftp21Test() {
        testIMG.setAttribute("onError", "ftp22Test();");
        var newURL = "ftp://" + baseURL + ":21/test.jpg";
        testIMG.src = newURL;
    }
    
    function ftp22Test() {
        testIMG.setAttribute("onError", "finishTesting();");
        var newURL = "ftp://" + baseURL + ":22/test.jpg";
        testIMG.src = newURL;
    }
    
    function finishTesting() {
        if (window.layoutTestController) {
            layoutTestController.dumpAsText();
            setTimeout("layoutTestController.notifyDone()", 0); 
        }
    }
</script>
<body>
<p>This test attempts to change the src of an IMG tag to all black listed ports to confirm that WebKit returns the
correct error for them - blocked instead of cannot find.  It also tries the FTP ports for exemptions.  Due to the 
nature of this test, the results can only be processed automatically via DumpRenderTree
</p>
<img id="testIMG" src="http://255.255.255.255/test.jpg" onError="nextTest();"></img>
</body>
</html>
