| OLD | NEW |
| 1 <!doctype html> |
| 1 <html> | 2 <html> |
| 2 <head> | 3 <head> |
| 3 <title>Check exception thrown by getReponseHeader </title> | 4 <title>Testing XMLHttpRequest.getReponseHeader behavior</title> |
| 5 <script src="../resources/js-test-pre.js"></script> |
| 4 <script type="text/javascript"> | 6 <script type="text/javascript"> |
| 7 description("Test the required behavior of XMLHttpRequest.getResponseHeader()"); |
| 8 |
| 9 window.jsTestIsAsync = true; |
| 5 | 10 |
| 6 var savedHeader = null; | 11 var savedHeader = null; |
| 7 var headerName="Content-Type"; | 12 var headerName = "Content-Type"; |
| 8 var nullTests = new Array("SeT-COoKie", "sEt-coOkIE2", | 13 var nullTests = [ "SeT-COoKie", |
| 9 "xxx-mytest-headerabc", null, "Content-Type:"); | 14 "sEt-coOkIE2", |
| 15 "xxx-mytest-headerabc", |
| 16 null, |
| 17 "Content-Type:" ]; |
| 10 | 18 |
| 11 function log (msg) { | 19 var xhr = new XMLHttpRequest(); |
| 12 var paragraph = document.createElement("li"); | 20 |
| 13 paragraph.innerHTML=msg.replace(/\n/gm,"<br>"); | 21 var headerValue; |
| 14 document.getElementById("console").appendChild(paragraph); | 22 function testGetResponseHeader(xhr, headerName, expectNull) { |
| 23 shouldNotThrow("{state: " + xhr.readyState + "}; headerValue = xhr.getRespon
seHeader('" + headerName + "');"); |
| 24 if (expectNull) |
| 25 shouldBeNull("headerValue"); |
| 26 else |
| 27 shouldBeNonNull("headerValue"); |
| 28 |
| 29 return headerValue; |
| 15 } | 30 } |
| 16 | 31 |
| 17 function log4(status, rState, subState, msg) { | 32 var result; |
| 18 log(status + " " + rState + " " + subState + ": " + msg); | 33 xhr.onreadystatechange = function() { |
| 34 var rState = this.readyState; |
| 35 result = testGetResponseHeader(this, headerName, rState <= XMLHttpRequest.OP
ENED); |
| 36 if (result) { |
| 37 if (savedHeader) |
| 38 shouldBe("result", "savedHeader"); |
| 39 |
| 40 savedHeader = result; |
| 41 |
| 42 for (var i = 0; i < nullTests.length; ++i) |
| 43 testGetResponseHeader(this, nullTests[i], true); |
| 44 } else { |
| 45 if (rState > XMLHttpRequest.OPENED) |
| 46 testFailed("In ready state " + rState + ", unexpected null value for
'" + headerName + "'."); |
| 47 else if (result !== null) |
| 48 testFailed("In ready state " + rState + ", expected null for '" + he
aderName + ", got: " + JSON.stringify(result) + "."); |
| 49 else |
| 50 testPassed("Header '" + headerName + "' is null in ready state " + r
State + "."); |
| 51 } |
| 52 |
| 53 if (rState == XMLHttpRequest.DONE) |
| 54 finishJSTest(); |
| 19 } | 55 } |
| 20 | 56 |
| 21 function log3(status, rState, msg) { | 57 function runTest() { |
| 22 log4(status, rState, headerName, msg); | 58 // Test for readyState = 0 |
| 59 testGetResponseHeader(xhr, headerName, true); |
| 60 shouldNotThrow('xhr.open("GET", "resources/1251.html", true);'); |
| 61 // Test for readyState = 1 |
| 62 testGetResponseHeader(xhr, headerName, true); |
| 63 shouldNotThrow("xhr.send(null);"); |
| 23 } | 64 } |
| 24 | 65 runTest(); |
| 25 if (window.XMLHttpRequest) { | |
| 26 xhr = new XMLHttpRequest(); | |
| 27 } else { | |
| 28 try { | |
| 29 xhr = new ActiveXObject("Msxml2.XMLHTTP"); | |
| 30 } catch (ex) { | |
| 31 xhr = new ActiveXObject("Microsoft.XMLHTTP"); | |
| 32 } | |
| 33 } | |
| 34 | |
| 35 xhr.onreadystatechange = function() { | |
| 36 var rState = this.readyState; | |
| 37 // We expect an INVALID_STATE_ERR exception for readyState < 2 | |
| 38 // and no exception for readyState >= 2 | |
| 39 try { | |
| 40 var header = this.getResponseHeader(headerName); | |
| 41 if (rState != this.readyState) | |
| 42 log3("UNCERTAIN", rState, "readyState changed while getting the head
er."); | |
| 43 if (rState < 2) { | |
| 44 log3("FAILED", rState, headerName + "=" + header); | |
| 45 } else if (header) { | |
| 46 if (savedHeader) | |
| 47 if (savedHeader != header) { | |
| 48 log3("FAILED", rState,headerName + " changed after it was fi
rst returned. Previous " + headerName | |
| 49 + "=" + savedHeader + "; New " + headerName + "=" + head
er + "."); | |
| 50 savedHeader = header; | |
| 51 } | |
| 52 else //savedHeader == header here; no need to reprint header | |
| 53 log3("PASSED", rState, headerName); | |
| 54 else {//first header value retrieved | |
| 55 if (window.testRunner) | |
| 56 //do not print the header's value for automated tests to avoid false failures. | |
| 57 log3("PASSED", rState, "ResponseHeader(" + headerName + ") r
eturned a value."); | |
| 58 else | |
| 59 log3("PASSED", rState, "getResponseHeader(" + headerName + "
) returned: " + header + "."); | |
| 60 savedHeader = header; | |
| 61 } | |
| 62 for (var i=0;i<nullTests.length;++i) { | |
| 63 try { | |
| 64 var str = this.getResponseHeader(nullTests[i]); | |
| 65 if (str == null) | |
| 66 log4("PASSED", rState, nullTests[i], "getResponseHeader(
" + nullTests[i] + | |
| 67 ") returned null."); | |
| 68 else | |
| 69 log4("FAILED", rState, nullTests[i], "getResponseHeader(
" + nullTests[i] + | |
| 70 ") returned \"" + str + "\""); | |
| 71 } catch(e) { | |
| 72 log4("FAILED", rState, nullTests[i], "getResponseHeader(" +
nullTests[i] + ") threw exception:" + e); | |
| 73 } | |
| 74 } | |
| 75 } | |
| 76 else //header is null | |
| 77 log3("FAILED", rState, "null " + headerName + " returned."); | |
| 78 } catch (e) { | |
| 79 if (rState < 2) | |
| 80 log3("PASSED", rState, "exception thrown"); | |
| 81 else | |
| 82 log3("FAILED", rState, "exception thrown: " + e.message + "."); | |
| 83 } | |
| 84 if ((rState == 4) && (window.testRunner)) | |
| 85 testRunner.notifyDone(); | |
| 86 } | |
| 87 | |
| 88 if (window.testRunner) { | |
| 89 testRunner.waitUntilDone(); | |
| 90 testRunner.dumpAsText(); | |
| 91 } | |
| 92 | |
| 93 function test() { | |
| 94 // Test for readyState = 0 | |
| 95 try { | |
| 96 var header = xhr.getResponseHeader(headerName); | |
| 97 log3("FAILED", xhr.readyState, headerName + "=" + header + "."); | |
| 98 } catch (e) { | |
| 99 log3("PASSED", xhr.readyState, "exception thrown."); | |
| 100 } | |
| 101 try { | |
| 102 xhr.open("GET","resources/1251.html", true); | |
| 103 xhr.send(null); | |
| 104 } catch(e) { | |
| 105 log3("FAILED", "open/send", "exception thrown: " + e.message +"."); | |
| 106 if (window.testRunner) | |
| 107 testRunner.notifyDone(); | |
| 108 } | |
| 109 } | |
| 110 </script> | 66 </script> |
| 67 <script src="../resources/js-test-post.js"></script> |
| 111 </head> | 68 </head> |
| 112 <body onload="test()"> | |
| 113 | |
| 114 <p>Test page for <a href="http://bugs.webkit.org/show_bug.cgi?id=15356">bug | |
| 115 15356</a> | |
| 116 and <a href="http://bugs.webkit.org/show_bug.cgi?id=29121">bug 29121</a></p> | |
| 117 <p>Assertion: Invoking the getResponseHeader method when readyState >= 2 | |
| 118 (HEADERS_RECEIVED) returns a header value if the header exists.</p> | |
| 119 <p>Assertion: Invoking the getResponseHeader method with the parameter | |
| 120 satisfying the following conditions causes getResponseHeader | |
| 121 to return null: | |
| 122 <li>1a. The parameter case-insensitively matches Set-Cookie;</li> | |
| 123 <li>1b. The parameter case-insensitively matches Set-Cookie2;</li> | |
| 124 <li>2. The parameter does not match any header in the response;</li> | |
| 125 <li>3a. The parameter is null (it is not a valid header name);</li> | |
| 126 <li>3b. The parameter is "Content-Type:" (it is not a valid header name).</li> | |
| 127 | |
| 128 <script> | |
| 129 if (!window.testRunner) | |
| 130 document.write("<p>If the test passes one should see \ | |
| 131 below the ruler the text \"passed\" in all capital letters, once for every ready
state < 2, \ | |
| 132 followed each time by a space and the readyState number and 6 times for every re
ady state >= 2.</p>\n\ | |
| 133 <p>ReadyState numbers should be in ascending order 0 to 4.</p>\n\ | |
| 134 <p>ReadyState numbers should be followed by a blank, the name of the header test
ed, colon a space and a message.</p>\ | |
| 135 <p>The value of the " + headerName + " header should be printed for ready state
2.</p>"); | |
| 136 </script> | |
| 137 <hr> | |
| 138 <p><ol id=console></ol></p> | |
| 139 </body> | |
| 140 </html> | 69 </html> |
| OLD | NEW |