|
1 Cu.import("resource://testing-common/httpd.js"); |
|
2 Cu.import("resource://gre/modules/Services.jsm"); |
|
3 var httpserver = new HttpServer(); |
|
4 |
|
5 function setupChannel(suffix) |
|
6 { |
|
7 var ios = |
|
8 Components.classes["@mozilla.org/network/io-service;1"] |
|
9 .getService(Ci.nsIIOService); |
|
10 var chan = ios.newChannel("http://localhost:" + |
|
11 httpserver.identity.primaryPort + |
|
12 suffix, "", null); |
|
13 return chan; |
|
14 } |
|
15 |
|
16 function checkValueAndTrigger(request, data, ctx) |
|
17 { |
|
18 do_check_eq("Ok", data); |
|
19 httpserver.stop(do_test_finished); |
|
20 } |
|
21 |
|
22 function run_test() |
|
23 { |
|
24 // Allow all cookies. |
|
25 Services.prefs.setIntPref("network.cookie.cookieBehavior", 0); |
|
26 |
|
27 httpserver.registerPathHandler("/redirect1", redirectHandler1); |
|
28 httpserver.registerPathHandler("/redirect2", redirectHandler2); |
|
29 httpserver.start(-1); |
|
30 |
|
31 // clear cache |
|
32 evict_cache_entries(); |
|
33 |
|
34 // load first time |
|
35 var channel = setupChannel("/redirect1"); |
|
36 channel.asyncOpen(new ChannelListener(checkValueAndTrigger, null), null); |
|
37 do_test_pending(); |
|
38 } |
|
39 |
|
40 function redirectHandler1(metadata, response) |
|
41 { |
|
42 if (!metadata.hasHeader("Cookie")) { |
|
43 response.setStatusLine(metadata.httpVersion, 302, "Found"); |
|
44 response.setHeader("Cache-Control", "max-age=600", false); |
|
45 response.setHeader("Location", "/redirect2?query", false); |
|
46 response.setHeader("Set-Cookie", "MyCookie=1", false); |
|
47 } else { |
|
48 response.setStatusLine(metadata.httpVersion, 200, "Ok"); |
|
49 response.setHeader("Content-Type", "text/plain"); |
|
50 response.bodyOutputStream.write("Ok", "Ok".length); |
|
51 } |
|
52 } |
|
53 |
|
54 function redirectHandler2(metadata, response) |
|
55 { |
|
56 response.setStatusLine(metadata.httpVersion, 302, "Found"); |
|
57 response.setHeader("Location", "/redirect1", false); |
|
58 } |