Bug 1620824 - Add content encoding support for TRRServiceChannel r=valentin

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

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Kershaw Chang 2020-03-10 14:28:27 +00:00
Родитель d183e0bc99
Коммит 22851c69c6
4 изменённых файлов: 76 добавлений и 0 удалений

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

@ -7384,6 +7384,12 @@
value: false
mirror: always
# Whether to send an empty Accept-Encoding header for TRR requests
- name: network.trr.send_empty_accept-encoding_headers
type: RelaxedAtomicBool
value: true
mirror: always
# Whether to send the User-Agent header for TRR requests
- name: network.trr.send_user-agent_headers
type: RelaxedAtomicBool

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

@ -395,6 +395,12 @@ nsresult TRR::SendHTTPRequest() {
NS_ENSURE_SUCCESS(rv, rv);
}
if (StaticPrefs::network_trr_send_empty_accept_encoding_headers()) {
rv = httpChannel->SetEmptyRequestHeader(
NS_LITERAL_CSTRING("Accept-Encoding"));
NS_ENSURE_SUCCESS(rv, rv);
}
// set the *default* response content type
if (NS_FAILED(httpChannel->SetContentType(
NS_LITERAL_CSTRING("application/dns-message")))) {

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

@ -786,9 +786,71 @@ nsresult TRRServiceChannel::CallOnStartRequest() {
mOnStartRequestCalled = true;
}
if (!mResponseHead) {
return NS_OK;
}
nsAutoCString contentEncoding;
rv = mResponseHead->GetHeader(nsHttp::Content_Encoding, contentEncoding);
if (NS_FAILED(rv) || contentEncoding.IsEmpty()) {
return NS_OK;
}
Suspend();
RefPtr<TRRServiceChannel> self = this;
rv = NS_DispatchToMainThread(
NS_NewRunnableFunction("TRRServiceChannel::DoApplyContentConversions",
[self]() {
nsCOMPtr<nsIStreamListener> listener;
nsresult rv = self->DoApplyContentConversions(
self->mListener, getter_AddRefs(listener),
nullptr);
self->AfterApplyContentConversions(rv, listener);
}),
NS_DISPATCH_NORMAL);
if (NS_FAILED(rv)) {
Resume();
return rv;
}
return NS_OK;
}
void TRRServiceChannel::AfterApplyContentConversions(
nsresult aResult, nsIStreamListener* aListener) {
LOG(("TRRServiceChannel::AfterApplyContentConversions [this=%p]", this));
if (!mCurrentEventTarget->IsOnCurrentThread()) {
RefPtr<TRRServiceChannel> self = this;
nsCOMPtr<nsIStreamListener> listener = aListener;
self->mCurrentEventTarget->Dispatch(
NS_NewRunnableFunction(
"TRRServiceChannel::AfterApplyContentConversions",
[self, aResult, listener]() {
self->AfterApplyContentConversions(aResult, listener);
}),
NS_DISPATCH_NORMAL);
return;
}
Resume();
if (mCanceled) {
return;
}
if (NS_FAILED(aResult)) {
Unused << AsyncAbort(aResult);
return;
}
if (aListener) {
mListener = aListener;
mCompressListener = aListener;
mHasAppliedConversion = true;
}
}
void TRRServiceChannel::ProcessAltService() {
// e.g. Alt-Svc: h2=":443"; ma=60
// e.g. Alt-Svc: h2="otherhost:443"

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

@ -123,6 +123,8 @@ class TRRServiceChannel : public HttpBaseChannel,
void DoNotifyListener();
nsresult MaybeResolveProxyAndBeginConnect();
nsresult ResolveProxy();
void AfterApplyContentConversions(nsresult aResult,
nsIStreamListener* aListener);
// True only when we have computed the value of the top window origin.
bool mTopWindowOriginComputed;