Bug 1552248 support ftp channel in proxy api r=mayhemer,kmag

ChannelWrapper is used throughout webext APIs and it requires a channel to support weakref.
FTPChannel did not, thus ftp requests did not go through proxy.onRequest.

Differential Revision: https://phabricator.services.mozilla.com/D31540

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Shane Caraveo 2019-05-20 15:05:26 +00:00
Родитель eb97e60e6c
Коммит 636c68369c
4 изменённых файлов: 32 добавлений и 4 удалений

Просмотреть файл

@ -27,6 +27,7 @@ extern LazyLogModule gFTPLog;
NS_IMPL_ISUPPORTS_INHERITED(nsFtpChannel, nsBaseChannel, nsIUploadChannel, NS_IMPL_ISUPPORTS_INHERITED(nsFtpChannel, nsBaseChannel, nsIUploadChannel,
nsIResumableChannel, nsIFTPChannel, nsIResumableChannel, nsIFTPChannel,
nsIProxiedChannel, nsIForcePendingChannel, nsIProxiedChannel, nsIForcePendingChannel,
nsISupportsWeakReference,
nsIChannelWithDivertableParentListener) nsIChannelWithDivertableParentListener)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------

Просмотреть файл

@ -18,6 +18,7 @@
#include "nsIProxyInfo.h" #include "nsIProxyInfo.h"
#include "nsIProxiedChannel.h" #include "nsIProxiedChannel.h"
#include "nsIResumableChannel.h" #include "nsIResumableChannel.h"
#include "nsWeakReference.h"
class nsIURI; class nsIURI;
using mozilla::net::ADivertableParentChannel; using mozilla::net::ADivertableParentChannel;
@ -28,6 +29,7 @@ class nsFtpChannel final : public nsBaseChannel,
public nsIResumableChannel, public nsIResumableChannel,
public nsIProxiedChannel, public nsIProxiedChannel,
public nsIForcePendingChannel, public nsIForcePendingChannel,
public nsSupportsWeakReference,
public nsIChannelWithDivertableParentListener { public nsIChannelWithDivertableParentListener {
public: public:
NS_DECL_ISUPPORTS_INHERITED NS_DECL_ISUPPORTS_INHERITED

Просмотреть файл

@ -158,7 +158,6 @@ async function getExtension(expectedProxyInfo) {
browser.proxy.onRequest.addListener(details => { browser.proxy.onRequest.addListener(details => {
return proxyInfo; return proxyInfo;
}, {urls: ["<all_urls>"]}); }, {urls: ["<all_urls>"]});
browser.test.sendMessage("ready");
} }
let extensionData = { let extensionData = {
manifest: { manifest: {
@ -168,7 +167,6 @@ async function getExtension(expectedProxyInfo) {
}; };
let extension = ExtensionTestUtils.loadExtension(extensionData); let extension = ExtensionTestUtils.loadExtension(extensionData);
await extension.startup(); await extension.startup();
await extension.awaitMessage("ready");
return extension; return extension;
} }
@ -189,3 +187,15 @@ add_task(async function test_passthrough() {
equal(proxyInfo, null, `expected no proxy`); equal(proxyInfo, null, `expected no proxy`);
await ext1.unload(); await ext1.unload();
}); });
add_task(async function test_ftp() {
let extension = await getExtension({host: "1.2.3.4", port: 8888, type: "http"});
let proxyInfo = await getProxyInfo("ftp://somewhere.mozilla.org/");
equal(proxyInfo.host, "1.2.3.4", `proxy host correct`);
equal(proxyInfo.port, "8888", `proxy port correct`);
equal(proxyInfo.type, "http", `proxy type correct`);
await extension.unload();
});

Просмотреть файл

@ -56,14 +56,14 @@ async function setupProxyScript(proxy) {
} }
async function testProxyResolution(test) { async function testProxyResolution(test) {
let {proxy, expected} = test; let {uri, proxy, expected} = test;
let errorMsg; let errorMsg;
if (expected.error) { if (expected.error) {
errorMsg = extension.awaitMessage("proxy-error-received"); errorMsg = extension.awaitMessage("proxy-error-received");
} }
let proxyInfo = await new Promise((resolve, reject) => { let proxyInfo = await new Promise((resolve, reject) => {
let channel = NetUtil.newChannel({ let channel = NetUtil.newChannel({
uri: "http://www.mozilla.org/", uri,
loadUsingSystemPrincipal: true, loadUsingSystemPrincipal: true,
}); });
@ -202,6 +202,18 @@ add_task(async function test_pac_results() {
}, },
}, },
}, },
{
uri: "ftp://mozilla.org",
proxy: "PROXY 1.2.3.4:8080",
expected: {
proxyInfo: {
host: "1.2.3.4",
port: "8080",
type: "http",
failoverProxy: null,
},
},
},
{ {
proxy: " PROXY 2.3.4.5:8080 ", proxy: " PROXY 2.3.4.5:8080 ",
expected: { expected: {
@ -329,6 +341,9 @@ add_task(async function test_pac_results() {
]; ];
for (let test of tests) { for (let test of tests) {
await setupProxyScript(test.proxy); await setupProxyScript(test.proxy);
if (!test.uri) {
test.uri = "http://www.mozilla.org/";
}
await testProxyResolution(test); await testProxyResolution(test);
// Our proxy script for testing is stateless, so repeating the test should // Our proxy script for testing is stateless, so repeating the test should
// yield exactly the same results. // yield exactly the same results.