Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 //
2 // HTTP headers test
3 //
5 // Note: sets Cc and Ci variables
7 Cu.import("resource://testing-common/httpd.js");
9 XPCOMUtils.defineLazyGetter(this, "URL", function() {
10 return "http://localhost:" + httpserver.identity.primaryPort;
11 });
13 var httpserver = new HttpServer();
14 var testpath = "/simple";
15 var httpbody = "0123456789";
16 var channel;
17 var ios;
19 var dbg=0
20 if (dbg) { print("============== START =========="); }
22 function run_test() {
23 setup_test();
24 do_test_pending();
25 }
27 function setup_test() {
28 if (dbg) { print("============== setup_test: in"); }
30 httpserver.registerPathHandler(testpath, serverHandler);
31 httpserver.start(-1);
33 channel = setupChannel(testpath);
35 channel.setRequestHeader("ReplaceMe", "initial value", true);
36 var setOK = channel.getRequestHeader("ReplaceMe");
37 do_check_eq(setOK, "initial value");
38 channel.setRequestHeader("ReplaceMe", "replaced", false);
39 setOK = channel.getRequestHeader("ReplaceMe");
40 do_check_eq(setOK, "replaced");
42 channel.setRequestHeader("MergeMe", "foo1", true);
43 channel.setRequestHeader("MergeMe", "foo2", true);
44 channel.setRequestHeader("MergeMe", "foo3", true);
45 setOK = channel.getRequestHeader("MergeMe");
46 do_check_eq(setOK, "foo1, foo2, foo3");
48 var uri = ios.newURI("http://foo1.invalid:80", null, null);
49 channel.referrer = uri;
50 do_check_true(channel.referrer.equals(uri));
51 setOK = channel.getRequestHeader("Referer");
52 do_check_eq(setOK, "http://foo1.invalid/");
54 uri = ios.newURI("http://foo2.invalid:90/bar", null, null);
55 channel.referrer = uri;
56 setOK = channel.getRequestHeader("Referer");
57 do_check_eq(setOK, "http://foo2.invalid:90/bar");
59 // ChannelListener defined in head_channels.js
60 channel.asyncOpen(new ChannelListener(checkRequestResponse, channel), null);
62 if (dbg) { print("============== setup_test: out"); }
63 }
65 function setupChannel(path) {
66 ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
67 var chan = ios.newChannel(URL + path, "", null);
68 chan.QueryInterface(Ci.nsIHttpChannel);
69 chan.requestMethod = "GET";
70 return chan;
71 }
73 function serverHandler(metadata, response) {
74 if (dbg) { print("============== serverHandler: in"); }
76 var setOK = metadata.getHeader("ReplaceMe");
77 do_check_eq(setOK, "replaced");
78 setOK = metadata.getHeader("MergeMe");
79 do_check_eq(setOK, "foo1, foo2, foo3");
80 setOK = metadata.getHeader("Referer");
81 do_check_eq(setOK, "http://foo2.invalid:90/bar");
83 response.setHeader("Content-Type", "text/plain", false);
84 response.setStatusLine("1.1", 200, "OK");
86 // note: httpd.js' "Response" class uses ',' (no space) for merge.
87 response.setHeader("httpdMerge", "bar1", false);
88 response.setHeader("httpdMerge", "bar2", true);
89 response.setHeader("httpdMerge", "bar3", true);
90 // Some special headers like Proxy-Authenticate merge with \n
91 response.setHeader("Proxy-Authenticate", "line 1", true);
92 response.setHeader("Proxy-Authenticate", "line 2", true);
93 response.setHeader("Proxy-Authenticate", "line 3", true);
95 response.bodyOutputStream.write(httpbody, httpbody.length);
97 if (dbg) { print("============== serverHandler: out"); }
98 }
100 function checkRequestResponse(request, data, context) {
101 if (dbg) { print("============== checkRequestResponse: in"); }
103 do_check_eq(channel.responseStatus, 200);
104 do_check_eq(channel.responseStatusText, "OK");
105 do_check_true(channel.requestSucceeded);
107 var response = channel.getResponseHeader("httpdMerge");
108 do_check_eq(response, "bar1,bar2,bar3");
109 channel.setResponseHeader("httpdMerge", "bar", true);
110 do_check_eq(channel.getResponseHeader("httpdMerge"), "bar1,bar2,bar3, bar");
112 response = channel.getResponseHeader("Proxy-Authenticate");
113 do_check_eq(response, "line 1\nline 2\nline 3");
115 channel.contentCharset = "UTF-8";
116 do_check_eq(channel.contentCharset, "UTF-8");
117 do_check_eq(channel.contentType, "text/plain");
118 do_check_eq(channel.contentLength, httpbody.length);
119 do_check_eq(data, httpbody);
121 httpserver.stop(do_test_finished);
122 if (dbg) { print("============== checkRequestResponse: out"); }
123 }