|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 |
|
5 Components.utils.import("resource://testing-common/httpd.js"); |
|
6 |
|
7 var server = new HttpServer(); |
|
8 server.start(-1); |
|
9 |
|
10 const SERVER_PORT = server.identity.primaryPort; |
|
11 const HTTP_BASE = "http://localhost:" + SERVER_PORT; |
|
12 const redirectPath = "/redirect"; |
|
13 const headerCheckPath = "/headerCheck"; |
|
14 const redirectURL = HTTP_BASE + redirectPath; |
|
15 const headerCheckURL = HTTP_BASE + headerCheckPath; |
|
16 |
|
17 function redirectHandler(metadata, response) { |
|
18 response.setStatusLine(metadata.httpVersion, 302, "Found"); |
|
19 response.setHeader("Location", headerCheckURL, false); |
|
20 } |
|
21 |
|
22 function headerCheckHandler(metadata, response) { |
|
23 try { |
|
24 let headerValue = metadata.getHeader("X-Custom-Header"); |
|
25 do_check_eq(headerValue, "present"); |
|
26 } catch(e) { |
|
27 do_throw("No header present after redirect"); |
|
28 } |
|
29 try { |
|
30 metadata.getHeader("X-Unwanted-Header"); |
|
31 do_throw("Unwanted header present after redirect"); |
|
32 } catch (x) { |
|
33 } |
|
34 response.setStatusLine(metadata.httpVersion, 200, "OK"); |
|
35 response.setHeader("Content-Type", "text/plain"); |
|
36 response.write(""); |
|
37 } |
|
38 |
|
39 function run_test() { |
|
40 server.registerPathHandler(redirectPath, redirectHandler); |
|
41 server.registerPathHandler(headerCheckPath, headerCheckHandler); |
|
42 |
|
43 do_test_pending(); |
|
44 var request = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"] |
|
45 .createInstance(Components.interfaces.nsIXMLHttpRequest); |
|
46 request.open("GET", redirectURL, true); |
|
47 request.setRequestHeader("X-Custom-Header", "present"); |
|
48 request.addEventListener("readystatechange", function() { |
|
49 if (request.readyState == 4) { |
|
50 do_check_eq(request.status, 200); |
|
51 server.stop(do_test_finished); |
|
52 } |
|
53 }, false); |
|
54 request.send(); |
|
55 try { |
|
56 request.setRequestHeader("X-Unwanted-Header", "present"); |
|
57 do_throw("Shouldn't be able to set a header after send"); |
|
58 } catch (x) { |
|
59 } |
|
60 } |