test_bug510359.js (2483B)
1 "use strict"; 2 3 const { HttpServer } = ChromeUtils.importESModule( 4 "resource://testing-common/httpd.sys.mjs" 5 ); 6 7 var httpserver = new HttpServer(); 8 var index = 0; 9 var tests = [ 10 { url: "/bug510359", server: "0", expected: "0" }, 11 { url: "/bug510359", server: "1", expected: "1" }, 12 ]; 13 14 function setupChannel(suffix, value) { 15 var chan = NetUtil.newChannel({ 16 uri: "http://localhost:" + httpserver.identity.primaryPort + suffix, 17 loadUsingSystemPrincipal: true, 18 }); 19 var httpChan = chan.QueryInterface(Ci.nsIHttpChannel); 20 httpChan.requestMethod = "GET"; 21 httpChan.setRequestHeader("x-request", value, false); 22 httpChan.setRequestHeader("Cookie", "c=" + value, false); 23 return httpChan; 24 } 25 26 function triggerNextTest() { 27 var channel = setupChannel(tests[index].url, tests[index].server); 28 channel.asyncOpen(new ChannelListener(checkValueAndTrigger, null)); 29 } 30 31 function checkValueAndTrigger(request, data) { 32 Assert.equal(tests[index].expected, data); 33 34 if (index < tests.length - 1) { 35 index++; 36 triggerNextTest(); 37 } else { 38 httpserver.stop(do_test_finished); 39 } 40 } 41 42 function run_test() { 43 httpserver.registerPathHandler("/bug510359", handler); 44 httpserver.start(-1); 45 46 // clear cache 47 evict_cache_entries(); 48 49 triggerNextTest(); 50 51 do_test_pending(); 52 } 53 54 function handler(metadata, response) { 55 try { 56 metadata.getHeader("If-Modified-Since"); 57 response.setStatusLine(metadata.httpVersion, 500, "Failed"); 58 var msg = "Client should not set If-Modified-Since header"; 59 response.bodyOutputStream.write(msg, msg.length); 60 } catch (ex) { 61 response.setStatusLine(metadata.httpVersion, 200, "Ok"); 62 response.setHeader("Content-Type", "text/plain", false); 63 response.setHeader("Last-Modified", getDateString(-1), false); 64 response.setHeader("Vary", "Cookie", false); 65 var body = metadata.getHeader("x-request"); 66 response.bodyOutputStream.write(body, body.length); 67 } 68 } 69 70 function getDateString(yearDelta) { 71 var months = [ 72 "Jan", 73 "Feb", 74 "Mar", 75 "Apr", 76 "May", 77 "Jun", 78 "Jul", 79 "Aug", 80 "Sep", 81 "Oct", 82 "Nov", 83 "Dec", 84 ]; 85 var days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; 86 87 var d = new Date(); 88 return ( 89 days[d.getUTCDay()] + 90 ", " + 91 d.getUTCDate() + 92 " " + 93 months[d.getUTCMonth()] + 94 " " + 95 (d.getUTCFullYear() + yearDelta) + 96 " " + 97 d.getUTCHours() + 98 ":" + 99 d.getUTCMinutes() + 100 ":" + 101 d.getUTCSeconds() + 102 " UTC" 103 ); 104 }