Bug 1545420 - Allow extensions to set Proxy-Authorization and connection isolation key through proxy.onRequest, r=dragana,mixedpuppy+mixedpuppy

Differential Revision: https://phabricator.services.mozilla.com/D29825
This commit is contained in:
Honza Bambas
2019-05-06 07:22:18 +00:00
parent 5674fd1ecb
commit f4c719c52e
25 changed files with 314 additions and 50 deletions

View File

@@ -1601,20 +1601,24 @@ nsProtocolProxyService::AsyncResolve(nsISupports* channelOrURI, uint32_t flags,
}
NS_IMETHODIMP
nsProtocolProxyService::NewProxyInfo(const nsACString& aType,
const nsACString& aHost, int32_t aPort,
uint32_t aFlags, uint32_t aFailoverTimeout,
nsIProxyInfo* aFailoverProxy,
nsIProxyInfo** aResult) {
nsProtocolProxyService::NewProxyInfo(
const nsACString& aType, const nsACString& aHost, int32_t aPort,
const nsACString& aProxyAuthorizationHeader,
const nsACString& aConnectionIsolationKey, uint32_t aFlags,
uint32_t aFailoverTimeout, nsIProxyInfo* aFailoverProxy,
nsIProxyInfo** aResult) {
return NewProxyInfoWithAuth(aType, aHost, aPort, EmptyCString(),
EmptyCString(), aFlags, aFailoverTimeout,
EmptyCString(), aProxyAuthorizationHeader,
aConnectionIsolationKey, aFlags, aFailoverTimeout,
aFailoverProxy, aResult);
}
NS_IMETHODIMP
nsProtocolProxyService::NewProxyInfoWithAuth(
const nsACString& aType, const nsACString& aHost, int32_t aPort,
const nsACString& aUsername, const nsACString& aPassword, uint32_t aFlags,
const nsACString& aUsername, const nsACString& aPassword,
const nsACString& aProxyAuthorizationHeader,
const nsACString& aConnectionIsolationKey, uint32_t aFlags,
uint32_t aFailoverTimeout, nsIProxyInfo* aFailoverProxy,
nsIProxyInfo** aResult) {
static const char* types[] = {kProxyType_HTTP, kProxyType_HTTPS,
@@ -1639,7 +1643,9 @@ nsProtocolProxyService::NewProxyInfoWithAuth(
return NS_ERROR_NOT_IMPLEMENTED;
}
return NewProxyInfo_Internal(type, aHost, aPort, aUsername, aPassword, aFlags,
return NewProxyInfo_Internal(type, aHost, aPort, aUsername, aPassword,
aProxyAuthorizationHeader,
aConnectionIsolationKey, aFlags,
aFailoverTimeout, aFailoverProxy, 0, aResult);
}
@@ -1986,7 +1992,9 @@ nsresult nsProtocolProxyService::GetProtocolInfo(nsIURI* uri,
nsresult nsProtocolProxyService::NewProxyInfo_Internal(
const char* aType, const nsACString& aHost, int32_t aPort,
const nsACString& aUsername, const nsACString& aPassword, uint32_t aFlags,
const nsACString& aUsername, const nsACString& aPassword,
const nsACString& aProxyAuthorizationHeader,
const nsACString& aConnectionIsolationKey, uint32_t aFlags,
uint32_t aFailoverTimeout, nsIProxyInfo* aFailoverProxy,
uint32_t aResolveFlags, nsIProxyInfo** aResult) {
if (aPort <= 0) aPort = -1;
@@ -2009,6 +2017,8 @@ nsresult nsProtocolProxyService::NewProxyInfo_Internal(
proxyInfo->mResolveFlags = aResolveFlags;
proxyInfo->mTimeout =
aFailoverTimeout == UINT32_MAX ? mFailedProxyTimeout : aFailoverTimeout;
proxyInfo->mProxyAuthorizationHeader = aProxyAuthorizationHeader;
proxyInfo->mConnectionIsolationKey = aConnectionIsolationKey;
failover.swap(proxyInfo->mNext);
NS_ADDREF(*aResult = proxyInfo);
@@ -2175,9 +2185,9 @@ nsresult nsProtocolProxyService::Resolve_Internal(nsIChannel* channel,
}
if (type) {
rv =
NewProxyInfo_Internal(type, *host, port, EmptyCString(), EmptyCString(),
proxyFlags, UINT32_MAX, nullptr, flags, result);
rv = NewProxyInfo_Internal(type, *host, port, EmptyCString(),
EmptyCString(), EmptyCString(), EmptyCString(),
proxyFlags, UINT32_MAX, nullptr, flags, result);
if (NS_FAILED(rv)) return rv;
}