tor-browser

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

commit a997f764f303fb5422be58938b2540f0a5ffa35a
parent 6ade104ae9b7fcfb8a9221a315bb7578de92fe53
Author: Norisz Fay <nfay@mozilla.com>
Date:   Thu, 18 Dec 2025 04:30:06 +0200

Revert "Bug 1995869, Bug 2004872: Clean up DNS code r=necko-reviewers,valentin" for causing lint failure on nsDNSService2.h:21

This reverts commit 4e7db39bb33668665ac2c2571ebef16ea2e39ad2.

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

This reverts commit 3232d2a2c6e0ebeae7f494b3fd9e4c4ca7fa5dec.

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

diff --git a/modules/libpref/test/unit/xpcshell.toml b/modules/libpref/test/unit/xpcshell.toml @@ -4,10 +4,6 @@ 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,7 +262,6 @@ 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, }; @@ -334,13 +333,8 @@ 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(); })); + SetOffline(false); return NS_OK; } diff --git a/netwerk/dns/nsDNSService2.cpp b/netwerk/dns/nsDNSService2.cpp @@ -44,8 +44,6 @@ #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; @@ -534,7 +532,6 @@ void nsDNSAsyncRequest::OnResolveHostComplete(nsHostResolver* resolver, } } - LOG(("OnResolveHostComplete: %s", mHost.get())); mListener->OnLookupComplete(this, rec, status); mListener = nullptr; } @@ -666,15 +663,11 @@ NS_IMPL_ISUPPORTS(DNSServiceWrapper, nsIDNSService, nsPIDNSService) already_AddRefed<nsIDNSService> DNSServiceWrapper::GetSingleton() { if (!gDNSServiceWrapper) { gDNSServiceWrapper = new DNSServiceWrapper(); - // Not strictly needed, but simple and avoids bypassing lock-checking - MutexAutoLock lock(gDNSServiceWrapper->mLock); gDNSServiceWrapper->mDNSServiceInUse = ChildDNSService::GetSingleton(); if (gDNSServiceWrapper->mDNSServiceInUse) { ClearOnShutdown(&gDNSServiceWrapper); nsDNSPrefetch::Initialize(gDNSServiceWrapper); } else { - MutexAutoUnlock unlock( - gDNSServiceWrapper->mLock); // don't destroy with held lock gDNSServiceWrapper = nullptr; } } @@ -720,21 +713,13 @@ NS_IMPL_ISUPPORTS_INHERITED(nsDNSService, DNSServiceBase, nsIDNSService, static StaticRefPtr<nsDNSService> gDNSService; static Atomic<bool> gInited(false); -// Note: be careful of races! Called from multiple threads already_AddRefed<nsIDNSService> GetOrInitDNSService() { if (gInited) { return nsDNSService::GetXPCOMSingleton(); } nsCOMPtr<nsIDNSService> dns = nullptr; - auto initTask = [&dns]() { - // In case someone inited it while we were waiting - if (gInited) { - dns = nsDNSService::GetXPCOMSingleton(); - return; - } - dns = do_GetService(NS_DNSSERVICE_CID); - }; + auto initTask = [&dns]() { dns = do_GetService(NS_DNSSERVICE_CID); }; if (!NS_IsMainThread()) { // Forward to the main thread synchronously. RefPtr<nsIThread> mainThread = do_GetMainThread(); @@ -823,7 +808,6 @@ void nsDNSService::ReadPrefs(const char* name) { } } if (!name || !strcmp(name, kPrefIPv4OnlyDomains)) { - MutexAutoLock lock(mLock); Preferences::GetCString(kPrefIPv4OnlyDomains, mIPv4OnlyDomains); } if (!name || !strcmp(name, kPrefDnsLocalDomains)) { @@ -858,6 +842,7 @@ void nsDNSService::ReadPrefs(const char* name) { NS_IMETHODIMP nsDNSService::Init() { + MOZ_ASSERT(!mResolver); MOZ_ASSERT(NS_IsMainThread()); ReadPrefs(nullptr); @@ -875,7 +860,6 @@ nsDNSService::Init() { if (NS_SUCCEEDED(rv)) { // now, set all of our member variables while holding the lock MutexAutoLock lock(mLock); - MOZ_ASSERT(!mResolver); mResolver = res; } @@ -901,12 +885,7 @@ nsDNSService::Init() { do_GetService("@mozilla.org/network/oblivious-http-service;1")); mTrrService = new TRRService(); - bool httpsEnabled; - { - MutexAutoLock lock(mLock); - httpsEnabled = mResolver->IsNativeHTTPSEnabled(); - } - if (NS_FAILED(mTrrService->Init(httpsEnabled))) { + if (NS_FAILED(mTrrService->Init(mResolver->IsNativeHTTPSEnabled()))) { mTrrService = nullptr; } @@ -1144,7 +1123,6 @@ 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; @@ -1542,14 +1520,14 @@ nsresult nsDNSService::GetTRRDomainKey(nsACString& aTRRDomain) { return NS_OK; } -size_t nsDNSService::SizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) { +size_t nsDNSService::SizeOfIncludingThis( + mozilla::MallocSizeOf mallocSizeOf) const { // Measurement of the following members may be added later if DMD finds it // is worthwhile: // - mIDN // - mLock size_t n = mallocSizeOf(this); - MutexAutoLock lock(mLock); n += mResolver ? mResolver->SizeOfIncludingThis(mallocSizeOf) : 0; n += mIPv4OnlyDomains.SizeOfExcludingThisIfUnshared(mallocSizeOf); n += mLocalDomains.SizeOfExcludingThis(mallocSizeOf); diff --git a/netwerk/dns/nsDNSService2.h b/netwerk/dns/nsDNSService2.h @@ -40,7 +40,7 @@ class DNSServiceWrapper final : public nsPIDNSService { nsPIDNSService* PIDNSService(); mozilla::Mutex mLock{"DNSServiceWrapper.mLock"}; - nsCOMPtr<nsIDNSService> mDNSServiceInUse MOZ_GUARDED_BY(mLock); + nsCOMPtr<nsIDNSService> mDNSServiceInUse; nsCOMPtr<nsIDNSService> mBackupDNSService; }; @@ -58,7 +58,7 @@ class nsDNSService final : public mozilla::net::DNSServiceBase, static already_AddRefed<nsIDNSService> GetXPCOMSingleton(); - size_t SizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf); + size_t SizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) const; bool GetOffline() const; @@ -83,7 +83,7 @@ class nsDNSService final : public mozilla::net::DNSServiceBase, nsresult PreprocessHostname(bool aLocalDomain, const nsACString& aInput, nsACString& aACE); - bool IsLocalDomain(const nsACString& aHostname) const MOZ_REQUIRES(mLock); + bool IsLocalDomain(const nsACString& aHostname) const; nsresult AsyncResolveInternal( const nsACString& aHostname, uint16_t type, nsIDNSService::DNSFlags flags, @@ -106,27 +106,25 @@ class nsDNSService final : public mozilla::net::DNSServiceBase, // Locks the mutex and returns an addreffed resolver. May return null. already_AddRefed<nsHostResolver> GetResolverLocked(); - RefPtr<nsHostResolver> mResolver MOZ_GUARDED_BY(mLock); + RefPtr<nsHostResolver> mResolver; // mLock protects access to mResolver, mLocalDomains, mIPv4OnlyDomains, // mFailedSVCDomainNames, and mMockHTTPSRRDomain. - mozilla::Mutex mLock{"nsDNSServer.mLock"}; + mozilla::Mutex mLock MOZ_UNANNOTATED{"nsDNSServer.mLock"}; // mIPv4OnlyDomains is a comma-separated list of domains for which only // IPv4 DNS lookups are performed. This allows the user to disable IPv6 on // a per-domain basis and work around broken DNS servers. See bug 68796. - nsCString mIPv4OnlyDomains MOZ_GUARDED_BY(mLock); + nsCString mIPv4OnlyDomains; nsCString mForceResolve; - nsCString mMockHTTPSRRDomain MOZ_GUARDED_BY(mLock); + nsCString mMockHTTPSRRDomain; mozilla::Atomic<bool, mozilla::Relaxed> mHasMockHTTPSRRDomainSet{false}; bool mNotifyResolution = false; bool mForceResolveOn = false; - nsTHashSet<nsCString> mLocalDomains MOZ_GUARDED_BY(mLock); + nsTHashSet<nsCString> mLocalDomains; RefPtr<mozilla::net::TRRService> mTrrService; - nsClassHashtable<nsCStringHashKey, nsTArray<nsCString>> mFailedSVCDomainNames - MOZ_GUARDED_BY(mLock); - ; + nsClassHashtable<nsCStringHashKey, nsTArray<nsCString>> mFailedSVCDomainNames; }; already_AddRefed<nsIDNSService> GetOrInitDNSService(); 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,8 +61,6 @@ 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",