Bug 1849864 - Don't recalculate the userAgent header if it has been modified. r=tjr,jesup,necko-reviewers,devtools-reviewers
The userAgent header can be modified in several ways, such as using the header field to set a custom userAgent header for a fetch request. We want to preserve the custom header, so we shouldn't recalculate the userAgent header if it's been overridden after the channel was created. Otherwise, the custom header won't work. Differential Revision: https://phabricator.services.mozilla.com/D197655
This commit is contained in:
@@ -258,6 +258,7 @@ HttpBaseChannel::HttpBaseChannel()
|
||||
StoreAllRedirectsSameOrigin(true);
|
||||
StoreAllRedirectsPassTimingAllowCheck(true);
|
||||
StoreUpgradableToSecure(true);
|
||||
StoreIsUserAgentHeaderModified(false);
|
||||
|
||||
this->mSelfAddr.inet = {};
|
||||
this->mPeerAddr.inet = {};
|
||||
@@ -1944,6 +1945,11 @@ HttpBaseChannel::SetRequestHeader(const nsACString& aHeader,
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
|
||||
// Mark that the User-Agent header has been modified.
|
||||
if (nsHttp::ResolveAtom(aHeader) == nsHttp::User_Agent) {
|
||||
StoreIsUserAgentHeaderModified(true);
|
||||
}
|
||||
|
||||
return mRequestHead.SetHeader(aHeader, flatValue, aMerge);
|
||||
}
|
||||
|
||||
@@ -1977,6 +1983,11 @@ HttpBaseChannel::SetEmptyRequestHeader(const nsACString& aHeader) {
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
|
||||
// Mark that the User-Agent header has been modified.
|
||||
if (nsHttp::ResolveAtom(aHeader) == nsHttp::User_Agent) {
|
||||
StoreIsUserAgentHeaderModified(true);
|
||||
}
|
||||
|
||||
return mRequestHead.SetEmptyHeader(aHeader);
|
||||
}
|
||||
|
||||
@@ -2092,6 +2103,19 @@ HttpBaseChannel::SetIsOCSP(bool value) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
HttpBaseChannel::GetIsUserAgentHeaderModified(bool* value) {
|
||||
NS_ENSURE_ARG_POINTER(value);
|
||||
*value = LoadIsUserAgentHeaderModified();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
HttpBaseChannel::SetIsUserAgentHeaderModified(bool value) {
|
||||
StoreIsUserAgentHeaderModified(value);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
HttpBaseChannel::GetRedirectionLimit(uint32_t* value) {
|
||||
NS_ENSURE_ARG_POINTER(value);
|
||||
@@ -4967,6 +4991,13 @@ nsresult HttpBaseChannel::SetupReplacementChannel(nsIURI* newURI,
|
||||
}
|
||||
}
|
||||
|
||||
// convery the IsUserAgentHeaderModified value.
|
||||
if (httpInternal) {
|
||||
rv = httpInternal->SetIsUserAgentHeaderModified(
|
||||
LoadIsUserAgentHeaderModified());
|
||||
MOZ_ASSERT(NS_SUCCEEDED(rv));
|
||||
}
|
||||
|
||||
// share the request context - see bug 1236650
|
||||
rv = httpChannel->SetRequestContextID(mRequestContextID);
|
||||
MOZ_ASSERT(NS_SUCCEEDED(rv));
|
||||
|
||||
Reference in New Issue
Block a user