From 2f3eb78f069cda9861ab8da46a8fdc504889145d Mon Sep 17 00:00:00 2001 From: Valentin Gosu Date: Thu, 22 Dec 2022 21:16:07 +0000 Subject: [PATCH] Bug 1596845 - Turn nsIDNSService dns flags into a cenum r=necko-reviewers,geckoview-reviewers,kershaw,m_kato This allows us to use a consistent size for the dnsFlags field. across different files (previously some would use uint16_t and some uint32_t). It also improves type safety - making sure we don't pass in the wrong value to DNSFlags. Depends on D164856 Differential Revision: https://phabricator.services.mozilla.com/D164857 --- dom/html/HTMLDNSPrefetch.cpp | 31 ++-- dom/html/HTMLDNSPrefetch.h | 7 +- dom/media/webrtc/transport/nriceresolver.cpp | 6 +- netwerk/base/Dashboard.cpp | 6 +- netwerk/base/ProxyAutoConfig.cpp | 2 +- netwerk/base/nsDNSPrefetch.cpp | 13 +- netwerk/base/nsDNSPrefetch.h | 4 +- netwerk/base/nsSocketTransport2.cpp | 2 +- netwerk/base/nsUDPSocket.cpp | 5 +- netwerk/dns/ChildDNSService.cpp | 40 ++--- netwerk/dns/ChildDNSService.h | 11 +- netwerk/dns/DNSRequestBase.h | 17 ++- netwerk/dns/DNSRequestChild.cpp | 22 +-- netwerk/dns/DNSRequestChild.h | 4 +- netwerk/dns/DNSRequestParent.cpp | 6 +- netwerk/dns/DNSRequestParent.h | 4 +- netwerk/dns/HostRecordQueue.cpp | 6 +- netwerk/dns/HostRecordQueue.h | 4 +- netwerk/dns/ODoHService.cpp | 2 +- netwerk/dns/PDNSRequest.ipdl | 3 +- netwerk/dns/TRRQuery.h | 4 +- netwerk/dns/nsDNSService2.cpp | 44 +++--- netwerk/dns/nsDNSService2.h | 15 +- netwerk/dns/nsHostRecord.cpp | 17 ++- netwerk/dns/nsHostRecord.h | 34 +++-- netwerk/dns/nsHostResolver.cpp | 40 ++--- netwerk/dns/nsHostResolver.h | 19 +-- netwerk/dns/nsIDNSService.idl | 141 +++++++----------- netwerk/ipc/NeckoMessageUtils.h | 7 + netwerk/ipc/NeckoParent.cpp | 12 +- netwerk/ipc/NeckoParent.h | 12 +- netwerk/ipc/PNecko.ipdl | 7 +- netwerk/ipc/PSocketProcess.ipdl | 3 +- netwerk/ipc/SocketProcessChild.cpp | 5 +- netwerk/ipc/SocketProcessChild.h | 5 +- netwerk/ipc/SocketProcessParent.cpp | 5 +- netwerk/ipc/SocketProcessParent.h | 5 +- netwerk/protocol/http/DnsAndConnectSocket.cpp | 2 +- netwerk/protocol/http/DnsAndConnectSocket.h | 3 +- netwerk/protocol/http/HTTPSRecordResolver.cpp | 5 +- .../protocol/websocket/WebSocketChannel.cpp | 7 +- widget/android/WebExecutorSupport.cpp | 5 +- 42 files changed, 310 insertions(+), 282 deletions(-) diff --git a/dom/html/HTMLDNSPrefetch.cpp b/dom/html/HTMLDNSPrefetch.cpp index 2c3562b39e5b..a4043195fed1 100644 --- a/dom/html/HTMLDNSPrefetch.cpp +++ b/dom/html/HTMLDNSPrefetch.cpp @@ -96,7 +96,7 @@ class DeferredDNSPrefetches final : public nsIWebProgressListener, DeferredDNSPrefetches(); void Activate(); - nsresult Add(uint32_t flags, SupportsDNSPrefetch&, Element&); + nsresult Add(nsIDNSService::DNSFlags flags, SupportsDNSPrefetch&, Element&); void RemoveUnboundLinks(); @@ -105,7 +105,7 @@ class DeferredDNSPrefetches final : public nsIWebProgressListener, void Flush(); void SubmitQueue(); - void SubmitQueueEntry(Element&, uint32_t aFlags); + void SubmitQueueEntry(Element&, nsIDNSService::DNSFlags aFlags); uint16_t mHead; uint16_t mTail; @@ -119,7 +119,7 @@ class DeferredDNSPrefetches final : public nsIWebProgressListener, static const int sMaxDeferredMask = (sMaxDeferred - 1); struct deferred_entry { - uint32_t mFlags; + nsIDNSService::DNSFlags mFlags; // SupportsDNSPrefetch clears this raw pointer in Destroyed(). Element* mElement; } mEntries[sMaxDeferred]; @@ -184,25 +184,26 @@ bool HTMLDNSPrefetch::IsAllowed(Document* aDocument) { return aDocument->IsDNSPrefetchAllowed() && aDocument->GetWindow(); } -static uint32_t GetDNSFlagsFromElement(Element& aElement) { +static nsIDNSService::DNSFlags GetDNSFlagsFromElement(Element& aElement) { nsIChannel* channel = aElement.OwnerDoc()->GetChannel(); if (!channel) { - return 0; + return nsIDNSService::RESOLVE_DEFAULT_FLAGS; } return nsIDNSService::GetFlagsFromTRRMode(channel->GetTRRMode()); } -uint32_t HTMLDNSPrefetch::PriorityToDNSServiceFlags(Priority aPriority) { +nsIDNSService::DNSFlags HTMLDNSPrefetch::PriorityToDNSServiceFlags( + Priority aPriority) { switch (aPriority) { case Priority::Low: - return uint32_t(nsIDNSService::RESOLVE_PRIORITY_LOW); + return nsIDNSService::RESOLVE_PRIORITY_LOW; case Priority::Medium: - return uint32_t(nsIDNSService::RESOLVE_PRIORITY_MEDIUM); + return nsIDNSService::RESOLVE_PRIORITY_MEDIUM; case Priority::High: - return 0u; + return nsIDNSService::RESOLVE_DEFAULT_FLAGS; } MOZ_ASSERT_UNREACHABLE("Unknown priority"); - return 0u; + return nsIDNSService::RESOLVE_DEFAULT_FLAGS; } nsresult HTMLDNSPrefetch::Prefetch(SupportsDNSPrefetch& aSupports, @@ -219,7 +220,7 @@ nsresult HTMLDNSPrefetch::Prefetch(SupportsDNSPrefetch& aSupports, nsresult HTMLDNSPrefetch::Prefetch( const nsAString& hostname, bool isHttps, const OriginAttributes& aPartitionedPrincipalOriginAttributes, - uint32_t flags) { + nsIDNSService::DNSFlags flags) { if (IsNeckoChild()) { // We need to check IsEmpty() because net_IsValidHostName() // considers empty strings to be valid hostnames @@ -276,7 +277,7 @@ nsresult HTMLDNSPrefetch::CancelPrefetch(SupportsDNSPrefetch& aSupports, return NS_ERROR_NOT_AVAILABLE; } - uint32_t flags = + nsIDNSService::DNSFlags flags = GetDNSFlagsFromElement(aElement) | PriorityToDNSServiceFlags(aPriority); nsIURI* uri = aSupports.GetURIForDNSPrefetch(aElement); @@ -301,7 +302,7 @@ nsresult HTMLDNSPrefetch::CancelPrefetch(SupportsDNSPrefetch& aSupports, nsresult HTMLDNSPrefetch::CancelPrefetch( const nsAString& hostname, bool isHttps, const OriginAttributes& aPartitionedPrincipalOriginAttributes, - uint32_t flags, nsresult aReason) { + nsIDNSService::DNSFlags flags, nsresult aReason) { // Forward this request to Necko Parent if we're a child process if (IsNeckoChild()) { // We need to check IsEmpty() because net_IsValidHostName() @@ -409,7 +410,7 @@ void DeferredDNSPrefetches::Flush() { } } -nsresult DeferredDNSPrefetches::Add(uint32_t flags, +nsresult DeferredDNSPrefetches::Add(nsIDNSService::DNSFlags flags, SupportsDNSPrefetch& aSupports, Element& aElement) { // The FIFO has no lock, so it can only be accessed on main thread @@ -460,7 +461,7 @@ void DeferredDNSPrefetches::SubmitQueue() { } void DeferredDNSPrefetches::SubmitQueueEntry(Element& aElement, - uint32_t aFlags) { + nsIDNSService::DNSFlags aFlags) { auto& supports = ToSupportsDNSPrefetch(aElement); supports.ClearIsInDNSPrefetch(); diff --git a/dom/html/HTMLDNSPrefetch.h b/dom/html/HTMLDNSPrefetch.h index 38ea8177de5d..5820a6ecb2f9 100644 --- a/dom/html/HTMLDNSPrefetch.h +++ b/dom/html/HTMLDNSPrefetch.h @@ -10,6 +10,7 @@ #include "nsCOMPtr.h" #include "nsIRequest.h" #include "nsString.h" +#include "nsIDNSService.h" class nsITimer; class nsIURI; @@ -68,16 +69,16 @@ class HTMLDNSPrefetch { static void ElementDestroyed(Element&, SupportsDNSPrefetch&); private: - static uint32_t PriorityToDNSServiceFlags(Priority); + static nsIDNSService::DNSFlags PriorityToDNSServiceFlags(Priority); static nsresult Prefetch( const nsAString& host, bool isHttps, const OriginAttributes& aPartitionedPrincipalOriginAttributes, - uint32_t flags); + nsIDNSService::DNSFlags flags); static nsresult CancelPrefetch( const nsAString& hostname, bool isHttps, const OriginAttributes& aPartitionedPrincipalOriginAttributes, - uint32_t flags, nsresult aReason); + nsIDNSService::DNSFlags flags, nsresult aReason); friend class net::NeckoParent; }; diff --git a/dom/media/webrtc/transport/nriceresolver.cpp b/dom/media/webrtc/transport/nriceresolver.cpp index 00553270b68e..e1737e0e651a 100644 --- a/dom/media/webrtc/transport/nriceresolver.cpp +++ b/dom/media/webrtc/transport/nriceresolver.cpp @@ -147,7 +147,7 @@ int NrIceResolver::resolve(nr_resolver_resource* resource, MOZ_ASSERT(allocated_resolvers_ > 0); ASSERT_ON_THREAD(sts_thread_); RefPtr pr; - uint32_t resolve_flags = 0; + nsIDNSService::DNSFlags resolve_flags = nsIDNSService::RESOLVE_DEFAULT_FLAGS; OriginAttributes attrs; if (resource->transport_protocol != IPPROTO_UDP && @@ -162,10 +162,10 @@ int NrIceResolver::resolve(nr_resolver_resource* resource, switch (resource->address_family) { case AF_INET: - resolve_flags |= nsIDNSService::RESOLVE_DISABLE_IPV6; + resolve_flags = nsIDNSService::RESOLVE_DISABLE_IPV6; break; case AF_INET6: - resolve_flags |= nsIDNSService::RESOLVE_DISABLE_IPV4; + resolve_flags = nsIDNSService::RESOLVE_DISABLE_IPV4; break; default: ABORT(R_BAD_ARGS); diff --git a/netwerk/base/Dashboard.cpp b/netwerk/base/Dashboard.cpp index c512aa0642a0..56f3171942f6 100644 --- a/netwerk/base/Dashboard.cpp +++ b/netwerk/base/Dashboard.cpp @@ -943,7 +943,8 @@ Dashboard::RequestDNSLookup(const nsACString& aHost, helper->mEventTarget = GetCurrentEventTarget(); OriginAttributes attrs; rv = mDnsService->AsyncResolveNative( - aHost, nsIDNSService::RESOLVE_TYPE_DEFAULT, 0, nullptr, helper.get(), + aHost, nsIDNSService::RESOLVE_TYPE_DEFAULT, + nsIDNSService::RESOLVE_DEFAULT_FLAGS, nullptr, helper.get(), NS_GetCurrentThread(), attrs, getter_AddRefs(helper->mCancel)); return rv; } @@ -966,7 +967,8 @@ Dashboard::RequestDNSHTTPSRRLookup(const nsACString& aHost, helper->mEventTarget = GetCurrentEventTarget(); OriginAttributes attrs; rv = mDnsService->AsyncResolveNative( - aHost, nsIDNSService::RESOLVE_TYPE_HTTPSSVC, 0, nullptr, helper.get(), + aHost, nsIDNSService::RESOLVE_TYPE_HTTPSSVC, + nsIDNSService::RESOLVE_DEFAULT_FLAGS, nullptr, helper.get(), NS_GetCurrentThread(), attrs, getter_AddRefs(helper->mCancel)); return rv; } diff --git a/netwerk/base/ProxyAutoConfig.cpp b/netwerk/base/ProxyAutoConfig.cpp index 487cf8921884..9113a683f8a2 100644 --- a/netwerk/base/ProxyAutoConfig.cpp +++ b/netwerk/base/ProxyAutoConfig.cpp @@ -239,7 +239,7 @@ bool ProxyAutoConfig::ResolveAddress(const nsACString& aHostName, // When the PAC script attempts to resolve a domain, we must make sure we // don't use TRR, otherwise the TRR channel might also attempt to resolve // a name and we'll have a deadlock. - uint32_t flags = + nsIDNSService::DNSFlags flags = nsIDNSService::RESOLVE_PRIORITY_MEDIUM | nsIDNSService::GetFlagsFromTRRMode(nsIRequest::TRR_DISABLED_MODE); diff --git a/netwerk/base/nsDNSPrefetch.cpp b/netwerk/base/nsDNSPrefetch.cpp index b19a2e3e9f52..bd5ce0429fdd 100644 --- a/netwerk/base/nsDNSPrefetch.cpp +++ b/netwerk/base/nsDNSPrefetch.cpp @@ -53,7 +53,7 @@ nsDNSPrefetch::nsDNSPrefetch(nsIURI* aURI, aURI->GetAsciiHost(mHostname); } -nsresult nsDNSPrefetch::Prefetch(uint32_t flags) { +nsresult nsDNSPrefetch::Prefetch(nsIDNSService::DNSFlags flags) { if (mHostname.IsEmpty()) return NS_ERROR_NOT_AVAILABLE; if (!sDNSService) return NS_ERROR_NOT_AVAILABLE; @@ -77,16 +77,19 @@ nsresult nsDNSPrefetch::Prefetch(uint32_t flags) { nsresult nsDNSPrefetch::PrefetchLow(bool refreshDNS) { return Prefetch(nsIDNSService::RESOLVE_PRIORITY_LOW | - (refreshDNS ? nsIDNSService::RESOLVE_BYPASS_CACHE : 0)); + (refreshDNS ? nsIDNSService::RESOLVE_BYPASS_CACHE + : nsIDNSService::RESOLVE_DEFAULT_FLAGS)); } nsresult nsDNSPrefetch::PrefetchMedium(bool refreshDNS) { return Prefetch(nsIDNSService::RESOLVE_PRIORITY_MEDIUM | - (refreshDNS ? nsIDNSService::RESOLVE_BYPASS_CACHE : 0)); + (refreshDNS ? nsIDNSService::RESOLVE_BYPASS_CACHE + : nsIDNSService::RESOLVE_DEFAULT_FLAGS)); } nsresult nsDNSPrefetch::PrefetchHigh(bool refreshDNS) { - return Prefetch(refreshDNS ? nsIDNSService::RESOLVE_BYPASS_CACHE : 0); + return Prefetch(refreshDNS ? nsIDNSService::RESOLVE_BYPASS_CACHE + : nsIDNSService::RESOLVE_DEFAULT_FLAGS); } namespace { @@ -130,7 +133,7 @@ nsresult nsDNSPrefetch::FetchHTTPSSVC( } nsCOMPtr target = mozilla::GetCurrentEventTarget(); - uint32_t flags = nsIDNSService::GetFlagsFromTRRMode(mTRRMode); + nsIDNSService::DNSFlags flags = nsIDNSService::GetFlagsFromTRRMode(mTRRMode); if (aRefreshDNS) { flags |= nsIDNSService::RESOLVE_BYPASS_CACHE; } diff --git a/netwerk/base/nsDNSPrefetch.h b/netwerk/base/nsDNSPrefetch.h index d30fa6d2891f..13e85f500768 100644 --- a/netwerk/base/nsDNSPrefetch.h +++ b/netwerk/base/nsDNSPrefetch.h @@ -16,9 +16,9 @@ #include "nsIDNSListener.h" #include "nsIRequest.h" +#include "nsIDNSService.h" class nsIURI; -class nsIDNSService; class nsIDNSHTTPSSVCRecord; class nsDNSPrefetch final : public nsIDNSListener { @@ -63,7 +63,7 @@ class nsDNSPrefetch final : public nsIDNSListener { mozilla::TimeStamp mEndTimestamp; nsWeakPtr mListener; - nsresult Prefetch(uint32_t flags); + nsresult Prefetch(nsIDNSService::DNSFlags flags); }; #endif diff --git a/netwerk/base/nsSocketTransport2.cpp b/netwerk/base/nsSocketTransport2.cpp index a800651f3d45..941e45c502c0 100644 --- a/netwerk/base/nsSocketTransport2.cpp +++ b/netwerk/base/nsSocketTransport2.cpp @@ -987,7 +987,7 @@ nsresult nsSocketTransport::ResolveHost() { mResolving = true; - uint32_t dnsFlags = 0; + nsIDNSService::DNSFlags dnsFlags = nsIDNSService::RESOLVE_DEFAULT_FLAGS; if (mConnectionFlags & nsSocketTransport::BYPASS_CACHE) { dnsFlags = nsIDNSService::RESOLVE_BYPASS_CACHE; } diff --git a/netwerk/base/nsUDPSocket.cpp b/netwerk/base/nsUDPSocket.cpp index 2d296e80c99b..860483cb3c35 100644 --- a/netwerk/base/nsUDPSocket.cpp +++ b/netwerk/base/nsUDPSocket.cpp @@ -67,8 +67,9 @@ static nsresult ResolveHost(const nsACString& host, } nsCOMPtr tmpOutstanding; - return dns->AsyncResolveNative(host, nsIDNSService::RESOLVE_TYPE_DEFAULT, 0, - nullptr, listener, nullptr, aOriginAttributes, + return dns->AsyncResolveNative(host, nsIDNSService::RESOLVE_TYPE_DEFAULT, + nsIDNSService::RESOLVE_DEFAULT_FLAGS, nullptr, + listener, nullptr, aOriginAttributes, getter_AddRefs(tmpOutstanding)); } diff --git a/netwerk/dns/ChildDNSService.cpp b/netwerk/dns/ChildDNSService.cpp index d2bc2c36c011..1b0f3f73dad7 100644 --- a/netwerk/dns/ChildDNSService.cpp +++ b/netwerk/dns/ChildDNSService.cpp @@ -68,8 +68,9 @@ ChildDNSService::ChildDNSService() { void ChildDNSService::GetDNSRecordHashKey( const nsACString& aHost, const nsACString& aTrrServer, int32_t aPort, - uint16_t aType, const OriginAttributes& aOriginAttributes, uint32_t aFlags, - uintptr_t aListenerAddr, nsACString& aHashKey) { + uint16_t aType, const OriginAttributes& aOriginAttributes, + nsIDNSService::DNSFlags aFlags, uintptr_t aListenerAddr, + nsACString& aHashKey) { aHashKey.Assign(aHost); aHashKey.Assign(aTrrServer); aHashKey.AppendInt(aPort); @@ -84,7 +85,7 @@ void ChildDNSService::GetDNSRecordHashKey( } nsresult ChildDNSService::AsyncResolveInternal( - const nsACString& hostname, uint16_t type, uint32_t flags, + const nsACString& hostname, uint16_t type, nsIDNSService::DNSFlags flags, nsIDNSAdditionalInfo* aInfo, nsIDNSListener* listener, nsIEventTarget* target_, const OriginAttributes& aOriginAttributes, nsICancelable** result) { @@ -157,7 +158,7 @@ nsresult ChildDNSService::AsyncResolveInternal( } nsresult ChildDNSService::CancelAsyncResolveInternal( - const nsACString& aHostname, uint16_t aType, uint32_t aFlags, + const nsACString& aHostname, uint16_t aType, nsIDNSService::DNSFlags aFlags, nsIDNSAdditionalInfo* aInfo, nsIDNSListener* aListener, nsresult aReason, const OriginAttributes& aOriginAttributes) { if (mDisablePrefetch && (aFlags & RESOLVE_SPECULATE)) { @@ -185,7 +186,8 @@ nsresult ChildDNSService::CancelAsyncResolveInternal( NS_IMETHODIMP ChildDNSService::AsyncResolve(const nsACString& hostname, - nsIDNSService::ResolveType aType, uint32_t flags, + nsIDNSService::ResolveType aType, + nsIDNSService::DNSFlags flags, nsIDNSAdditionalInfo* aInfo, nsIDNSListener* listener, nsIEventTarget* target_, JS::Handle aOriginAttributes, @@ -204,13 +206,11 @@ ChildDNSService::AsyncResolve(const nsACString& hostname, } NS_IMETHODIMP -ChildDNSService::AsyncResolveNative(const nsACString& hostname, - nsIDNSService::ResolveType aType, - uint32_t flags, nsIDNSAdditionalInfo* aInfo, - nsIDNSListener* listener, - nsIEventTarget* target_, - const OriginAttributes& aOriginAttributes, - nsICancelable** result) { +ChildDNSService::AsyncResolveNative( + const nsACString& hostname, nsIDNSService::ResolveType aType, + nsIDNSService::DNSFlags flags, nsIDNSAdditionalInfo* aInfo, + nsIDNSListener* listener, nsIEventTarget* target_, + const OriginAttributes& aOriginAttributes, nsICancelable** result) { return AsyncResolveInternal(hostname, aType, flags, aInfo, listener, target_, aOriginAttributes, result); } @@ -226,7 +226,7 @@ ChildDNSService::NewAdditionalInfo(const nsACString& aTrrURL, int32_t aPort, NS_IMETHODIMP ChildDNSService::CancelAsyncResolve(const nsACString& aHostname, nsIDNSService::ResolveType aType, - uint32_t aFlags, + nsIDNSService::DNSFlags aFlags, nsIDNSAdditionalInfo* aInfo, nsIDNSListener* aListener, nsresult aReason, JS::Handle aOriginAttributes, @@ -246,14 +246,16 @@ ChildDNSService::CancelAsyncResolve(const nsACString& aHostname, NS_IMETHODIMP ChildDNSService::CancelAsyncResolveNative( const nsACString& aHostname, nsIDNSService::ResolveType aType, - uint32_t aFlags, nsIDNSAdditionalInfo* aInfo, nsIDNSListener* aListener, - nsresult aReason, const OriginAttributes& aOriginAttributes) { + nsIDNSService::DNSFlags aFlags, nsIDNSAdditionalInfo* aInfo, + nsIDNSListener* aListener, nsresult aReason, + const OriginAttributes& aOriginAttributes) { return CancelAsyncResolveInternal(aHostname, aType, aFlags, aInfo, aListener, aReason, aOriginAttributes); } NS_IMETHODIMP -ChildDNSService::Resolve(const nsACString& hostname, uint32_t flags, +ChildDNSService::Resolve(const nsACString& hostname, + nsIDNSService::DNSFlags flags, JS::Handle aOriginAttributes, JSContext* aCx, uint8_t aArgc, nsIDNSRecord** result) { // not planning to ever support this, since sync IPDL is evil. @@ -261,7 +263,8 @@ ChildDNSService::Resolve(const nsACString& hostname, uint32_t flags, } NS_IMETHODIMP -ChildDNSService::ResolveNative(const nsACString& hostname, uint32_t flags, +ChildDNSService::ResolveNative(const nsACString& hostname, + nsIDNSService::DNSFlags flags, const OriginAttributes& aOriginAttributes, nsIDNSRecord** result) { // not planning to ever support this, since sync IPDL is evil. @@ -368,7 +371,8 @@ ChildDNSService::GetODoHActivated(bool* aResult) { void ChildDNSService::NotifyRequestDone(DNSRequestSender* aDnsRequest) { // We need the original flags and listener for the pending requests hash. - uint32_t originalFlags = aDnsRequest->mFlags & ~RESOLVE_OFFLINE; + nsIDNSService::DNSFlags originalFlags = + aDnsRequest->mFlags & ~RESOLVE_OFFLINE; uintptr_t originalListenerAddr = reinterpret_cast(aDnsRequest->mListener.get()); RefPtr wrapper = do_QueryObject(aDnsRequest->mListener); diff --git a/netwerk/dns/ChildDNSService.h b/netwerk/dns/ChildDNSService.h index 72bfeaa9a2cb..4d92f3abf5f3 100644 --- a/netwerk/dns/ChildDNSService.h +++ b/netwerk/dns/ChildDNSService.h @@ -44,16 +44,19 @@ class ChildDNSService final : public DNSServiceBase, public nsPIDNSService { void MOZ_ALWAYS_INLINE GetDNSRecordHashKey( const nsACString& aHost, const nsACString& aTrrServer, int32_t aPort, uint16_t aType, const OriginAttributes& aOriginAttributes, - uint32_t aFlags, uintptr_t aListenerAddr, nsACString& aHashKey); + nsIDNSService::DNSFlags aFlags, uintptr_t aListenerAddr, + nsACString& aHashKey); nsresult AsyncResolveInternal(const nsACString& hostname, uint16_t type, - uint32_t flags, nsIDNSAdditionalInfo* aInfo, + nsIDNSService::DNSFlags flags, + nsIDNSAdditionalInfo* aInfo, nsIDNSListener* listener, nsIEventTarget* target_, const OriginAttributes& aOriginAttributes, nsICancelable** result); nsresult CancelAsyncResolveInternal( - const nsACString& aHostname, uint16_t aType, uint32_t aFlags, - nsIDNSAdditionalInfo* aInfo, nsIDNSListener* aListener, nsresult aReason, + const nsACString& aHostname, uint16_t aType, + nsIDNSService::DNSFlags aFlags, nsIDNSAdditionalInfo* aInfo, + nsIDNSListener* aListener, nsresult aReason, const OriginAttributes& aOriginAttributes); bool mODoHActivated = false; diff --git a/netwerk/dns/DNSRequestBase.h b/netwerk/dns/DNSRequestBase.h index 850aadaca4d9..7b26846f5e26 100644 --- a/netwerk/dns/DNSRequestBase.h +++ b/netwerk/dns/DNSRequestBase.h @@ -35,7 +35,7 @@ class DNSRequestBase : public nsISupports { const nsCString& trrServer, const int32_t& port, const uint16_t& type, const OriginAttributes& originAttributes, - const uint32_t& flags, + const nsIDNSService::DNSFlags& flags, const nsresult& reason) = 0; virtual bool OnRecvLookupCompleted(const DNSRequestResponse& reply) = 0; virtual void OnIPCActorDestroy() = 0; @@ -60,14 +60,14 @@ class DNSRequestSender final : public DNSRequestBase, public nsICancelable { DNSRequestSender(const nsACString& aHost, const nsACString& aTrrServer, int32_t aPort, const uint16_t& aType, const OriginAttributes& aOriginAttributes, - const uint32_t& aFlags, nsIDNSListener* aListener, - nsIEventTarget* target); + const nsIDNSService::DNSFlags& aFlags, + nsIDNSListener* aListener, nsIEventTarget* target); void OnRecvCancelDNSRequest(const nsCString& hostName, const nsCString& trrServer, const int32_t& port, const uint16_t& type, const OriginAttributes& originAttributes, - const uint32_t& flags, + const nsIDNSService::DNSFlags& flags, const nsresult& reason) override; bool OnRecvLookupCompleted(const DNSRequestResponse& reply) override; void OnIPCActorDestroy() override; @@ -92,7 +92,7 @@ class DNSRequestSender final : public DNSRequestBase, public nsICancelable { int32_t mPort; uint16_t mType = 0; const OriginAttributes mOriginAttributes; - uint16_t mFlags = 0; + nsIDNSService::DNSFlags mFlags = nsIDNSService::RESOLVE_DEFAULT_FLAGS; }; // DNSRequestHandler handles the dns request and sends the result back via IPC. @@ -106,13 +106,14 @@ class DNSRequestHandler final : public DNSRequestBase, public nsIDNSListener { void DoAsyncResolve(const nsACString& hostname, const nsACString& trrServer, int32_t port, uint16_t type, - const OriginAttributes& originAttributes, uint32_t flags); + const OriginAttributes& originAttributes, + nsIDNSService::DNSFlags flags); void OnRecvCancelDNSRequest(const nsCString& hostName, const nsCString& trrServer, const int32_t& port, const uint16_t& type, const OriginAttributes& originAttributes, - const uint32_t& flags, + const nsIDNSService::DNSFlags& flags, const nsresult& reason) override; bool OnRecvLookupCompleted(const DNSRequestResponse& reply) override; void OnIPCActorDestroy() override; @@ -123,7 +124,7 @@ class DNSRequestHandler final : public DNSRequestBase, public nsIDNSListener { private: virtual ~DNSRequestHandler() = default; - uint32_t mFlags = 0; + nsIDNSService::DNSFlags mFlags = nsIDNSService::RESOLVE_DEFAULT_FLAGS; }; // Provides some common methods for DNSRequestChild and DNSRequestParent. diff --git a/netwerk/dns/DNSRequestChild.cpp b/netwerk/dns/DNSRequestChild.cpp index 2d8056d0a23a..e792706e007b 100644 --- a/netwerk/dns/DNSRequestChild.cpp +++ b/netwerk/dns/DNSRequestChild.cpp @@ -42,7 +42,7 @@ class ChildDNSRecord : public nsIDNSAddrRecord { NS_DECL_NSIDNSRECORD NS_DECL_NSIDNSADDRRECORD - ChildDNSRecord(const DNSRecord& reply, uint16_t flags); + ChildDNSRecord(const DNSRecord& reply, nsIDNSService::DNSFlags flags); private: virtual ~ChildDNSRecord() = default; @@ -50,7 +50,7 @@ class ChildDNSRecord : public nsIDNSAddrRecord { nsCString mCanonicalName; nsTArray mAddresses; uint32_t mCurrent = 0; // addr iterator - uint16_t mFlags = 0; + nsIDNSService::DNSFlags mFlags = nsIDNSService::RESOLVE_DEFAULT_FLAGS; double mTrrFetchDuration = 0; double mTrrFetchDurationNetworkOnly = 0; bool mIsTRR = false; @@ -62,7 +62,8 @@ class ChildDNSRecord : public nsIDNSAddrRecord { NS_IMPL_ISUPPORTS(ChildDNSRecord, nsIDNSRecord, nsIDNSAddrRecord) -ChildDNSRecord::ChildDNSRecord(const DNSRecord& reply, uint16_t flags) +ChildDNSRecord::ChildDNSRecord(const DNSRecord& reply, + nsIDNSService::DNSFlags flags) : mFlags(flags) { mCanonicalName = reply.canonicalName(); mTrrFetchDuration = reply.trrFetchDuration(); @@ -362,10 +363,13 @@ ChildDNSByTypeRecord::GetTtl(uint32_t* aResult) { NS_IMPL_ISUPPORTS(DNSRequestSender, nsICancelable) -DNSRequestSender::DNSRequestSender( - const nsACString& aHost, const nsACString& aTrrServer, int32_t aPort, - const uint16_t& aType, const OriginAttributes& aOriginAttributes, - const uint32_t& aFlags, nsIDNSListener* aListener, nsIEventTarget* target) +DNSRequestSender::DNSRequestSender(const nsACString& aHost, + const nsACString& aTrrServer, int32_t aPort, + const uint16_t& aType, + const OriginAttributes& aOriginAttributes, + const nsIDNSService::DNSFlags& aFlags, + nsIDNSListener* aListener, + nsIEventTarget* target) : mListener(aListener), mTarget(target), mResultStatus(NS_OK), @@ -379,7 +383,7 @@ DNSRequestSender::DNSRequestSender( void DNSRequestSender::OnRecvCancelDNSRequest( const nsCString& hostName, const nsCString& trrServer, const int32_t& port, const uint16_t& type, const OriginAttributes& originAttributes, - const uint32_t& flags, const nsresult& reason) {} + const nsIDNSService::DNSFlags& flags, const nsresult& reason) {} NS_IMETHODIMP DNSRequestSender::Cancel(nsresult reason) { @@ -546,7 +550,7 @@ DNSRequestChild::DNSRequestChild(DNSRequestBase* aRequest) mozilla::ipc::IPCResult DNSRequestChild::RecvCancelDNSRequest( const nsCString& hostName, const nsCString& trrServer, const int32_t& port, const uint16_t& type, const OriginAttributes& originAttributes, - const uint32_t& flags, const nsresult& reason) { + const nsIDNSService::DNSFlags& flags, const nsresult& reason) { mDNSRequest->OnRecvCancelDNSRequest(hostName, trrServer, port, type, originAttributes, flags, reason); return IPC_OK(); diff --git a/netwerk/dns/DNSRequestChild.h b/netwerk/dns/DNSRequestChild.h index 678aff2043a7..064c2425e097 100644 --- a/netwerk/dns/DNSRequestChild.h +++ b/netwerk/dns/DNSRequestChild.h @@ -30,8 +30,8 @@ class DNSRequestChild final : public DNSRequestActor, public PDNSRequestChild { mozilla::ipc::IPCResult RecvCancelDNSRequest( const nsCString& hostName, const nsCString& trrServer, const int32_t& port, const uint16_t& type, - const OriginAttributes& originAttributes, const uint32_t& flags, - const nsresult& reason); + const OriginAttributes& originAttributes, + const nsIDNSService::DNSFlags& flags, const nsresult& reason); mozilla::ipc::IPCResult RecvLookupCompleted(const DNSRequestResponse& reply); virtual void ActorDestroy(ActorDestroyReason why) override; }; diff --git a/netwerk/dns/DNSRequestParent.cpp b/netwerk/dns/DNSRequestParent.cpp index ef87c05af8c6..3b6ebf00afa9 100644 --- a/netwerk/dns/DNSRequestParent.cpp +++ b/netwerk/dns/DNSRequestParent.cpp @@ -40,7 +40,7 @@ void DNSRequestHandler::DoAsyncResolve(const nsACString& hostname, const nsACString& trrServer, int32_t port, uint16_t type, const OriginAttributes& originAttributes, - uint32_t flags) { + nsIDNSService::DNSFlags flags) { nsresult rv; mFlags = flags; nsCOMPtr dns = do_GetService(NS_DNSSERVICE_CONTRACTID, &rv); @@ -64,7 +64,7 @@ void DNSRequestHandler::DoAsyncResolve(const nsACString& hostname, void DNSRequestHandler::OnRecvCancelDNSRequest( const nsCString& hostName, const nsCString& aTrrServer, const int32_t& port, const uint16_t& type, const OriginAttributes& originAttributes, - const uint32_t& flags, const nsresult& reason) { + const nsIDNSService::DNSFlags& flags, const nsresult& reason) { nsresult rv; nsCOMPtr dns = do_GetService(NS_DNSSERVICE_CONTRACTID, &rv); if (NS_SUCCEEDED(rv)) { @@ -159,7 +159,7 @@ DNSRequestParent::DNSRequestParent(DNSRequestBase* aRequest) mozilla::ipc::IPCResult DNSRequestParent::RecvCancelDNSRequest( const nsCString& hostName, const nsCString& trrServer, const int32_t& port, const uint16_t& type, const OriginAttributes& originAttributes, - const uint32_t& flags, const nsresult& reason) { + const nsIDNSService::DNSFlags& flags, const nsresult& reason) { mDNSRequest->OnRecvCancelDNSRequest(hostName, trrServer, port, type, originAttributes, flags, reason); return IPC_OK(); diff --git a/netwerk/dns/DNSRequestParent.h b/netwerk/dns/DNSRequestParent.h index 94eaf13cfd40..7583709678f0 100644 --- a/netwerk/dns/DNSRequestParent.h +++ b/netwerk/dns/DNSRequestParent.h @@ -33,8 +33,8 @@ class DNSRequestParent : public DNSRequestActor, public PDNSRequestParent { mozilla::ipc::IPCResult RecvCancelDNSRequest( const nsCString& hostName, const nsCString& trrServer, const int32_t& port, const uint16_t& type, - const OriginAttributes& originAttributes, const uint32_t& flags, - const nsresult& reason); + const OriginAttributes& originAttributes, + const nsIDNSService::DNSFlags& flags, const nsresult& reason); mozilla::ipc::IPCResult RecvLookupCompleted(const DNSRequestResponse& reply); void ActorDestroy(ActorDestroyReason) override; }; diff --git a/netwerk/dns/HostRecordQueue.cpp b/netwerk/dns/HostRecordQueue.cpp index 9b256959e87f..104cbe70284d 100644 --- a/netwerk/dns/HostRecordQueue.cpp +++ b/netwerk/dns/HostRecordQueue.cpp @@ -10,7 +10,8 @@ namespace mozilla { namespace net { -void HostRecordQueue::InsertRecord(nsHostRecord* aRec, uint16_t aFlags, +void HostRecordQueue::InsertRecord(nsHostRecord* aRec, + nsIDNSService::DNSFlags aFlags, const MutexAutoLock& aProofOfLock) { if (aRec->isInList()) { MOZ_DIAGNOSTIC_ASSERT(!mEvictionQ.contains(aRec), @@ -155,7 +156,8 @@ void HostRecordQueue::MaybeRemoveFromQ(nsHostRecord* aRec, aRec->remove(); } -void HostRecordQueue::MoveToAnotherPendingQ(nsHostRecord* aRec, uint16_t aFlags, +void HostRecordQueue::MoveToAnotherPendingQ(nsHostRecord* aRec, + nsIDNSService::DNSFlags aFlags, const MutexAutoLock& aProofOfLock) { if (!(mHighQ.contains(aRec) || mMediumQ.contains(aRec) || mLowQ.contains(aRec))) { diff --git a/netwerk/dns/HostRecordQueue.h b/netwerk/dns/HostRecordQueue.h index d3bc0b86f6e1..dc77d43be62a 100644 --- a/netwerk/dns/HostRecordQueue.h +++ b/netwerk/dns/HostRecordQueue.h @@ -26,7 +26,7 @@ class HostRecordQueue final { // Insert the record to mHighQ or mMediumQ or mLowQ based on the record's // priority. - void InsertRecord(nsHostRecord* aRec, uint16_t aFlags, + void InsertRecord(nsHostRecord* aRec, nsIDNSService::DNSFlags aFlags, const MutexAutoLock& aProofOfLock); // Insert the record to mEvictionQ. In theory, this function should be called // when the record is not in any queue. @@ -45,7 +45,7 @@ class HostRecordQueue final { // Remove the record from the queue that contains it. void MaybeRemoveFromQ(nsHostRecord* aRec, const MutexAutoLock& aProofOfLock); // When the record's priority changes, move the record between pending queues. - void MoveToAnotherPendingQ(nsHostRecord* aRec, uint16_t aFlags, + void MoveToAnotherPendingQ(nsHostRecord* aRec, nsIDNSService::DNSFlags aFlags, const MutexAutoLock& aProofOfLock); // Returning the first record from one of the pending queue. When |aHighQOnly| // is true, returning the record from mHighQ only. When false, return the diff --git a/netwerk/dns/ODoHService.cpp b/netwerk/dns/ODoHService.cpp index eda9d1f8542a..6a5efc3717b2 100644 --- a/netwerk/dns/ODoHService.cpp +++ b/netwerk/dns/ODoHService.cpp @@ -331,7 +331,7 @@ nsresult ODoHService::UpdateODoHConfigFromHTTPSRR() { nsCOMPtr target = TRRService::Get()->MainThreadOrTRRThread(); // We'd like to bypass the DNS cache, since ODoHConfigs will be updated // manually by ODoHService. - uint32_t flags = + nsIDNSService::DNSFlags flags = nsIDNSService::RESOLVE_DISABLE_ODOH | nsIDNSService::RESOLVE_BYPASS_CACHE; nsCOMPtr info; if (port != -1) { diff --git a/netwerk/dns/PDNSRequest.ipdl b/netwerk/dns/PDNSRequest.ipdl index 0ac361e8a222..0613ff67b46c 100644 --- a/netwerk/dns/PDNSRequest.ipdl +++ b/netwerk/dns/PDNSRequest.ipdl @@ -13,6 +13,7 @@ include PDNSRequestParams; include "mozilla/net/NeckoMessageUtils.h"; using mozilla::OriginAttributes from "mozilla/ipc/BackgroundUtils.h"; +using nsIDNSService::DNSFlags from "nsIDNSService.h"; namespace mozilla { namespace net { @@ -28,7 +29,7 @@ both: // needed if the request is to be canceled. async CancelDNSRequest(nsCString hostName, nsCString trrServer, int32_t port, uint16_t type, OriginAttributes originAttributes, - uint32_t flags, nsresult reason); + DNSFlags flags, nsresult reason); async __delete__(); async LookupCompleted(DNSRequestResponse reply); diff --git a/netwerk/dns/TRRQuery.h b/netwerk/dns/TRRQuery.h index e53a0459a373..14f08ac7ac39 100644 --- a/netwerk/dns/TRRQuery.h +++ b/netwerk/dns/TRRQuery.h @@ -43,8 +43,8 @@ class TRRQuery : public AHostResolver { uint32_t aTtl, bool pb) override; virtual nsresult GetHostRecord(const nsACString& host, const nsACString& aTrrServer, uint16_t type, - uint16_t flags, uint16_t af, bool pb, - const nsCString& originSuffix, + nsIDNSService::DNSFlags flags, uint16_t af, + bool pb, const nsCString& originSuffix, nsHostRecord** result) override { if (!mHostResolver) { return NS_ERROR_FAILURE; diff --git a/netwerk/dns/nsDNSService2.cpp b/netwerk/dns/nsDNSService2.cpp index 336e4f909273..cc434e9bdcda 100644 --- a/netwerk/dns/nsDNSService2.cpp +++ b/netwerk/dns/nsDNSService2.cpp @@ -457,7 +457,7 @@ class nsDNSAsyncRequest final : public nsResolveHostCallback, nsDNSAsyncRequest(nsHostResolver* res, const nsACString& host, const nsACString& trrServer, uint16_t type, const OriginAttributes& attrs, nsIDNSListener* listener, - uint16_t flags, uint16_t af) + nsIDNSService::DNSFlags flags, uint16_t af) : mResolver(res), mHost(host), mTrrServer(trrServer), @@ -482,7 +482,7 @@ class nsDNSAsyncRequest final : public nsResolveHostCallback, const OriginAttributes mOriginAttributes; // The originAttributes for this resolving nsCOMPtr mListener; - uint16_t mFlags = 0; + nsIDNSService::DNSFlags mFlags = nsIDNSService::RESOLVE_DEFAULT_FLAGS; uint16_t mAF = 0; private: @@ -981,7 +981,7 @@ nsresult nsDNSService::PreprocessHostname(bool aLocalDomain, } nsresult nsDNSService::AsyncResolveInternal( - const nsACString& aHostname, uint16_t type, uint32_t flags, + const nsACString& aHostname, uint16_t type, nsIDNSService::DNSFlags flags, nsIDNSAdditionalInfo* aInfo, nsIDNSListener* aListener, nsIEventTarget* target_, const OriginAttributes& aOriginAttributes, nsICancelable** result) { @@ -1064,7 +1064,7 @@ nsresult nsDNSService::AsyncResolveInternal( } nsresult nsDNSService::CancelAsyncResolveInternal( - const nsACString& aHostname, uint16_t aType, uint32_t aFlags, + const nsACString& aHostname, uint16_t aType, nsIDNSService::DNSFlags aFlags, nsIDNSAdditionalInfo* aInfo, nsIDNSListener* aListener, nsresult aReason, const OriginAttributes& aOriginAttributes) { // grab reference to global host resolver and IDN service. beware @@ -1103,7 +1103,8 @@ nsresult nsDNSService::CancelAsyncResolveInternal( NS_IMETHODIMP nsDNSService::AsyncResolve(const nsACString& aHostname, - nsIDNSService::ResolveType aType, uint32_t flags, + nsIDNSService::ResolveType aType, + nsIDNSService::DNSFlags flags, nsIDNSAdditionalInfo* aInfo, nsIDNSListener* listener, nsIEventTarget* target_, JS::Handle aOriginAttributes, @@ -1122,13 +1123,11 @@ nsDNSService::AsyncResolve(const nsACString& aHostname, } NS_IMETHODIMP -nsDNSService::AsyncResolveNative(const nsACString& aHostname, - nsIDNSService::ResolveType aType, - uint32_t flags, nsIDNSAdditionalInfo* aInfo, - nsIDNSListener* aListener, - nsIEventTarget* target_, - const OriginAttributes& aOriginAttributes, - nsICancelable** result) { +nsDNSService::AsyncResolveNative( + const nsACString& aHostname, nsIDNSService::ResolveType aType, + nsIDNSService::DNSFlags flags, nsIDNSAdditionalInfo* aInfo, + nsIDNSListener* aListener, nsIEventTarget* target_, + const OriginAttributes& aOriginAttributes, nsICancelable** result) { return AsyncResolveInternal(aHostname, aType, flags, aInfo, aListener, target_, aOriginAttributes, result); } @@ -1144,7 +1143,8 @@ nsDNSService::NewAdditionalInfo(const nsACString& aTrrURL, int32_t aPort, NS_IMETHODIMP nsDNSService::CancelAsyncResolve(const nsACString& aHostname, nsIDNSService::ResolveType aType, - uint32_t aFlags, nsIDNSAdditionalInfo* aInfo, + nsIDNSService::DNSFlags aFlags, + nsIDNSAdditionalInfo* aInfo, nsIDNSListener* aListener, nsresult aReason, JS::Handle aOriginAttributes, JSContext* aCx, uint8_t aArgc) { @@ -1163,14 +1163,16 @@ nsDNSService::CancelAsyncResolve(const nsACString& aHostname, NS_IMETHODIMP nsDNSService::CancelAsyncResolveNative( const nsACString& aHostname, nsIDNSService::ResolveType aType, - uint32_t aFlags, nsIDNSAdditionalInfo* aInfo, nsIDNSListener* aListener, - nsresult aReason, const OriginAttributes& aOriginAttributes) { + nsIDNSService::DNSFlags aFlags, nsIDNSAdditionalInfo* aInfo, + nsIDNSListener* aListener, nsresult aReason, + const OriginAttributes& aOriginAttributes) { return CancelAsyncResolveInternal(aHostname, aType, aFlags, aInfo, aListener, aReason, aOriginAttributes); } NS_IMETHODIMP -nsDNSService::Resolve(const nsACString& aHostname, uint32_t flags, +nsDNSService::Resolve(const nsACString& aHostname, + nsIDNSService::DNSFlags flags, JS::Handle aOriginAttributes, JSContext* aCx, uint8_t aArgc, nsIDNSRecord** result) { OriginAttributes attrs; @@ -1185,7 +1187,8 @@ nsDNSService::Resolve(const nsACString& aHostname, uint32_t flags, } NS_IMETHODIMP -nsDNSService::ResolveNative(const nsACString& aHostname, uint32_t flags, +nsDNSService::ResolveNative(const nsACString& aHostname, + nsIDNSService::DNSFlags flags, const OriginAttributes& aOriginAttributes, nsIDNSRecord** result) { // Synchronous resolution is not available on the main thread. @@ -1197,13 +1200,13 @@ nsDNSService::ResolveNative(const nsACString& aHostname, uint32_t flags, } nsresult nsDNSService::DeprecatedSyncResolve( - const nsACString& aHostname, uint32_t flags, + const nsACString& aHostname, nsIDNSService::DNSFlags flags, const OriginAttributes& aOriginAttributes, nsIDNSRecord** result) { return ResolveInternal(aHostname, flags, aOriginAttributes, result); } nsresult nsDNSService::ResolveInternal( - const nsACString& aHostname, uint32_t flags, + const nsACString& aHostname, nsIDNSService::DNSFlags flags, const OriginAttributes& aOriginAttributes, nsIDNSRecord** result) { // grab reference to global host resolver and IDN service. beware // simultaneous shutdown!! @@ -1338,7 +1341,8 @@ nsDNSService::Observe(nsISupports* subject, const char* topic, return NS_OK; } -uint16_t nsDNSService::GetAFForLookup(const nsACString& host, uint32_t flags) { +uint16_t nsDNSService::GetAFForLookup(const nsACString& host, + nsIDNSService::DNSFlags flags) { if (mDisableIPv6 || (flags & RESOLVE_DISABLE_IPV6)) { return PR_AF_INET; } diff --git a/netwerk/dns/nsDNSService2.h b/netwerk/dns/nsDNSService2.h index 6bb562a2190a..cd516289d026 100644 --- a/netwerk/dns/nsDNSService2.h +++ b/netwerk/dns/nsDNSService2.h @@ -67,7 +67,7 @@ class nsDNSService final : public mozilla::net::DNSServiceBase, friend class DNSServiceWrapper; nsresult DeprecatedSyncResolve( - const nsACString& aHostname, uint32_t flags, + const nsACString& aHostname, nsIDNSService::DNSFlags flags, const mozilla::OriginAttributes& aOriginAttributes, nsIDNSRecord** result); @@ -77,24 +77,27 @@ class nsDNSService final : public mozilla::net::DNSServiceBase, void ReadPrefs(const char* name) override; static already_AddRefed GetSingleton(); - uint16_t GetAFForLookup(const nsACString& host, uint32_t flags); + uint16_t GetAFForLookup(const nsACString& host, + nsIDNSService::DNSFlags flags); nsresult PreprocessHostname(bool aLocalDomain, const nsACString& aInput, nsIIDNService* aIDN, nsACString& aACE); nsresult AsyncResolveInternal( - const nsACString& aHostname, uint16_t type, uint32_t flags, + const nsACString& aHostname, uint16_t type, nsIDNSService::DNSFlags flags, nsIDNSAdditionalInfo* aInfo, nsIDNSListener* aListener, nsIEventTarget* target_, const mozilla::OriginAttributes& aOriginAttributes, nsICancelable** result); nsresult CancelAsyncResolveInternal( - const nsACString& aHostname, uint16_t aType, uint32_t aFlags, - nsIDNSAdditionalInfo* aInfo, nsIDNSListener* aListener, nsresult aReason, + const nsACString& aHostname, uint16_t aType, + nsIDNSService::DNSFlags aFlags, nsIDNSAdditionalInfo* aInfo, + nsIDNSListener* aListener, nsresult aReason, const mozilla::OriginAttributes& aOriginAttributes); - nsresult ResolveInternal(const nsACString& aHostname, uint32_t flags, + nsresult ResolveInternal(const nsACString& aHostname, + nsIDNSService::DNSFlags flags, const mozilla::OriginAttributes& aOriginAttributes, nsIDNSRecord** result); diff --git a/netwerk/dns/nsHostRecord.cpp b/netwerk/dns/nsHostRecord.cpp index cf10c50f363b..fab4cb6e9490 100644 --- a/netwerk/dns/nsHostRecord.cpp +++ b/netwerk/dns/nsHostRecord.cpp @@ -29,8 +29,8 @@ using namespace mozilla; using namespace mozilla::net; nsHostKey::nsHostKey(const nsACString& aHost, const nsACString& aTrrServer, - uint16_t aType, uint16_t aFlags, uint16_t aAf, bool aPb, - const nsACString& aOriginsuffix) + uint16_t aType, nsIDNSService::DNSFlags aFlags, + uint16_t aAf, bool aPb, const nsACString& aOriginsuffix) : host(aHost), mTrrServer(aTrrServer), type(aType), @@ -119,7 +119,7 @@ void nsHostRecord::CopyExpirationTimesAndFlagsFrom( } bool nsHostRecord::HasUsableResult(const mozilla::TimeStamp& now, - uint16_t queryFlags) const { + nsIDNSService::DNSFlags queryFlags) const { if (mDoomed) { return false; } @@ -221,8 +221,8 @@ size_t AddrHostRecord::SizeOfIncludingThis(MallocSizeOf mallocSizeOf) const { return n; } -bool AddrHostRecord::HasUsableResultInternal(const mozilla::TimeStamp& now, - uint16_t queryFlags) const { +bool AddrHostRecord::HasUsableResultInternal( + const mozilla::TimeStamp& now, nsIDNSService::DNSFlags queryFlags) const { // don't use cached negative results for high priority queries. if (negative && IsHighPriority(queryFlags)) { return false; @@ -411,7 +411,8 @@ void AddrHostRecord::ResolveComplete() { } } -AddrHostRecord::DnsPriority AddrHostRecord::GetPriority(uint16_t aFlags) { +AddrHostRecord::DnsPriority AddrHostRecord::GetPriority( + nsIDNSService::DNSFlags aFlags) { if (IsHighPriority(aFlags)) { return AddrHostRecord::DNS_PRIORITY_HIGH; } @@ -440,8 +441,8 @@ TypeHostRecord::TypeHostRecord(const nsHostKey& key) TypeHostRecord::~TypeHostRecord() { mCallbacks.clear(); } -bool TypeHostRecord::HasUsableResultInternal(const mozilla::TimeStamp& now, - uint16_t queryFlags) const { +bool TypeHostRecord::HasUsableResultInternal( + const mozilla::TimeStamp& now, nsIDNSService::DNSFlags queryFlags) const { if (CheckExpiration(now) == EXP_EXPIRED) { return false; } diff --git a/netwerk/dns/nsHostRecord.h b/netwerk/dns/nsHostRecord.h index 95a2108903c2..00fd91f20acf 100644 --- a/netwerk/dns/nsHostRecord.h +++ b/netwerk/dns/nsHostRecord.h @@ -79,13 +79,13 @@ struct nsHostKey { const nsCString host; const nsCString mTrrServer; uint16_t type = 0; - uint16_t flags = 0; + nsIDNSService::DNSFlags flags = nsIDNSService::RESOLVE_DEFAULT_FLAGS; uint16_t af = 0; bool pb = false; const nsCString originSuffix; explicit nsHostKey(const nsACString& host, const nsACString& aTrrServer, - uint16_t type, uint16_t flags, uint16_t af, bool pb, - const nsACString& originSuffix); + uint16_t type, nsIDNSService::DNSFlags flags, uint16_t af, + bool pb, const nsACString& originSuffix); bool operator==(const nsHostKey& other) const; size_t SizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf) const; PLDHashNumber Hash() const; @@ -150,13 +150,15 @@ class nsHostRecord : public mozilla::LinkedListElement>, // Checks if the record is usable (not expired and has a value) bool HasUsableResult(const mozilla::TimeStamp& now, - uint16_t queryFlags = 0) const; + nsIDNSService::DNSFlags queryFlags = + nsIDNSService::RESOLVE_DEFAULT_FLAGS) const; - static DnsPriority GetPriority(uint16_t aFlags); + static DnsPriority GetPriority(nsIDNSService::DNSFlags aFlags); virtual void Cancel(); - virtual bool HasUsableResultInternal(const mozilla::TimeStamp& now, - uint16_t queryFlags) const = 0; + virtual bool HasUsableResultInternal( + const mozilla::TimeStamp& now, + nsIDNSService::DNSFlags queryFlags) const = 0; virtual bool RefreshForNegativeResponse() const { return true; } mozilla::LinkedList> mCallbacks; @@ -283,8 +285,9 @@ class AddrHostRecord final : public nsHostRecord { ~AddrHostRecord(); // Checks if the record is usable (not expired and has a value) - bool HasUsableResultInternal(const mozilla::TimeStamp& now, - uint16_t queryFlags) const override; + bool HasUsableResultInternal( + const mozilla::TimeStamp& now, + nsIDNSService::DNSFlags queryFlags) const override; bool RemoveOrRefresh(bool aTrrToo); // Mark records currently being resolved // as needed to resolve again. @@ -294,7 +297,7 @@ class AddrHostRecord final : public nsHostRecord { void NotifyRetryingTrr(); void ResolveComplete(); - static DnsPriority GetPriority(uint16_t aFlags); + static DnsPriority GetPriority(nsIDNSService::DNSFlags aFlags); // true if pending and on the queue (not yet given to getaddrinfo()) bool onQueue() { return LoadNative() && isInList(); } @@ -375,8 +378,9 @@ class TypeHostRecord final : public nsHostRecord, ~TypeHostRecord(); // Checks if the record is usable (not expired and has a value) - bool HasUsableResultInternal(const mozilla::TimeStamp& now, - uint16_t queryFlags) const override; + bool HasUsableResultInternal( + const mozilla::TimeStamp& now, + nsIDNSService::DNSFlags queryFlags) const override; bool RefreshForNegativeResponse() const override; mozilla::net::TypeRecordResultType mResults = AsVariant(mozilla::Nothing()); @@ -391,16 +395,16 @@ class TypeHostRecord final : public nsHostRecord, NS_DEFINE_STATIC_IID_ACCESSOR(TypeHostRecord, TYPEHOSTRECORD_IID) -static inline bool IsHighPriority(uint16_t flags) { +static inline bool IsHighPriority(nsIDNSService::DNSFlags flags) { return !(flags & (nsHostRecord::DNS_PRIORITY_LOW | nsHostRecord::DNS_PRIORITY_MEDIUM)); } -static inline bool IsMediumPriority(uint16_t flags) { +static inline bool IsMediumPriority(nsIDNSService::DNSFlags flags) { return flags & nsHostRecord::DNS_PRIORITY_MEDIUM; } -static inline bool IsLowPriority(uint16_t flags) { +static inline bool IsLowPriority(nsIDNSService::DNSFlags flags) { return flags & nsHostRecord::DNS_PRIORITY_LOW; } diff --git a/netwerk/dns/nsHostResolver.cpp b/netwerk/dns/nsHostResolver.cpp index dfb4931c107e..29b475f8f6e9 100644 --- a/netwerk/dns/nsHostResolver.cpp +++ b/netwerk/dns/nsHostResolver.cpp @@ -350,12 +350,10 @@ void nsHostResolver::Shutdown() { } } -nsresult nsHostResolver::GetHostRecord(const nsACString& host, - const nsACString& aTrrServer, - uint16_t type, uint16_t flags, - uint16_t af, bool pb, - const nsCString& originSuffix, - nsHostRecord** result) { +nsresult nsHostResolver::GetHostRecord( + const nsACString& host, const nsACString& aTrrServer, uint16_t type, + nsIDNSService::DNSFlags flags, uint16_t af, bool pb, + const nsCString& originSuffix, nsHostRecord** result) { MutexAutoLock lock(mLock); nsHostKey key(host, aTrrServer, type, flags, af, pb, originSuffix); @@ -420,7 +418,7 @@ nsresult nsHostResolver::ResolveHost(const nsACString& aHost, const nsACString& aTrrServer, int32_t aPort, uint16_t type, const OriginAttributes& aOriginAttributes, - uint16_t flags, uint16_t af, + nsIDNSService::DNSFlags flags, uint16_t af, nsResolveHostCallback* aCallback) { nsAutoCString host(aHost); NS_ENSURE_TRUE(!host.IsEmpty(), NS_ERROR_UNEXPECTED); @@ -480,7 +478,7 @@ nsresult nsHostResolver::ResolveHost(const nsACString& aHost, bool excludedFromTRR = false; if (TRRService::Get() && TRRService::Get()->IsExcludedFromTRR(host)) { - flags |= RES_DISABLE_TRR; + flags |= nsIDNSService::RESOLVE_DISABLE_TRR; excludedFromTRR = true; if (!aTrrServer.IsEmpty()) { @@ -681,8 +679,8 @@ already_AddRefed nsHostResolver::FromIPLiteral( already_AddRefed nsHostResolver::FromUnspecEntry( nsHostRecord* aRec, const nsACString& aHost, const nsACString& aTrrServer, - const nsACString& aOriginSuffix, uint16_t aType, uint16_t aFlags, - uint16_t af, bool aPb, nsresult& aStatus) { + const nsACString& aOriginSuffix, uint16_t aType, + nsIDNSService::DNSFlags aFlags, uint16_t af, bool aPb, nsresult& aStatus) { RefPtr result = nullptr; // If this is an IPV4 or IPV6 specific request, check if there is // an AF_UNSPEC entry we can use. Otherwise, hit the resolver... @@ -773,8 +771,8 @@ already_AddRefed nsHostResolver::FromUnspecEntry( void nsHostResolver::DetachCallback( const nsACString& host, const nsACString& aTrrServer, uint16_t aType, - const OriginAttributes& aOriginAttributes, uint16_t flags, uint16_t af, - nsResolveHostCallback* aCallback, nsresult status) { + const OriginAttributes& aOriginAttributes, nsIDNSService::DNSFlags flags, + uint16_t af, nsResolveHostCallback* aCallback, nsresult status) { RefPtr rec; RefPtr callback(aCallback); @@ -1108,7 +1106,7 @@ nsresult nsHostResolver::NameLookup(nsHostRecord* rec, return NS_ERROR_UNKNOWN_HOST; } - if (rec->flags & RES_DISABLE_TRR) { + if (rec->flags & nsIDNSService::RESOLVE_DISABLE_TRR) { LOG(("TRR with server and DISABLE_TRR flag. Returning error.")); return NS_ERROR_UNKNOWN_HOST; } @@ -1118,20 +1116,22 @@ nsresult nsHostResolver::NameLookup(nsHostRecord* rec, LOG(("NameLookup: %s effectiveTRRmode: %d flags: %X", rec->host.get(), rec->mEffectiveTRRMode, rec->flags)); - if (rec->flags & RES_DISABLE_TRR) { + if (rec->flags & nsIDNSService::RESOLVE_DISABLE_TRR) { rec->RecordReason(TRRSkippedReason::TRR_DISABLED_FLAG); } bool serviceNotReady = !TRRServiceEnabledForRecord(rec); if (rec->mEffectiveTRRMode != nsIRequest::TRR_DISABLED_MODE && - !((rec->flags & RES_DISABLE_TRR)) && !serviceNotReady) { + !((rec->flags & nsIDNSService::RESOLVE_DISABLE_TRR)) && + !serviceNotReady) { rv = TrrLookup(rec, aLock); } if (rec->mEffectiveTRRMode == nsIRequest::TRR_DISABLED_MODE || (rec->mEffectiveTRRMode == nsIRequest::TRR_FIRST_MODE && - (rec->flags & RES_DISABLE_TRR || serviceNotReady || NS_FAILED(rv)))) { + (rec->flags & nsIDNSService::RESOLVE_DISABLE_TRR || serviceNotReady || + NS_FAILED(rv)))) { if (!rec->IsAddrRecord()) { return rv; } @@ -1558,7 +1558,9 @@ nsHostResolver::LookupStatus nsHostResolver::CompleteLookupLocked( !rec->mResolving && sGetTtlEnabled) { LOG(("Issuing second async lookup for TTL for host [%s].", addrRec->host.get())); - addrRec->flags = (addrRec->flags & ~RES_PRIORITY_MEDIUM) | RES_PRIORITY_LOW; + addrRec->flags = + (addrRec->flags & ~nsIDNSService::RESOLVE_PRIORITY_MEDIUM) | + nsIDNSService::RESOLVE_PRIORITY_LOW; DebugOnly rv = NativeLookup(rec, aLock); NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), "Could not issue second async lookup for TTL."); @@ -1644,8 +1646,8 @@ nsHostResolver::LookupStatus nsHostResolver::CompleteLookupByTypeLocked( void nsHostResolver::CancelAsyncRequest( const nsACString& host, const nsACString& aTrrServer, uint16_t aType, - const OriginAttributes& aOriginAttributes, uint16_t flags, uint16_t af, - nsIDNSListener* aListener, nsresult status) + const OriginAttributes& aOriginAttributes, nsIDNSService::DNSFlags flags, + uint16_t af, nsIDNSListener* aListener, nsresult status) { MutexAutoLock lock(mLock); diff --git a/netwerk/dns/nsHostResolver.h b/netwerk/dns/nsHostResolver.h index 3467b3884a75..7b715ff767d9 100644 --- a/netwerk/dns/nsHostResolver.h +++ b/netwerk/dns/nsHostResolver.h @@ -70,8 +70,8 @@ class AHostResolver { uint32_t aTtl, bool pb) = 0; virtual nsresult GetHostRecord(const nsACString& host, const nsACString& aTrrServer, uint16_t type, - uint16_t flags, uint16_t af, bool pb, - const nsCString& originSuffix, + nsIDNSService::DNSFlags flags, uint16_t af, + bool pb, const nsCString& originSuffix, nsHostRecord** result) { return NS_ERROR_FAILURE; } @@ -123,7 +123,7 @@ class nsHostResolver : public nsISupports, public AHostResolver { nsresult ResolveHost(const nsACString& aHost, const nsACString& trrServer, int32_t aPort, uint16_t type, const mozilla::OriginAttributes& aOriginAttributes, - uint16_t flags, uint16_t af, + nsIDNSService::DNSFlags flags, uint16_t af, nsResolveHostCallback* callback); nsHostRecord* InitRecord(const nsHostKey& key); @@ -147,7 +147,7 @@ class nsHostResolver : public nsISupports, public AHostResolver { void DetachCallback(const nsACString& hostname, const nsACString& trrServer, uint16_t type, const mozilla::OriginAttributes& aOriginAttributes, - uint16_t flags, uint16_t af, + nsIDNSService::DNSFlags flags, uint16_t af, nsResolveHostCallback* callback, nsresult status); /** @@ -160,7 +160,7 @@ class nsHostResolver : public nsISupports, public AHostResolver { void CancelAsyncRequest(const nsACString& host, const nsACString& trrServer, uint16_t type, const mozilla::OriginAttributes& aOriginAttributes, - uint16_t flags, uint16_t af, + nsIDNSService::DNSFlags flags, uint16_t af, nsIDNSListener* aListener, nsresult status); /** * values for the flags parameter passed to ResolveHost and DetachCallback @@ -199,8 +199,8 @@ class nsHostResolver : public nsISupports, public AHostResolver { mozilla::net::TypeRecordResultType& aResult, uint32_t aTtl, bool pb) override; nsresult GetHostRecord(const nsACString& host, const nsACString& trrServer, - uint16_t type, uint16_t flags, uint16_t af, bool pb, - const nsCString& originSuffix, + uint16_t type, nsIDNSService::DNSFlags flags, + uint16_t af, bool pb, const nsCString& originSuffix, nsHostRecord** result) override; nsresult TrrLookup_unlocked(nsHostRecord*, mozilla::net::TRR* pushedTRR = nullptr) override; @@ -281,8 +281,9 @@ class nsHostResolver : public nsISupports, public AHostResolver { // Called to check if we have an AF_UNSPEC entry in the cache. already_AddRefed FromUnspecEntry( nsHostRecord* aRec, const nsACString& aHost, const nsACString& aTrrServer, - const nsACString& aOriginSuffix, uint16_t aType, uint16_t aFlags, - uint16_t af, bool aPb, nsresult& aStatus) MOZ_REQUIRES(mLock); + const nsACString& aOriginSuffix, uint16_t aType, + nsIDNSService::DNSFlags aFlags, uint16_t af, bool aPb, nsresult& aStatus) + MOZ_REQUIRES(mLock); enum { METHOD_HIT = 1, diff --git a/netwerk/dns/nsIDNSService.idl b/netwerk/dns/nsIDNSService.idl index 1179e5dd3e92..895eb153b208 100644 --- a/netwerk/dns/nsIDNSService.idl +++ b/netwerk/dns/nsIDNSService.idl @@ -8,6 +8,7 @@ %{ C++ #include "mozilla/BasePrincipal.h" +#include "mozilla/TypedEnumBits.h" %} interface nsICancelable; @@ -51,6 +52,49 @@ interface nsIDNSService : nsISupports MODE_TRROFF = 5 // identical to MODE_NATIVEONLY but explicitly selected }; + cenum DNSFlags : 32 { + RESOLVE_DEFAULT_FLAGS = 0, + // if set, this flag suppresses the internal DNS lookup cache. + RESOLVE_BYPASS_CACHE = (1 << 0), + // if set, the canonical name of the specified host will be queried. + RESOLVE_CANONICAL_NAME = (1 << 1), + // If PRIORITY flags are set, the query is given lower priority. + // Medium takes precedence if both MEDIUM and LOW are used. + RESOLVE_PRIORITY_MEDIUM = (1 << 2), + RESOLVE_PRIORITY_LOW = (1 << 3), + // if set, indicates request is speculative. Speculative requests + // return errors if prefetching is disabled by configuration. + RESOLVE_SPECULATE = (1 << 4), + // If set, only IPv4 addresses will be returned from resolve/asyncResolve. + RESOLVE_DISABLE_IPV6 = (1 << 5), + // If set, only literals and cached entries will be returned from resolve/asyncResolve. + RESOLVE_OFFLINE = (1 << 6), + // If set, only IPv6 addresses will be returned from resolve/asyncResolve. + RESOLVE_DISABLE_IPV4 = (1 << 7), + // If set, allow name collision results (127.0.53.53) which are normally filtered. + RESOLVE_ALLOW_NAME_COLLISION = (1 << 8), + // If set, do not use TRR for resolving the host name. + RESOLVE_DISABLE_TRR = (1 << 9), + // if set (together with RESOLVE_BYPASS_CACHE), invalidate the DNS + // existing cache entry first (if existing) then make a new resolve. + RESOLVE_REFRESH_CACHE = (1 << 10), + // These two bits encode the TRR mode of the request. + // Use the static helper methods GetFlagsFromTRRMode and + // GetTRRModeFromFlags to convert between the TRR mode and flags. + RESOLVE_TRR_MODE_MASK = (1 << 11) | (1 << 12), + RESOLVE_TRR_DISABLED_MODE = (1 << 11), + // Force resolution even when SOCKS proxy with DNS forwarding is configured. + // Only to be used for the proxy host resolution. + RESOLVE_IGNORE_SOCKS_DNS = (1 << 13), + // If set, only cached IP hint addresses will be returned from resolve/asyncResolve. + RESOLVE_IP_HINT = (1 << 14), + // If set, do not use ODoH for resolving the host name. + RESOLVE_DISABLE_ODOH = (1 << 15), + + // Bitflag containing all possible flags. + ALL_DNSFLAGS_BITS = ((1 << 16) - 1), + }; + /** * kicks off an asynchronous host lookup. * @@ -84,7 +128,7 @@ interface nsIDNSService : nsISupports [implicit_jscontext, optional_argc] nsICancelable asyncResolve(in AUTF8String aHostName, in nsIDNSService_ResolveType aType, - in unsigned long aFlags, + in nsIDNSService_DNSFlags aFlags, in nsIDNSAdditionalInfo aInfo, in nsIDNSListener aListener, in nsIEventTarget aListenerTarget, @@ -93,7 +137,7 @@ interface nsIDNSService : nsISupports [notxpcom] nsresult asyncResolveNative(in AUTF8String aHostName, in nsIDNSService_ResolveType aType, - in unsigned long aFlags, + in nsIDNSService_DNSFlags aFlags, in nsIDNSAdditionalInfo aInfo, in nsIDNSListener aListener, in nsIEventTarget aListenerTarget, @@ -133,7 +177,7 @@ interface nsIDNSService : nsISupports [implicit_jscontext, optional_argc] void cancelAsyncResolve(in AUTF8String aHostName, in nsIDNSService_ResolveType aType, - in unsigned long aFlags, + in nsIDNSService_DNSFlags aFlags, in nsIDNSAdditionalInfo aResolver, in nsIDNSListener aListener, in nsresult aReason, @@ -142,7 +186,7 @@ interface nsIDNSService : nsISupports [notxpcom] nsresult cancelAsyncResolveNative(in AUTF8String aHostName, in nsIDNSService_ResolveType aType, - in unsigned long aFlags, + in nsIDNSService_DNSFlags aFlags, in nsIDNSAdditionalInfo aResolver, in nsIDNSListener aListener, in nsresult aReason, @@ -169,12 +213,12 @@ interface nsIDNSService : nsISupports */ [implicit_jscontext, optional_argc] nsIDNSRecord resolve(in AUTF8String aHostName, - in unsigned long aFlags, + in nsIDNSService_DNSFlags aFlags, [optional] in jsval aOriginAttributes); [notxpcom] nsresult resolveNative(in AUTF8String aHostName, - in unsigned long aFlags, + in nsIDNSService_DNSFlags aFlags, in OriginAttributes aOriginAttributes, out nsIDNSRecord aResult); @@ -275,93 +319,16 @@ interface nsIDNSService : nsISupports * the aFlags parameter passed to asyncResolve() and resolve(). */ - /** - * if set, this flag suppresses the internal DNS lookup cache. - */ - const unsigned long RESOLVE_BYPASS_CACHE = (1 << 0); - - /** - * if set, the canonical name of the specified host will be queried. - */ - const unsigned long RESOLVE_CANONICAL_NAME = (1 << 1); - - /** - * if set, the query is given lower priority. Medium takes precedence - * if both are used. - */ - const unsigned long RESOLVE_PRIORITY_MEDIUM = (1 << 2); - const unsigned long RESOLVE_PRIORITY_LOW = (1 << 3); - - /** - * if set, indicates request is speculative. Speculative requests - * return errors if prefetching is disabled by configuration. - */ - const unsigned long RESOLVE_SPECULATE = (1 << 4); - - /** - * If set, only IPv4 addresses will be returned from resolve/asyncResolve. - */ - const unsigned long RESOLVE_DISABLE_IPV6 = (1 << 5); - - /** - * If set, only literals and cached entries will be returned from resolve/ - * asyncResolve. - */ - const unsigned long RESOLVE_OFFLINE = (1 << 6); - - /** - * If set, only IPv6 addresses will be returned from resolve/asyncResolve. - */ - const unsigned long RESOLVE_DISABLE_IPV4 = (1 << 7); - - /** - * If set, allow name collision results (127.0.53.53) which are normally filtered. - */ - const unsigned long RESOLVE_ALLOW_NAME_COLLISION = (1 << 8); - - /** - * If set, do not use TRR for resolving the host name. - */ - const unsigned long RESOLVE_DISABLE_TRR = (1 << 9); - - /** - * if set (together with RESOLVE_BYPASS_CACHE), invalidate the DNS - * existing cache entry first (if existing) then make a new resolve. - */ - const unsigned long RESOLVE_REFRESH_CACHE = (1 << 10); - - /** - * These two bits encode the TRR mode of the request. - * Use the static helper methods convert between the TRR mode and flags. - */ - const unsigned long RESOLVE_TRR_MODE_MASK = (1 << 11) | (1 << 12); - const unsigned long RESOLVE_TRR_DISABLED_MODE = (1 << 11); %{C++ - static uint32_t GetFlagsFromTRRMode(nsIRequest::TRRMode aMode) { - return static_cast(aMode) << 11; + static nsIDNSService::DNSFlags GetFlagsFromTRRMode(nsIRequest::TRRMode aMode) { + return static_cast(static_cast(aMode) << 11); } - static nsIRequest::TRRMode GetTRRModeFromFlags(uint32_t aFlags) { + static nsIRequest::TRRMode GetTRRModeFromFlags(nsIDNSService::DNSFlags aFlags) { return static_cast((aFlags & RESOLVE_TRR_MODE_MASK) >> 11); } %} - /** - * Force resolution even when SOCKS proxy with DNS forwarding is configured. - * Only to be used for the proxy host resolution. - */ - const unsigned long RESOLVE_IGNORE_SOCKS_DNS = 1 << 13; - - /** - * If set, only cached IP hint addresses will be returned from - * resolve/asyncResolve. - */ - const unsigned long RESOLVE_IP_HINT = 1 << 14; - - /** - * If set, do not use ODoH for resolving the host name. - */ - const unsigned long RESOLVE_DISABLE_ODOH = 1 << 15; }; %{C++ @@ -378,5 +345,7 @@ interface nsIDNSService : nsISupports */ #define NS_NETWORK_TRR_MODE_CHANGED_TOPIC "network:trr-mode-changed" +MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(nsIDNSService::DNSFlags) + %} diff --git a/netwerk/ipc/NeckoMessageUtils.h b/netwerk/ipc/NeckoMessageUtils.h index 712f9737d94c..d419d0f602c9 100644 --- a/netwerk/ipc/NeckoMessageUtils.h +++ b/netwerk/ipc/NeckoMessageUtils.h @@ -18,6 +18,7 @@ #include "mozilla/net/DNS.h" #include "ipc/IPCMessageUtilsSpecializations.h" #include "nsITRRSkipReason.h" +#include "nsIDNSService.h" namespace IPC { @@ -160,6 +161,12 @@ struct ParamTraits { } }; +template <> +struct ParamTraits + : public BitFlagsEnumSerializer< + nsIDNSService::DNSFlags, nsIDNSService::DNSFlags::ALL_DNSFLAGS_BITS> { +}; + } // namespace IPC #endif // mozilla_net_NeckoMessageUtils_h diff --git a/netwerk/ipc/NeckoParent.cpp b/netwerk/ipc/NeckoParent.cpp index 5c7a6dd0fb63..7fc681d5996b 100644 --- a/netwerk/ipc/NeckoParent.cpp +++ b/netwerk/ipc/NeckoParent.cpp @@ -504,7 +504,7 @@ bool NeckoParent::DeallocPUDPSocketParent(PUDPSocketParent* actor) { already_AddRefed NeckoParent::AllocPDNSRequestParent( const nsACString& aHost, const nsACString& aTrrServer, const int32_t& aPort, const uint16_t& aType, const OriginAttributes& aOriginAttributes, - const uint32_t& aFlags) { + const nsIDNSService::DNSFlags& aFlags) { RefPtr handler = new DNSRequestHandler(); RefPtr actor = new DNSRequestParent(handler); return actor.forget(); @@ -513,7 +513,8 @@ already_AddRefed NeckoParent::AllocPDNSRequestParent( mozilla::ipc::IPCResult NeckoParent::RecvPDNSRequestConstructor( PDNSRequestParent* aActor, const nsACString& aHost, const nsACString& aTrrServer, const int32_t& aPort, const uint16_t& aType, - const OriginAttributes& aOriginAttributes, const uint32_t& aFlags) { + const OriginAttributes& aOriginAttributes, + const nsIDNSService::DNSFlags& aFlags) { RefPtr actor = static_cast(aActor); RefPtr handler = actor->GetDNSRequest()->AsDNSRequestHandler(); @@ -541,15 +542,16 @@ mozilla::ipc::IPCResult NeckoParent::RecvSpeculativeConnect( mozilla::ipc::IPCResult NeckoParent::RecvHTMLDNSPrefetch( const nsAString& hostname, const bool& isHttps, - const OriginAttributes& aOriginAttributes, const uint32_t& flags) { + const OriginAttributes& aOriginAttributes, + const nsIDNSService::DNSFlags& flags) { dom::HTMLDNSPrefetch::Prefetch(hostname, isHttps, aOriginAttributes, flags); return IPC_OK(); } mozilla::ipc::IPCResult NeckoParent::RecvCancelHTMLDNSPrefetch( const nsAString& hostname, const bool& isHttps, - const OriginAttributes& aOriginAttributes, const uint32_t& flags, - const nsresult& reason) { + const OriginAttributes& aOriginAttributes, + const nsIDNSService::DNSFlags& flags, const nsresult& reason) { dom::HTMLDNSPrefetch::CancelPrefetch(hostname, isHttps, aOriginAttributes, flags, reason); return IPC_OK(); diff --git a/netwerk/ipc/NeckoParent.h b/netwerk/ipc/NeckoParent.h index 3811b712b273..f382779a1b62 100644 --- a/netwerk/ipc/NeckoParent.h +++ b/netwerk/ipc/NeckoParent.h @@ -116,22 +116,24 @@ class NeckoParent : public PNeckoParent { already_AddRefed AllocPDNSRequestParent( const nsACString& aHost, const nsACString& aTrrServer, const int32_t& aPort, const uint16_t& aType, - const OriginAttributes& aOriginAttributes, const uint32_t& aFlags); + const OriginAttributes& aOriginAttributes, + const nsIDNSService::DNSFlags& aFlags); virtual mozilla::ipc::IPCResult RecvPDNSRequestConstructor( PDNSRequestParent* actor, const nsACString& aHost, const nsACString& trrServer, const int32_t& aPort, const uint16_t& type, const OriginAttributes& aOriginAttributes, - const uint32_t& flags) override; + const nsIDNSService::DNSFlags& flags) override; mozilla::ipc::IPCResult RecvSpeculativeConnect(nsIURI* aURI, nsIPrincipal* aPrincipal, const bool& aAnonymous); mozilla::ipc::IPCResult RecvHTMLDNSPrefetch( const nsAString& hostname, const bool& isHttps, - const OriginAttributes& aOriginAttributes, const uint32_t& flags); + const OriginAttributes& aOriginAttributes, + const nsIDNSService::DNSFlags& flags); mozilla::ipc::IPCResult RecvCancelHTMLDNSPrefetch( const nsAString& hostname, const bool& isHttps, - const OriginAttributes& aOriginAttributes, const uint32_t& flags, - const nsresult& reason); + const OriginAttributes& aOriginAttributes, + const nsIDNSService::DNSFlags& flags, const nsresult& reason); PWebSocketEventListenerParent* AllocPWebSocketEventListenerParent( const uint64_t& aInnerWindowID); bool DeallocPWebSocketEventListenerParent(PWebSocketEventListenerParent*); diff --git a/netwerk/ipc/PNecko.ipdl b/netwerk/ipc/PNecko.ipdl index b760932b8224..9b89b79e836c 100644 --- a/netwerk/ipc/PNecko.ipdl +++ b/netwerk/ipc/PNecko.ipdl @@ -36,6 +36,7 @@ include "mozilla/dom/PermissionMessageUtils.h"; using mozilla::dom::MaybeDiscardedBrowsingContext from "mozilla/dom/BrowsingContext.h"; using class IPC::SerializedLoadContext from "SerializedLoadContext.h"; using mozilla::dom::TabId from "mozilla/dom/ipc/IdType.h"; +using nsIDNSService::DNSFlags from "nsIDNSService.h"; [RefCounted] using class nsIInputStream from "mozilla/ipc/IPCStreamUtils.h"; [RefCounted] using class nsIURI from "mozilla/ipc/URIUtils.h"; [RefCounted] using class nsIPrincipal from "nsIPrincipal.h"; @@ -83,7 +84,7 @@ parent: async PDNSRequest(nsCString hostName, nsCString trrServer, int32_t port, uint16_t type, OriginAttributes originAttributes, - uint32_t flags); + DNSFlags flags); async PDocumentChannel(MaybeDiscardedBrowsingContext browsingContext, DocumentChannelCreationArgs args); @@ -100,10 +101,10 @@ parent: async SpeculativeConnect(nsIURI uri, nsIPrincipal principal, bool anonymous); async HTMLDNSPrefetch(nsString hostname, bool isHttps, - OriginAttributes originAttributes, uint32_t flags); + OriginAttributes originAttributes, DNSFlags flags); async CancelHTMLDNSPrefetch(nsString hostname, bool isHttps, OriginAttributes originAttributes, - uint32_t flags, nsresult reason); + DNSFlags flags, nsresult reason); /** * channelId is used to establish a connection between redirect channels in diff --git a/netwerk/ipc/PSocketProcess.ipdl b/netwerk/ipc/PSocketProcess.ipdl index 24fd0974cb2f..40a559364e8c 100644 --- a/netwerk/ipc/PSocketProcess.ipdl +++ b/netwerk/ipc/PSocketProcess.ipdl @@ -45,6 +45,7 @@ using struct nsID from "nsID.h"; using mozilla::net::SocketInfo from "mozilla/net/DashboardTypes.h"; using mozilla::net::DNSCacheEntries from "mozilla/net/DashboardTypes.h"; using mozilla::net::HttpRetParams from "mozilla/net/DashboardTypes.h"; +using nsIDNSService::DNSFlags from "nsIDNSService.h"; #if defined(XP_WIN) [MoveOnly] using mozilla::UntrustedModulesData from "mozilla/UntrustedModulesData.h"; @@ -216,7 +217,7 @@ child: both: async PDNSRequest(nsCString hostName, nsCString trrServer, int32_t port, uint16_t type, OriginAttributes originAttributes, - uint32_t flags); + DNSFlags flags); }; } // namespace net diff --git a/netwerk/ipc/SocketProcessChild.cpp b/netwerk/ipc/SocketProcessChild.cpp index 3b79220c4409..97fccc35ccde 100644 --- a/netwerk/ipc/SocketProcessChild.cpp +++ b/netwerk/ipc/SocketProcessChild.cpp @@ -429,7 +429,7 @@ SocketProcessChild::AllocPAltSvcTransactionChild( already_AddRefed SocketProcessChild::AllocPDNSRequestChild( const nsACString& aHost, const nsACString& aTrrServer, const int32_t& aPort, const uint16_t& aType, const OriginAttributes& aOriginAttributes, - const uint32_t& aFlags) { + const nsIDNSService::DNSFlags& aFlags) { RefPtr handler = new DNSRequestHandler(); RefPtr actor = new DNSRequestChild(handler); return actor.forget(); @@ -438,7 +438,8 @@ already_AddRefed SocketProcessChild::AllocPDNSRequestChild( mozilla::ipc::IPCResult SocketProcessChild::RecvPDNSRequestConstructor( PDNSRequestChild* aActor, const nsACString& aHost, const nsACString& aTrrServer, const int32_t& aPort, const uint16_t& aType, - const OriginAttributes& aOriginAttributes, const uint32_t& aFlags) { + const OriginAttributes& aOriginAttributes, + const nsIDNSService::DNSFlags& aFlags) { RefPtr actor = static_cast(aActor); RefPtr handler = actor->GetDNSRequest()->AsDNSRequestHandler(); diff --git a/netwerk/ipc/SocketProcessChild.h b/netwerk/ipc/SocketProcessChild.h index 2bdd674142bf..2f01ae47acdc 100644 --- a/netwerk/ipc/SocketProcessChild.h +++ b/netwerk/ipc/SocketProcessChild.h @@ -91,12 +91,13 @@ class SocketProcessChild final : public PSocketProcessChild { already_AddRefed AllocPDNSRequestChild( const nsACString& aHost, const nsACString& aTrrServer, const int32_t& aPort, const uint16_t& aType, - const OriginAttributes& aOriginAttributes, const uint32_t& aFlags); + const OriginAttributes& aOriginAttributes, + const nsIDNSService::DNSFlags& aFlags); mozilla::ipc::IPCResult RecvPDNSRequestConstructor( PDNSRequestChild* aActor, const nsACString& aHost, const nsACString& aTrrServer, const int32_t& aPort, const uint16_t& aType, const OriginAttributes& aOriginAttributes, - const uint32_t& aFlags) override; + const nsIDNSService::DNSFlags& aFlags) override; void AddDataBridgeToMap(uint64_t aChannelId, BackgroundDataBridgeParent* aActor); diff --git a/netwerk/ipc/SocketProcessParent.cpp b/netwerk/ipc/SocketProcessParent.cpp index a321f7a2b66c..ec6e4b2bdac3 100644 --- a/netwerk/ipc/SocketProcessParent.cpp +++ b/netwerk/ipc/SocketProcessParent.cpp @@ -214,7 +214,7 @@ bool SocketProcessParent::DeallocPWebrtcTCPSocketParent( already_AddRefed SocketProcessParent::AllocPDNSRequestParent( const nsACString& aHost, const nsACString& aTrrServer, const int32_t& port, const uint16_t& aType, const OriginAttributes& aOriginAttributes, - const uint32_t& aFlags) { + const nsIDNSService::DNSFlags& aFlags) { RefPtr handler = new DNSRequestHandler(); RefPtr actor = new DNSRequestParent(handler); return actor.forget(); @@ -223,7 +223,8 @@ already_AddRefed SocketProcessParent::AllocPDNSRequestParent( mozilla::ipc::IPCResult SocketProcessParent::RecvPDNSRequestConstructor( PDNSRequestParent* aActor, const nsACString& aHost, const nsACString& aTrrServer, const int32_t& port, const uint16_t& aType, - const OriginAttributes& aOriginAttributes, const uint32_t& aFlags) { + const OriginAttributes& aOriginAttributes, + const nsIDNSService::DNSFlags& aFlags) { RefPtr actor = static_cast(aActor); RefPtr handler = actor->GetDNSRequest()->AsDNSRequestHandler(); diff --git a/netwerk/ipc/SocketProcessParent.h b/netwerk/ipc/SocketProcessParent.h index 9972d90e072d..206b6996111d 100644 --- a/netwerk/ipc/SocketProcessParent.h +++ b/netwerk/ipc/SocketProcessParent.h @@ -56,12 +56,13 @@ class SocketProcessParent final already_AddRefed AllocPDNSRequestParent( const nsACString& aHost, const nsACString& aTrrServer, const int32_t& port, const uint16_t& aType, - const OriginAttributes& aOriginAttributes, const uint32_t& aFlags); + const OriginAttributes& aOriginAttributes, + const nsIDNSService::DNSFlags& aFlags); virtual mozilla::ipc::IPCResult RecvPDNSRequestConstructor( PDNSRequestParent* actor, const nsACString& aHost, const nsACString& trrServer, const int32_t& port, const uint16_t& type, const OriginAttributes& aOriginAttributes, - const uint32_t& flags) override; + const nsIDNSService::DNSFlags& flags) override; void ActorDestroy(ActorDestroyReason aWhy) override; bool SendRequestMemoryReport(const uint32_t& aGeneration, diff --git a/netwerk/protocol/http/DnsAndConnectSocket.cpp b/netwerk/protocol/http/DnsAndConnectSocket.cpp index c1d01d45538a..7e3bab180f72 100644 --- a/netwerk/protocol/http/DnsAndConnectSocket.cpp +++ b/netwerk/protocol/http/DnsAndConnectSocket.cpp @@ -181,7 +181,7 @@ void DnsAndConnectSocket::CheckProxyConfig() { nsresult DnsAndConnectSocket::SetupDnsFlags(ConnectionEntry* ent) { LOG(("DnsAndConnectSocket::SetupDnsFlags [this=%p] ", this)); - uint32_t dnsFlags = 0; + nsIDNSService::DNSFlags dnsFlags = nsIDNSService::RESOLVE_DEFAULT_FLAGS; bool disableIpv6ForBackup = false; if (mCaps & NS_HTTP_REFRESH_DNS) { dnsFlags = nsIDNSService::RESOLVE_BYPASS_CACHE; diff --git a/netwerk/protocol/http/DnsAndConnectSocket.h b/netwerk/protocol/http/DnsAndConnectSocket.h index 5ddaa4525211..8409de3d080f 100644 --- a/netwerk/protocol/http/DnsAndConnectSocket.h +++ b/netwerk/protocol/http/DnsAndConnectSocket.h @@ -15,6 +15,7 @@ #include "nsICancelable.h" #include "nsIDNSListener.h" #include "nsIDNSRecord.h" +#include "nsIDNSService.h" #include "nsINamed.h" #include "nsITransport.h" #include "nsWeakReference.h" @@ -153,7 +154,7 @@ class DnsAndConnectSocket final : public nsIOutputStreamCallback, nsCString mHost; nsCOMPtr mDNSRequest; nsCOMPtr mDNSRecord; - uint32_t mDnsFlags = 0; + nsIDNSService::DNSFlags mDnsFlags = nsIDNSService::RESOLVE_DEFAULT_FLAGS; bool mRetryWithDifferentIPFamily = false; bool mResetFamilyPreference = false; bool mSkipDnsResolution = false; diff --git a/netwerk/protocol/http/HTTPSRecordResolver.cpp b/netwerk/protocol/http/HTTPSRecordResolver.cpp index b7ef60c7db10..9f899afb2ed6 100644 --- a/netwerk/protocol/http/HTTPSRecordResolver.cpp +++ b/netwerk/protocol/http/HTTPSRecordResolver.cpp @@ -41,7 +41,8 @@ nsresult HTTPSRecordResolver::FetchHTTPSRRInternal( return NS_ERROR_NOT_AVAILABLE; } - uint32_t flags = nsIDNSService::GetFlagsFromTRRMode(mConnInfo->GetTRRMode()); + nsIDNSService::DNSFlags flags = + nsIDNSService::GetFlagsFromTRRMode(mConnInfo->GetTRRMode()); if (mCaps & NS_HTTP_REFRESH_DNS) { flags |= nsIDNSService::RESOLVE_BYPASS_CACHE; } @@ -94,7 +95,7 @@ void HTTPSRecordResolver::PrefetchAddrRecord(const nsACString& aTargetName, return; } - uint32_t flags = nsIDNSService::GetFlagsFromTRRMode( + nsIDNSService::DNSFlags flags = nsIDNSService::GetFlagsFromTRRMode( mTransaction->ConnectionInfo()->GetTRRMode()); if (aRefreshDNS) { flags |= nsIDNSService::RESOLVE_BYPASS_CACHE; diff --git a/netwerk/protocol/websocket/WebSocketChannel.cpp b/netwerk/protocol/websocket/WebSocketChannel.cpp index 8a703eba4280..5223d65aa923 100644 --- a/netwerk/protocol/websocket/WebSocketChannel.cpp +++ b/netwerk/protocol/websocket/WebSocketChannel.cpp @@ -2855,9 +2855,10 @@ nsresult WebSocketChannel::DoAdmissionDNS() { NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr main = GetMainThreadEventTarget(); nsCOMPtr cancelable; - rv = dns->AsyncResolveNative( - hostName, nsIDNSService::RESOLVE_TYPE_DEFAULT, 0, nullptr, this, main, - mLoadInfo->GetOriginAttributes(), getter_AddRefs(cancelable)); + rv = dns->AsyncResolveNative(hostName, nsIDNSService::RESOLVE_TYPE_DEFAULT, + nsIDNSService::RESOLVE_DEFAULT_FLAGS, nullptr, + this, main, mLoadInfo->GetOriginAttributes(), + getter_AddRefs(cancelable)); if (NS_FAILED(rv)) { return rv; } diff --git a/widget/android/WebExecutorSupport.cpp b/widget/android/WebExecutorSupport.cpp index 52f93f1ace92..33f7cc5c1b9f 100644 --- a/widget/android/WebExecutorSupport.cpp +++ b/widget/android/WebExecutorSupport.cpp @@ -442,8 +442,9 @@ static nsresult ResolveHost(nsCString& host, java::GeckoResult::Param result) { nsCOMPtr cancelable; RefPtr listener = new DNSListener(host, result); - rv = dns->AsyncResolveNative(host, nsIDNSService::RESOLVE_TYPE_DEFAULT, 0, - nullptr, listener, nullptr /* aListenerTarget */, + rv = dns->AsyncResolveNative(host, nsIDNSService::RESOLVE_TYPE_DEFAULT, + nsIDNSService::RESOLVE_DEFAULT_FLAGS, nullptr, + listener, nullptr /* aListenerTarget */, OriginAttributes(), getter_AddRefs(cancelable)); return rv; }