Wed, 31 Dec 2014 06:55:46 +0100
Added tag TORBROWSER_REPLICA for changeset 6474c204b198
1 //
2 // Verify that we hit the net if we discover a cycle of redirects
3 // coming from cache.
4 //
6 Cu.import("resource://testing-common/httpd.js");
8 var httpserver = new HttpServer();
9 var iteration = 0;
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 }
23 function checkValueAndTrigger(request, data, ctx)
24 {
25 do_check_eq("Ok", data);
26 httpserver.stop(do_test_finished);
27 }
29 function run_test()
30 {
31 httpserver.registerPathHandler("/redirect1", redirectHandler1);
32 httpserver.registerPathHandler("/redirect2", redirectHandler2);
33 httpserver.start(-1);
35 // clear cache
36 evict_cache_entries();
38 // load first time
39 var channel = setupChannel("/redirect1");
40 channel.asyncOpen(new ChannelListener(checkValueAndTrigger, null), null);
42 do_test_pending();
43 }
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);
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 }
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 }