bug 366559 - patch 6, support different content encodings for http vs https r=bagder

This commit is contained in:
Patrick McManus 2015-09-19 18:51:32 -04:00
parent 8de63f07b5
commit fd0c0ada66
4 changed files with 48 additions and 17 deletions

View File

@ -1322,6 +1322,7 @@ pref("network.http.redirection-limit", 20);
// NOTE: support for "compress" has been disabled per bug 196406.
// NOTE: separate values with comma+space (", "): see bug 576033
pref("network.http.accept-encoding", "gzip, deflate");
pref("network.http.accept-encoding.secure", "gzip, deflate");
pref("network.http.pipelining" , false);
pref("network.http.pipelining.ssl" , false); // disable pipelining over SSL

View File

@ -140,9 +140,9 @@ HttpBaseChannel::Init(nsIURI *aURI,
// Construct connection info object
nsAutoCString host;
int32_t port = -1;
bool usingSSL = false;
bool isHTTPS = false;
nsresult rv = mURI->SchemeIs("https", &usingSSL);
nsresult rv = mURI->SchemeIs("https", &isHTTPS);
if (NS_FAILED(rv)) return rv;
rv = mURI->GetAsciiHost(host);
@ -172,7 +172,7 @@ HttpBaseChannel::Init(nsIURI *aURI,
rv = mRequestHead.SetHeader(nsHttp::Host, hostLine);
if (NS_FAILED(rv)) return rv;
rv = gHttpHandler->AddStandardRequestHeaders(&mRequestHead.Headers());
rv = gHttpHandler->AddStandardRequestHeaders(&mRequestHead.Headers(), isHTTPS);
if (NS_FAILED(rv)) return rv;
nsAutoCString type;
@ -808,7 +808,9 @@ HttpBaseChannel::DoApplyContentConversions(nsIStreamListener* aNextListener,
break;
}
if (gHttpHandler->IsAcceptableEncoding(val)) {
bool isHTTPS = false;
mURI->SchemeIs("https", &isHTTPS);
if (gHttpHandler->IsAcceptableEncoding(val, isHTTPS)) {
nsCOMPtr<nsIStreamConverterService> serv;
rv = gHttpHandler->GetStreamConverterService(getter_AddRefs(serv));

View File

@ -418,7 +418,7 @@ nsHttpHandler::InitConnectionMgr()
}
nsresult
nsHttpHandler::AddStandardRequestHeaders(nsHttpHeaderArray *request)
nsHttpHandler::AddStandardRequestHeaders(nsHttpHeaderArray *request, bool isSecure)
{
nsresult rv;
@ -442,8 +442,13 @@ nsHttpHandler::AddStandardRequestHeaders(nsHttpHeaderArray *request)
}
// Add the "Accept-Encoding" header
rv = request->SetHeader(nsHttp::Accept_Encoding, mAcceptEncodings,
false, nsHttpHeaderArray::eVarietyDefault);
if (isSecure) {
rv = request->SetHeader(nsHttp::Accept_Encoding, mHttpsAcceptEncodings,
false, nsHttpHeaderArray::eVarietyDefault);
} else {
rv = request->SetHeader(nsHttp::Accept_Encoding, mHttpAcceptEncodings,
false, nsHttpHeaderArray::eVarietyDefault);
}
if (NS_FAILED(rv)) return rv;
// Add the "Do-Not-Track" header
@ -483,7 +488,7 @@ nsHttpHandler::AddConnectionHeader(nsHttpHeaderArray *request,
}
bool
nsHttpHandler::IsAcceptableEncoding(const char *enc)
nsHttpHandler::IsAcceptableEncoding(const char *enc, bool isSecure)
{
if (!enc)
return false;
@ -500,7 +505,10 @@ nsHttpHandler::IsAcceptableEncoding(const char *enc)
if (!PL_strcasecmp(enc, "gzip") || !PL_strcasecmp(enc, "deflate"))
return true;
return nsHttp::FindToken(mAcceptEncodings.get(), enc, HTTP_LWS ",") != nullptr;
if (isSecure) {
return nsHttp::FindToken(mHttpsAcceptEncodings.get(), enc, HTTP_LWS ",") != nullptr;
}
return nsHttp::FindToken(mHttpAcceptEncodings.get(), enc, HTTP_LWS ",") != nullptr;
}
nsresult
@ -1156,8 +1164,18 @@ nsHttpHandler::PrefsChanged(nsIPrefBranch *prefs, const char *pref)
nsXPIDLCString acceptEncodings;
rv = prefs->GetCharPref(HTTP_PREF("accept-encoding"),
getter_Copies(acceptEncodings));
if (NS_SUCCEEDED(rv))
SetAcceptEncodings(acceptEncodings);
if (NS_SUCCEEDED(rv)) {
SetAcceptEncodings(acceptEncodings, false);
}
}
if (PREF_CHANGED(HTTP_PREF("accept-encoding.secure"))) {
nsXPIDLCString acceptEncodings;
rv = prefs->GetCharPref(HTTP_PREF("accept-encoding.secure"),
getter_Copies(acceptEncodings));
if (NS_SUCCEEDED(rv)) {
SetAcceptEncodings(acceptEncodings, true);
}
}
if (PREF_CHANGED(HTTP_PREF("default-socket-type"))) {
@ -1754,9 +1772,18 @@ nsHttpHandler::SetAccept(const char *aAccept)
}
nsresult
nsHttpHandler::SetAcceptEncodings(const char *aAcceptEncodings)
nsHttpHandler::SetAcceptEncodings(const char *aAcceptEncodings, bool isSecure)
{
mAcceptEncodings = aAcceptEncodings;
if (isSecure) {
mHttpsAcceptEncodings = aAcceptEncodings;
} else {
// use legacy list if a secure override is not specified
mHttpAcceptEncodings = aAcceptEncodings;
if (mHttpsAcceptEncodings.IsEmpty()) {
mHttpsAcceptEncodings = aAcceptEncodings;
}
}
return NS_OK;
}

View File

@ -65,10 +65,10 @@ public:
nsHttpHandler();
nsresult Init();
nsresult AddStandardRequestHeaders(nsHttpHeaderArray *);
nsresult AddStandardRequestHeaders(nsHttpHeaderArray *, bool isSecure);
nsresult AddConnectionHeader(nsHttpHeaderArray *,
uint32_t capabilities);
bool IsAcceptableEncoding(const char *encoding);
bool IsAcceptableEncoding(const char *encoding, bool isSecure);
const nsAFlatCString &UserAgent();
@ -354,7 +354,7 @@ private:
nsresult SetAccept(const char *);
nsresult SetAcceptLanguages(const char *);
nsresult SetAcceptEncodings(const char *);
nsresult SetAcceptEncodings(const char *, bool mIsSecure);
nsresult InitConnectionMgr();
@ -431,7 +431,8 @@ private:
nsCString mAccept;
nsCString mAcceptLanguages;
nsCString mAcceptEncodings;
nsCString mHttpAcceptEncodings;
nsCString mHttpsAcceptEncodings;
nsXPIDLCString mDefaultSocketType;