| <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> |