--- a/toolkit/components/extensions/ProxyScriptContext.jsm
+++ b/toolkit/components/extensions/ProxyScriptContext.jsm
@@ -38,17 +38,19 @@ const {
LocalAPIImplementation,
SchemaAPIManager,
} = ExtensionCommon;
const PROXY_TYPES = Object.freeze({
DIRECT: "direct",
HTTPS: "https",
PROXY: "proxy",
- SOCKS: "socks",
+ HTTP: "http", // Synonym for PROXY_TYPES.PROXY
+ SOCKS: "socks", // SOCKS5
+ SOCKS4: "socks4",
});
class ProxyScriptContext extends BaseContext {
constructor(extension, url, contextInfo = {}) {
super("proxy_script", extension);
this.contextInfo = contextInfo;
this.extension = extension;
this.messageManager = Services.cpmm;
@@ -170,35 +172,39 @@ class ProxyScriptContext extends BaseCon
});
return null;
}
parts[0] = parts[0].toLowerCase();
switch (parts[0]) {
case PROXY_TYPES.PROXY:
+ case PROXY_TYPES.HTTP:
+ case PROXY_TYPES.HTTPS:
case PROXY_TYPES.SOCKS:
+ case PROXY_TYPES.SOCKS4:
if (!parts[1]) {
this.extension.emit("proxy-error", {
message: `FindProxyForURL: Missing argument for "${parts[0]}"`,
});
return null;
}
let [host, port] = parts[1].split(":");
if (!host || !port) {
this.extension.emit("proxy-error", {
message: `FindProxyForURL: Unable to parse argument for ${rule}`,
});
return null;
}
- let type = PROXY_TYPES.SOCKS;
+ let type = parts[0];
if (parts[0] == PROXY_TYPES.PROXY) {
- type = PROXY_TYPES.HTTPS;
+ // PROXY_TYPES.HTTP and PROXY_TYPES.PROXY are synonyms
+ type = PROXY_TYPES.HTTP;
}
let failoverProxy = this.createProxyInfo(rules.slice(1));
return ProxyService.newProxyInfo(type, host, port, 0,
PROXY_TIMEOUT_SEC, failoverProxy);
case PROXY_TYPES.DIRECT:
return null;
default:
--- a/toolkit/components/extensions/test/xpcshell/test_proxy_scripts.js
+++ b/toolkit/components/extensions/test/xpcshell/test_proxy_scripts.js
@@ -155,16 +155,50 @@ add_task(async function testProxyScriptW
proxyInfo: null,
});
});
add_task(async function testSocksReturnType() {
await testProxyScript({
scriptData() {
function FindProxyForURL(url, host) {
+ return "SOCKS foo.bar:1080";
+ }
+ },
+ }, {
+ proxyInfo: {
+ host: "foo.bar",
+ port: "1080",
+ type: "socks",
+ failoverProxy: null,
+ },
+ });
+});
+
+add_task(async function testSocks4ReturnType() {
+ await testProxyScript({
+ scriptData() {
+ function FindProxyForURL(url, host) {
+ return "SOCKS4 1.2.3.4:1080";
+ }
+ },
+ }, {
+ proxyInfo: {
+ host: "1.2.3.4",
+ port: "1080",
+ type: "socks4",
+ failoverProxy: null,
+ },
+ });
+});
+
+add_task(async function testSocksReturnTypeWithHostCheck() {
+ await testProxyScript({
+ scriptData() {
+ function FindProxyForURL(url, host) {
if (host === "www.mozilla.org") {
return "SOCKS 4.4.4.4:9002";
}
}
},
}, {
proxyInfo: {
host: "4.4.4.4",
@@ -181,68 +215,68 @@ add_task(async function testProxyReturnT
function FindProxyForURL(url, host) {
return "PROXY 1.2.3.4:8080";
}
},
}, {
proxyInfo: {
host: "1.2.3.4",
port: "8080",
- type: "https",
+ type: "http",
failoverProxy: null,
},
});
});
add_task(async function testUnusualWhitespaceForFindProxyForURL() {
await testProxyScript({
scriptData() {
function FindProxyForURL(url, host) {
return " PROXY 1.2.3.4:8080 ";
}
},
}, {
proxyInfo: {
host: "1.2.3.4",
port: "8080",
- type: "https",
+ type: "http",
failoverProxy: null,
},
});
});
add_task(async function testInvalidProxyScriptIgnoresFailover() {
await testProxyScript({
scriptData() {
function FindProxyForURL(url, host) {
return "PROXY 1.2.3.4:8080; UNEXPECTED; SOCKS 1.2.3.4:8080";
}
},
}, {
proxyInfo: {
host: "1.2.3.4",
port: "8080",
- type: "https",
+ type: "http",
failoverProxy: null,
},
});
});
add_task(async function testProxyScriptWithValidFailovers() {
await testProxyScript({
scriptData() {
function FindProxyForURL(url, host) {
return "PROXY 1.2.3.4:8080; SOCKS 4.4.4.4:9000; DIRECT";
}
},
}, {
proxyInfo: {
host: "1.2.3.4",
port: "8080",
- type: "https",
+ type: "http",
failoverProxy: {
host: "4.4.4.4",
port: "9000",
type: "socks",
failoverProxy: null,
},
},
});
@@ -254,17 +288,17 @@ add_task(async function testProxyScriptW
function FindProxyForURL(url, host) {
return "PROXY 1.2.3.4:8080; INVALID 1.2.3.4:9090; SOCKS 4.4.4.4:9000; DIRECT";
}
},
}, {
proxyInfo: {
host: "1.2.3.4",
port: "8080",
- type: "https",
+ type: "http",
failoverProxy: null,
},
});
});
add_task(async function testProxyScriptWithEmptyFailovers() {
await testProxyScript({
scriptData() {
@@ -309,13 +343,13 @@ add_task(async function testProxyScriptW
},
runtimeMessage: {
host: "www.mozilla.org",
},
}, {
proxyInfo: {
host: "1.2.3.4",
port: "8080",
- type: "https",
+ type: "http",
failoverProxy: null,
},
});
});