blob: f371f0a4918185528d777fa2d94b6d81b4e09047 [file] [log] [blame]
<html>
<head>
<title>Check exception thrown by getAllResponseHeaders and some
characteristics of the return value</title>
<script type="text/javascript">
function log (msg) {
var paragraph = document.createElement("li");
paragraph.innerHTML=msg.replace(/\n/gm,"<br>");
document.getElementById("console").appendChild(paragraph);
}
var xhr;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else {
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (ex) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
var savedHeader = null;
xhr.onreadystatechange = function() {
var rState = this.readyState;
// We expect an INVALID_STATE_ERR exception for readyState < 2
// and no exception for readyState >= 2
try {
var header = this.getAllResponseHeaders();
if (rState != this.readyState)
log("UNCERTAIN " + rState + ": readyState changed while getting headers.");
if (rState < 2) {
log("FAILED " + rState + ": headerlist=" + header);
} else if (header)
if (savedHeader)
if (savedHeader != header) {
log("FAILED " + rState +
": headerlist changed after it was first returned. Previous header list:\n"
+ savedHeader + "\n New headerlist:\n" + header);
savedHeader = header;
}
else //savedHeader == header here; no need to reprint header
log("PASSED " + rState);
else {//first header list retrieved
if (/^Set-Cookie:|^Set-Cookie2:/im.test(header))
log("FAILED " + rState +
": /^Set-Cookie:|^Set-Cookie2:/ matches. getAllResponseHeaders returned:\n" + header);
else if (window.testRunner)
//do not print list for automated tests to avoid false failures.
log("PASSED " + rState +
": getAllResponseHeaders returned what looks like a conforming headerlist.");
else
log("PASSED " + rState +
": getAllResponseHeaders returned:\n" + header);
savedHeader = header;
}
else //header is null
log("FAILED " + rState + ": null header list returned");
} catch (e) {
if (rState < 2) {
log("PASSED " + rState);
} else {
log("FAILED " + rState + ": EXCEPTION THROWN: " + e.message + ".");
}
}
if ((rState == 4) && (window.testRunner))
testRunner.notifyDone();
}
function test() {
if (window.testRunner) {
testRunner.waitUntilDone();
testRunner.dumpAsText();
}
// Test for readyState = 0
try {
var header = xhr.getAllResponseHeaders();
log("FAILED " + xhr.readyState + ": header=" + header);
} catch (e) {
log("PASSED " + xhr.readyState);
}
try {
xhr.open("GET","resources/1251.html", true);
xhr.send(null);
} catch(e) {
log("FAILED open/send: EXCEPTION THROWN: " + e.message +".");
if (window.testRunner)
testRunner.notifyDone();
}
}
</script>
</head>
<body onload="test()">
<p>Test page for <a href="http://bugs.webkit.org/show_bug.cgi?id=15356">bug 15356</a>
and <a href="http://bugs.webkit.org/show_bug.cgi?id=29121">bug 29121</a></p>
<p>Assertion: Invoking getAllResponseHeaders method when readyState >= 2
(HEADERS_RECEIVED) should return a conforming list of headers.</p>
<script>
if (!window.testRunner)
document.write("<p>If the test passes one should see \
below the ruler the text \"passed\" in all capital letters, 5 times, \
followed each time by a space and the readyState number.</p>\n\
<p>ReadyStatenumbers should be in ascending order 0 to 4.</p>\n\
<p>A conforming list of response headers should also be printed.</p>\n\
<p>A conforming list of headers:</p> \
<li> contains one header per line.</li> \
<li> has header names and header values separated by a COLON and \
a SPACE.</li>\
<li> does not contain any headers that match (case-insensitively) \
Set-Cookie or Set-Cookie2</li>");
</script>
<hr>
<p><ol id=console></ol></p>
</body>
</html>