test_nojsredir.js (1611B)
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: "/test/test", datalen: 16 }, 11 12 // Test that the http channel fails and the response body is suppressed 13 // bug 255119 14 { 15 url: "/test/test", 16 responseheader: ["Location: javascript:alert()"], 17 flags: CL_EXPECT_FAILURE, 18 datalen: 0, 19 }, 20 ]; 21 22 function setupChannel(url) { 23 return NetUtil.newChannel({ 24 uri: "http://localhost:" + httpserver.identity.primaryPort + url, 25 loadUsingSystemPrincipal: true, 26 }); 27 } 28 29 function startIter() { 30 var channel = setupChannel(tests[index].url); 31 channel.asyncOpen( 32 new ChannelListener(completeIter, channel, tests[index].flags) 33 ); 34 } 35 36 function completeIter(request, data) { 37 Assert.equal(data.length, tests[index].datalen); 38 if (++index < tests.length) { 39 startIter(); 40 } else { 41 httpserver.stop(do_test_finished); 42 } 43 } 44 45 function run_test() { 46 httpserver.registerPathHandler("/test/test", handler); 47 httpserver.start(-1); 48 49 startIter(); 50 do_test_pending(); 51 } 52 53 function handler(metadata, response) { 54 var body = "thequickbrownfox"; 55 response.setHeader("Content-Type", "text/plain", false); 56 57 var header = tests[index].responseheader; 58 if (header != undefined) { 59 for (var i = 0; i < header.length; i++) { 60 var splitHdr = header[i].split(": "); 61 response.setHeader(splitHdr[0], splitHdr[1], false); 62 } 63 } 64 65 response.setStatusLine(metadata.httpVersion, 302, "Redirected"); 66 response.bodyOutputStream.write(body, body.length); 67 }