test_bug561276.js (1915B)
1 // 2 // Verify that we hit the net if we discover a cycle of redirects 3 // coming from cache. 4 // 5 6 "use strict"; 7 8 const { HttpServer } = ChromeUtils.importESModule( 9 "resource://testing-common/httpd.sys.mjs" 10 ); 11 12 var httpserver = new HttpServer(); 13 var iteration = 0; 14 15 function setupChannel(suffix) { 16 var chan = NetUtil.newChannel({ 17 uri: "http://localhost:" + httpserver.identity.primaryPort + suffix, 18 loadUsingSystemPrincipal: true, 19 }); 20 var httpChan = chan.QueryInterface(Ci.nsIHttpChannel); 21 httpChan.requestMethod = "GET"; 22 return httpChan; 23 } 24 25 function checkValueAndTrigger(request, data) { 26 Assert.equal("Ok", data); 27 httpserver.stop(do_test_finished); 28 } 29 30 function run_test() { 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)); 41 42 do_test_pending(); 43 } 44 45 function redirectHandler1(metadata, response) { 46 // first time we return a cacheable 302 pointing to next redirect 47 if (iteration < 1) { 48 response.setStatusLine(metadata.httpVersion, 302, "Found"); 49 response.setHeader("Cache-Control", "max-age=600", false); 50 response.setHeader("Location", "/redirect2", false); 51 52 // next time called we return 200 53 } else { 54 response.setStatusLine(metadata.httpVersion, 200, "Ok"); 55 response.setHeader("Cache-Control", "max-age=600", false); 56 response.setHeader("Content-Type", "text/plain"); 57 response.bodyOutputStream.write("Ok", "Ok".length); 58 } 59 iteration += 1; 60 } 61 62 function redirectHandler2(metadata, response) { 63 response.setStatusLine(metadata.httpVersion, 302, "Found"); 64 response.setHeader("Cache-Control", "max-age=600", false); 65 response.setHeader("Location", "/redirect1", false); 66 }