<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<body>
<p>Test that XMLHttpRequest tolerates extra parameters to its methods.</p>
<script>

    if (window.layoutTestController)
        layoutTestController.dumpAsText();

    var console_messages = document.createElement("ul");
    document.body.appendChild(console_messages);
    
    function log(message)
    {
        var item = document.createElement("li");
        item.appendChild(document.createTextNode(message));
        console_messages.appendChild(item);
    }
    
    function prettyPrintText(text) {
        if (text == null)
            return text;
        return '"' + text + '"';
    }
    
    function dumpResponse() {

       try { log ("  Status: " + req.status); } catch (ex) { log("  Exception getting status: " + ex.message); }
       try { log ("  StatusText: " + prettyPrintText(req.statusText)); } catch (ex) { log("  Exception getting StatusText: " + ex.message); }
       try { log ("  ResponseText: " + prettyPrintText(req.responseText)); } catch (ex) { log("  Exception getting ResponseText: " + ex.message); }
    }

    try {

        if (window.XMLHttpRequest) {
            req = new XMLHttpRequest();
        } else {
            try {
                req = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (ex) {
                req = new ActiveXObject("Microsoft.XMLHTTP");
            }
        }
        
        req.open('POST', 'resources/post-echo.cgi', false, null, null, null);
        
        req.setRequestHeader('foo', 'bar', null);
        req.overrideMimeType('text/xml', null);

        req.send('SUCCESS', null);
        
        req.getResponseHeader('Date', null);
        req.getAllResponseHeaders(null);
        
        dumpResponse();
        
    } catch (ex) {
        log("FAILURE: " + ex);
    }
    
</script>
</body>
</html>
