зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1620758 - Don't call AltSvcMapping::ProcessHeader OMT r=valentin
This patch contains two changes. 1. `AltSvcMapping::ProcessHeader` is not thread-safe, so dispatching an async task to do this. 2. `TRRService::Init` is called earlier before the user profile is loaded. If `network.trr.fetch_off_main_thread` is default to false and changed to true by users, TRR background thread would not be created. Differential Revision: https://phabricator.services.mozilla.com/D65890 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
ca1e31ce93
Коммит
c86671a23a
|
@ -109,17 +109,14 @@ nsresult TRRService::Init() {
|
|||
do_GetService(NS_NETWORK_LINK_SERVICE_CONTRACTID);
|
||||
RebuildSuffixList(nls);
|
||||
|
||||
if (StaticPrefs::network_trr_fetch_off_main_thread()) {
|
||||
nsCOMPtr<nsIThread> thread;
|
||||
if (NS_FAILED(
|
||||
NS_NewNamedThread("TRR Background", getter_AddRefs(thread)))) {
|
||||
NS_WARNING("NS_NewNamedThread failed!");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
sTRRBackgroundThread = thread;
|
||||
nsCOMPtr<nsIThread> thread;
|
||||
if (NS_FAILED(NS_NewNamedThread("TRR Background", getter_AddRefs(thread)))) {
|
||||
NS_WARNING("NS_NewNamedThread failed!");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
sTRRBackgroundThread = thread;
|
||||
|
||||
LOG(("Initialized TRRService\n"));
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
|
@ -799,14 +799,14 @@ void TRRServiceChannel::ProcessAltService() {
|
|||
return;
|
||||
}
|
||||
|
||||
nsAutoCString scheme;
|
||||
nsCString scheme;
|
||||
mURI->GetScheme(scheme);
|
||||
bool isHttp = scheme.EqualsLiteral("http");
|
||||
if (!isHttp && !scheme.EqualsLiteral("https")) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsAutoCString altSvc;
|
||||
nsCString altSvc;
|
||||
Unused << mResponseHead->GetHeader(nsHttp::Alternate_Service, altSvc);
|
||||
if (altSvc.IsEmpty()) {
|
||||
return;
|
||||
|
@ -817,7 +817,7 @@ void TRRServiceChannel::ProcessAltService() {
|
|||
return;
|
||||
}
|
||||
|
||||
nsAutoCString originHost;
|
||||
nsCString originHost;
|
||||
int32_t originPort = 80;
|
||||
mURI->GetPort(&originPort);
|
||||
if (NS_FAILED(mURI->GetAsciiHost(originHost))) {
|
||||
|
@ -832,10 +832,25 @@ void TRRServiceChannel::ProcessAltService() {
|
|||
proxyInfo = do_QueryInterface(mProxyInfo);
|
||||
}
|
||||
|
||||
AltSvcMapping::ProcessHeader(
|
||||
altSvc, scheme, originHost, originPort, mUsername, GetTopWindowOrigin(),
|
||||
mPrivateBrowsing, IsIsolated(), callbacks, proxyInfo,
|
||||
mCaps & NS_HTTP_DISALLOW_SPDY, OriginAttributes());
|
||||
nsCString topWindowOrigin = GetTopWindowOrigin();
|
||||
bool isIsolated = IsIsolated();
|
||||
auto processHeaderTask = [altSvc, scheme, originHost, originPort,
|
||||
userName(mUsername), topWindowOrigin,
|
||||
privateBrowsing(mPrivateBrowsing), isIsolated,
|
||||
callbacks, proxyInfo, caps(mCaps)]() {
|
||||
AltSvcMapping::ProcessHeader(
|
||||
altSvc, scheme, originHost, originPort, userName, topWindowOrigin,
|
||||
privateBrowsing, isIsolated, callbacks, proxyInfo,
|
||||
caps & NS_HTTP_DISALLOW_SPDY, OriginAttributes());
|
||||
};
|
||||
|
||||
if (NS_IsMainThread()) {
|
||||
processHeaderTask();
|
||||
return;
|
||||
}
|
||||
|
||||
NS_DispatchToMainThread(NS_NewRunnableFunction(
|
||||
"TRRServiceChannel::ProcessAltService", std::move(processHeaderTask)));
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
Загрузка…
Ссылка в новой задаче