Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: LayoutTests/http/tests/xmlhttprequest/getResponseHeader.html

Issue 46913002: Have XHR.getResponseHeader() return null in initial ready states. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Test code consistency Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 &lt; 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>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698