зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
d183e0bc99
Коммит
22851c69c6
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче