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:
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",