|
1 // |
|
2 // Verify that we hit the net if we discover a cycle of redirects |
|
3 // coming from cache. |
|
4 // |
|
5 |
|
6 Cu.import("resource://testing-common/httpd.js"); |
|
7 |
|
8 var httpserver = new HttpServer(); |
|
9 var iteration = 0; |
|
10 |
|
11 function setupChannel(suffix) |
|
12 { |
|
13 var ios = |
|
14 Components.classes["@mozilla.org/network/io-service;1"] |
|
15 .getService(Ci.nsIIOService); |
|
16 var chan = ios.newChannel("http://localhost:" + |
|
17 httpserver.identity.primaryPort + suffix, "", null); |
|
18 var httpChan = chan.QueryInterface(Components.interfaces.nsIHttpChannel); |
|
19 httpChan.requestMethod = "GET"; |
|
20 return httpChan; |
|
21 } |
|
22 |
|
23 function checkValueAndTrigger(request, data, ctx) |
|
24 { |
|
25 do_check_eq("Ok", data); |
|
26 httpserver.stop(do_test_finished); |
|
27 } |
|
28 |
|
29 function run_test() |
|
30 { |
|
31 httpserver.registerPathHandler("/redirect1", redirectHandler1); |
|
32 httpserver.registerPathHandler("/redirect2", redirectHandler2); |
|
33 httpserver.start(-1); |
|
34 |
|
35 // clear cache |
|
36 evict_cache_entries(); |
|
37 |
|
38 // load first time |
|
39 var channel = setupChannel("/redirect1"); |
|
40 channel.asyncOpen(new ChannelListener(checkValueAndTrigger, null), null); |
|
41 |
|
42 do_test_pending(); |
|
43 } |
|
44 |
|
45 function redirectHandler1(metadata, response) |
|
46 { |
|
47 // first time we return a cacheable 302 pointing to next redirect |
|
48 if (iteration < 1) { |
|
49 response.setStatusLine(metadata.httpVersion, 302, "Found"); |
|
50 response.setHeader("Cache-Control", "max-age=600", false); |
|
51 response.setHeader("Location", "/redirect2", false); |
|
52 |
|
53 // next time called we return 200 |
|
54 } else { |
|
55 response.setStatusLine(metadata.httpVersion, 200, "Ok"); |
|
56 response.setHeader("Cache-Control", "max-age=600", false); |
|
57 response.setHeader("Content-Type", "text/plain"); |
|
58 response.bodyOutputStream.write("Ok", "Ok".length); |
|
59 } |
|
60 iteration += 1; |
|
61 } |
|
62 |
|
63 function redirectHandler2(metadata, response) |
|
64 { |
|
65 response.setStatusLine(metadata.httpVersion, 302, "Found"); |
|
66 response.setHeader("Cache-Control", "max-age=600", false); |
|
67 response.setHeader("Location", "/redirect1", false); |
|
68 } |