test_bug1889130.js (2483B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 /* 6 * Test that channels blocks 0.0.0.0 ip address 7 */ 8 9 "use strict"; 10 11 const { HttpServer } = ChromeUtils.importESModule( 12 "resource://testing-common/httpd.sys.mjs" 13 ); 14 15 var { setTimeout } = ChromeUtils.importESModule( 16 "resource://gre/modules/Timer.sys.mjs" 17 ); 18 19 const ip = "0.0.0.0"; 20 let httpserver = new HttpServer(); 21 22 ChromeUtils.defineLazyGetter(this, "URL", function () { 23 return `http://${ip}:${httpserver.identity.primaryPort}/`; 24 }); 25 26 function plainResponse(metadata, response) { 27 response.setStatusLine(metadata.httpVersion, 200, "Ok"); 28 response.setHeader("Content-Type", "text/html"); 29 response.setHeader("Content-Length", "2"); 30 response.bodyOutputStream.write("Ok", "Ok".length); 31 } 32 33 add_setup(function () { 34 httpserver.registerPathHandler("/", plainResponse); 35 httpserver._start(-1, ip); 36 httpserver.identity.setPrimary( 37 "http", 38 "0.0.0.0", 39 httpserver.identity.primaryPort 40 ); 41 42 registerCleanupFunction(async () => { 43 Services.prefs.setBoolPref("network.socket.ip_addr_any.disabled", true); 44 await httpserver.stop(() => {}); 45 }); 46 }); 47 48 // this test verifies if we allow requests on 0.0.0.0 based on the pref 49 // network.socket.ip_addr_any.disabled. This is helpful for checking rollback of the bug 50 add_task(async function test_ipaddrany_allow() { 51 Services.prefs.setBoolPref("network.socket.ip_addr_any.disabled", false); 52 53 // eslint-disable-next-line mozilla/no-arbitrary-setTimeout 54 await new Promise(resolve => setTimeout(resolve, 5000)); 55 var chan = NetUtil.newChannel({ 56 uri: URL, 57 loadUsingSystemPrincipal: true, 58 }); 59 await new Promise(resolve => { 60 chan.asyncOpen(new ChannelListener(resolve)); 61 }); 62 Assert.equal(chan.status, Cr.NS_OK); 63 }); 64 65 // this test verifies if we block requests on 0.0.0.0 66 add_task(async function test_ipaddrany_deny() { 67 Services.prefs.setBoolPref("network.socket.ip_addr_any.disabled", true); 68 69 // eslint-disable-next-line mozilla/no-arbitrary-setTimeout 70 await new Promise(resolve => setTimeout(resolve, 5000)); 71 72 var chan = NetUtil.newChannel({ 73 uri: URL, 74 loadUsingSystemPrincipal: true, 75 }); 76 await new Promise(resolve => { 77 chan.asyncOpen(new ChannelListener(resolve, null, CL_EXPECT_FAILURE)); 78 }); 79 Assert.equal(chan.status, Cr.NS_ERROR_CONNECTION_REFUSED); 80 });