| <html> | |
| <head> | |
| <title>Check exception thrown by getReponseHeader </title> | |
| <script type="text/javascript"> | |
| var savedHeader = null; | |
| var headerName="Content-Type"; | |
| var nullTests = new Array("SeT-COoKie", "sEt-coOkIE2", | |
| "xxx-mytest-headerabc", null, "Content-Type:"); | |
| function log (msg) { | |
| var paragraph = document.createElement("li"); | |
| paragraph.innerHTML=msg.replace(/\n/gm,"<br>"); | |
| document.getElementById("console").appendChild(paragraph); | |
| } | |
| function log4(status, rState, subState, msg) { | |
| log(status + " " + rState + " " + subState + ": " + msg); | |
| } | |
| function log3(status, rState, msg) { | |
| log4(status, rState, headerName, msg); | |
| } | |
| if (window.XMLHttpRequest) { | |
| xhr = new XMLHttpRequest(); | |
| } else { | |
| try { | |
| xhr = new ActiveXObject("Msxml2.XMLHTTP"); | |
| } catch (ex) { | |
| xhr = new ActiveXObject("Microsoft.XMLHTTP"); | |
| } | |
| } | |
| 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.getResponseHeader(headerName); | |
| if (rState != this.readyState) | |
| log3("UNCERTAIN", rState, "readyState changed while getting the header."); | |
| if (rState < 2) { | |
| log3("FAILED", rState, headerName + "=" + header); | |
| } else if (header) { | |
| if (savedHeader) | |
| if (savedHeader != header) { | |
| log3("FAILED", rState,headerName + " changed after it was first returned. Previous " + headerName | |
| + "=" + savedHeader + "; New " + headerName + "=" + header + "."); | |
| savedHeader = header; | |
| } | |
| else //savedHeader == header here; no need to reprint header | |
| log3("PASSED", rState, headerName); | |
| else {//first header value retrieved | |
| if (window.testRunner) | |
| //do not print the header's value for automated tests to avoid false failures. | |
| log3("PASSED", rState, "ResponseHeader(" + headerName + ") returned a value."); | |
| else | |
| log3("PASSED", rState, "getResponseHeader(" + headerName + ") returned: " + header + "."); | |
| savedHeader = header; | |
| } | |
| for (var i=0;i<nullTests.length;++i) { | |
| try { | |
| var str = this.getResponseHeader(nullTests[i]); | |
| if (str == null) | |
| log4("PASSED", rState, nullTests[i], "getResponseHeader(" + nullTests[i] + | |
| ") returned null."); | |
| else | |
| log4("FAILED", rState, nullTests[i], "getResponseHeader(" + nullTests[i] + | |
| ") returned \"" + str + "\""); | |
| } catch(e) { | |
| log4("FAILED", rState, nullTests[i], "getResponseHeader(" + nullTests[i] + ") threw exception:" + e); | |
| } | |
| } | |
| } | |
| else //header is null | |
| log3("FAILED", rState, "null " + headerName + " returned."); | |
| } catch (e) { | |
| if (rState < 2) | |
| log3("PASSED", rState, "exception thrown"); | |
| else | |
| log3("FAILED", rState, "exception thrown: " + e.message + "."); | |
| } | |
| if ((rState == 4) && (window.testRunner)) | |
| testRunner.notifyDone(); | |
| } | |
| if (window.testRunner) { | |
| testRunner.waitUntilDone(); | |
| testRunner.dumpAsText(); | |
| } | |
| function test() { | |
| // Test for readyState = 0 | |
| try { | |
| var header = xhr.getResponseHeader(headerName); | |
| log3("FAILED", xhr.readyState, headerName + "=" + header + "."); | |
| } catch (e) { | |
| log3("PASSED", xhr.readyState, "exception thrown."); | |
| } | |
| try { | |
| xhr.open("GET","resources/1251.html", true); | |
| xhr.send(null); | |
| } catch(e) { | |
| log3("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 the getResponseHeader method when readyState >= 2 | |
| (HEADERS_RECEIVED) returns a header value if the header exists.</p> | |
| <p>Assertion: Invoking the getResponseHeader method with the parameter | |
| satisfying the following conditions causes getResponseHeader | |
| to return null: | |
| <li>1a. The parameter case-insensitively matches Set-Cookie;</li> | |
| <li>1b. The parameter case-insensitively matches Set-Cookie2;</li> | |
| <li>2. The parameter does not match any header in the response;</li> | |
| <li>3a. The parameter is null (it is not a valid header name);</li> | |
| <li>3b. The parameter is "Content-Type:" (it is not a valid header name).</li> | |
| <script> | |
| if (!window.testRunner) | |
| document.write("<p>If the test passes one should see \ | |
| below the ruler the text \"passed\" in all capital letters, once for every ready state < 2, \ | |
| followed each time by a space and the readyState number and 6 times for every ready state >= 2.</p>\n\ | |
| <p>ReadyState numbers should be in ascending order 0 to 4.</p>\n\ | |
| <p>ReadyState numbers should be followed by a blank, the name of the header tested, colon a space and a message.</p>\ | |
| <p>The value of the " + headerName + " header should be printed for ready state 2.</p>"); | |
| </script> | |
| <hr> | |
| <p><ol id=console></ol></p> | |
| </body> | |
| </html> |