test_bug586908.js (2612B)
1 "use strict"; 2 3 const { HttpServer } = ChromeUtils.importESModule( 4 "resource://testing-common/httpd.sys.mjs" 5 ); 6 const { MockRegistrar } = ChromeUtils.importESModule( 7 "resource://testing-common/MockRegistrar.sys.mjs" 8 ); 9 10 var httpserv = null; 11 12 ChromeUtils.defineLazyGetter(this, "systemSettings", function () { 13 return { 14 QueryInterface: ChromeUtils.generateQI(["nsISystemProxySettings"]), 15 16 mainThreadOnly: true, 17 PACURI: "http://localhost:" + httpserv.identity.primaryPort + "/redirect", 18 getProxyForURI() { 19 throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED); 20 }, 21 }; 22 }); 23 24 function checkValue(request, data) { 25 Assert.ok(called); 26 Assert.equal("ok", data); 27 httpserv.stop(do_test_finished); 28 } 29 30 function makeChan(url) { 31 return NetUtil.newChannel({ 32 uri: url, 33 loadUsingSystemPrincipal: true, 34 }).QueryInterface(Ci.nsIHttpChannel); 35 } 36 37 function run_test() { 38 httpserv = new HttpServer(); 39 httpserv.registerPathHandler("/redirect", redirect); 40 httpserv.registerPathHandler("/pac", pac); 41 httpserv.registerPathHandler("/target", target); 42 httpserv.start(-1); 43 44 MockRegistrar.register( 45 "@mozilla.org/system-proxy-settings;1", 46 systemSettings 47 ); 48 49 // Ensure we're using system-properties 50 Services.prefs.setIntPref( 51 "network.proxy.type", 52 Ci.nsIProtocolProxyService.PROXYCONFIG_SYSTEM 53 ); 54 55 // clear cache 56 evict_cache_entries(); 57 58 var chan = makeChan( 59 "http://localhost:" + httpserv.identity.primaryPort + "/target" 60 ); 61 chan.asyncOpen(new ChannelListener(checkValue, null)); 62 63 do_test_pending(); 64 } 65 66 var called = false, 67 failed = false; 68 function redirect(metadata, response) { 69 // If called second time, just return the PAC but set failed-flag 70 if (called) { 71 failed = true; 72 pac(metadata, response); 73 return; 74 } 75 76 called = true; 77 response.setStatusLine(metadata.httpVersion, 302, "Found"); 78 response.setHeader("Location", "/pac", false); 79 var body = "Moved\n"; 80 response.bodyOutputStream.write(body, body.length); 81 } 82 83 function pac(metadata, response) { 84 var PAC = 'function FindProxyForURL(url, host) { return "DIRECT"; }'; 85 response.setStatusLine(metadata.httpVersion, 200, "Ok"); 86 response.setHeader( 87 "Content-Type", 88 "application/x-ns-proxy-autoconfig", 89 false 90 ); 91 response.bodyOutputStream.write(PAC, PAC.length); 92 } 93 94 function target(metadata, response) { 95 var retval = "ok"; 96 if (failed) { 97 retval = "failed"; 98 } 99 100 response.setStatusLine(metadata.httpVersion, 200, "Ok"); 101 response.setHeader("Content-Type", "text/plain", false); 102 response.bodyOutputStream.write(retval, retval.length); 103 }