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