tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 103c4ffcfea3c098f11a2533e26903490302840a
parent 645dc582c9c0afef1f7fb0cdcbab1cef1b29d093
Author: Randell Jesup <rjesup@mozilla.com>
Date:   Thu, 18 Dec 2025 04:42:24 +0000

Bug 1995869: Initialize DNS earlier in IOService init r=necko-reviewers,valentin

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

Diffstat:
Mmodules/libpref/test/unit/xpcshell.toml | 4++++
Mnetwerk/base/nsIOService.cpp | 8+++++++-
Mnetwerk/dns/nsDNSService2.cpp | 13++++++++++++-
Mtoolkit/components/backgroundtasks/tests/browser/browser_xpcom_graph_wait.js | 2++
4 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/modules/libpref/test/unit/xpcshell.toml b/modules/libpref/test/unit/xpcshell.toml @@ -4,6 +4,10 @@ support-files = [ "data/testPref.js", "extdata/testExt.js", ] +# resetPrefs() is racy in SocketProcess (and probably elsewhere as well) +skip-if = [ + "socketprocess_networking", +] ["test_backupPrefFile.js"] diff --git a/netwerk/base/nsIOService.cpp b/netwerk/base/nsIOService.cpp @@ -262,6 +262,7 @@ static const char* gCallbackPrefsForSocketProcess[] = { "network.lna.address_space.public.override", "network.lna.websocket.enabled", "network.lna.local-network-to-localhost.skip-checks", + "network.socket.forcePort", nullptr, }; @@ -333,9 +334,14 @@ nsresult nsIOService::Init() { InitializeNetworkLinkService(); InitializeProtocolProxyService(); - SetOffline(false); + // This is just to start the DNS service to make it fast to get later. + // Don't invoke directly since we're already in GetService. RefPtr needed + // because already_AddRefed<> doesn't like to be dropped + NS_DispatchToCurrentThread(NS_NewRunnableFunction( + __func__, []() { RefPtr<nsIDNSService> dns = GetOrInitDNSService(); })); + return NS_OK; } diff --git a/netwerk/dns/nsDNSService2.cpp b/netwerk/dns/nsDNSService2.cpp @@ -44,6 +44,8 @@ #include "mozilla/StaticPrefs_network.h" #include "mozilla/StaticPtr.h" #include "mozilla/SyncRunnable.h" +// Put DNSLogging.h at the end to avoid LOG being overwritten by other headers. +#include "DNSLogging.h" using namespace mozilla; using namespace mozilla::net; @@ -532,6 +534,7 @@ void nsDNSAsyncRequest::OnResolveHostComplete(nsHostResolver* resolver, } } + LOG(("OnResolveHostComplete: %s", mHost.get())); mListener->OnLookupComplete(this, rec, status); mListener = nullptr; } @@ -719,7 +722,14 @@ already_AddRefed<nsIDNSService> GetOrInitDNSService() { } nsCOMPtr<nsIDNSService> dns = nullptr; - auto initTask = [&dns]() { dns = do_GetService(NS_DNSSERVICE_CID); }; + auto initTask = [&dns]() { + // In case someone inited it while we were waiting + if (gInited) { + dns = nsDNSService::GetXPCOMSingleton(); + return; + } + dns = do_GetService(NS_DNSSERVICE_CID); + }; if (!NS_IsMainThread()) { // Forward to the main thread synchronously. RefPtr<nsIThread> mainThread = do_GetMainThread(); @@ -1123,6 +1133,7 @@ nsDNSService::AsyncResolve(const nsACString& aHostname, nsICancelable** result) { OriginAttributes attrs; + LOG(("DNSService::AsyncResolve %s", PromiseFlatCString(aHostname).get())); if (aArgc == 1) { if (!aOriginAttributes.isObject() || !attrs.Init(aCx, aOriginAttributes)) { return NS_ERROR_INVALID_ARG; diff --git a/toolkit/components/backgroundtasks/tests/browser/browser_xpcom_graph_wait.js b/toolkit/components/backgroundtasks/tests/browser/browser_xpcom_graph_wait.js @@ -61,6 +61,8 @@ const backgroundtaskPhases = { "@mozilla.org/layout/content-policy;1", "@mozilla.org/memory-reporter-manager;1", "@mozilla.org/network/captive-portal-service;1", + "@mozilla.org/network/dns-service;1", + "@mozilla.org/network/oblivious-http-service;1", "@mozilla.org/network/effective-tld-service;1", "@mozilla.org/network/idn-service;1", "@mozilla.org/network/io-service;1",