cks_remote_dns", param.UseProxyForDNS); setPref("network.proxy.socks5_remote_dns", param.UseProxyForDNS); } if (param.AutoLogin !== undefined) { setPref("signon.autologin.proxy", param.AutoLogin); } if (param.SOCKSVersion !== undefined) { if (param.SOCKSVersion != 4 && param.SOCKSVersion != 5) { lazy.log.error("Invalid SOCKS version"); } else { setPref("network.proxy.socks_version", param.SOCKSVersion); } } if (param.Passthrough !== undefined) { setPref("network.proxy.no_proxies_on", param.Passthrough); } if (param.UseHTTPProxyForAllProtocols !== undefined) { setPref( "network.proxy.share_proxy_settings", param.UseHTTPProxyForAllProtocols ); } if (param.FTPProxy) { lazy.log.warn("FTPProxy support was removed in bug 1574475"); } function setProxyHostAndPort(type, address) { // Prepend https just so we can use the URL parser // instead of parsing manually. let url = URL.parse(`https://${address}`); if (!url) { lazy.log.error(`Invalid address for ${type} proxy: ${address}`); return; } setPref(`network.proxy.${type}`, url.hostname); if (url.port) { setPref(`network.proxy.${type}_port`, Number(url.port)); } } if (param.HTTPProxy) { setProxyHostAndPort("http", param.HTTPProxy); // network.proxy.share_proxy_settings is a UI feature, not handled by the // network code. That pref only controls if the checkbox is checked, and // then we must manually set the other values. if (param.UseHTTPProxyForAllProtocols) { param.SSLProxy = param.HTTPProxy; } } if (param.SSLProxy) { setProxyHostAndPort("ssl", param.SSLProxy); } if (param.SOCKSProxy) { setProxyHostAndPort("socks", param.SOCKSProxy); } // All preferences should be locked regardless of whether or not a // specific value was set. if (param.Locked) { for (let preference of proxyPreferences) { Services.prefs.lockPref(preference); } } }, }; PK