mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 08:15:31 +00:00
e443c66c37
The DNS service was shutdown and restarted again in several scenarios, for example when one of its prefs changed and by nsIOService when going offline/online. The DNSService restart dragged the resolver, TRRService and others with it and they too were thus restarted. Most notably this hurt TRR resolving, as the restart caused short gaps in time when there was no TRRService available and nsHostResolver defaults to TRR Mode "native" if there's no TRRservice up, causing the name resolver to occasionally use the wrong or unexpected resolver even though TRR is enabled. The resolver restart also flushed the DNS cache which is now avoided. It is also a performance gain. MozReview-Commit-ID: pp4Y8bNQJk --HG-- extra : rebase_source : 9e3b3e6c0df16b8ca6287d8045f594026ae9ad6d
97 lines
3.5 KiB
C++
97 lines
3.5 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/* vim: set sw=4 ts=8 et tw=80 : */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef nsDNSService2_h__
|
|
#define nsDNSService2_h__
|
|
|
|
#include "nsPIDNSService.h"
|
|
#include "nsIIDNService.h"
|
|
#include "nsIMemoryReporter.h"
|
|
#include "nsIObserver.h"
|
|
#include "nsHostResolver.h"
|
|
#include "nsAutoPtr.h"
|
|
#include "nsString.h"
|
|
#include "nsTHashtable.h"
|
|
#include "nsHashKeys.h"
|
|
#include "mozilla/Mutex.h"
|
|
#include "mozilla/Attributes.h"
|
|
#include "TRRService.h"
|
|
|
|
class nsAuthSSPI;
|
|
|
|
class nsDNSService final : public nsPIDNSService
|
|
, public nsIObserver
|
|
, public nsIMemoryReporter
|
|
{
|
|
public:
|
|
NS_DECL_THREADSAFE_ISUPPORTS
|
|
NS_DECL_NSPIDNSSERVICE
|
|
NS_DECL_NSIDNSSERVICE
|
|
NS_DECL_NSIOBSERVER
|
|
NS_DECL_NSIMEMORYREPORTER
|
|
|
|
nsDNSService();
|
|
|
|
static already_AddRefed<nsIDNSService> GetXPCOMSingleton();
|
|
|
|
size_t SizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) const;
|
|
|
|
bool GetOffline() const;
|
|
|
|
protected:
|
|
friend class nsAuthSSPI;
|
|
|
|
nsresult DeprecatedSyncResolve(const nsACString &aHostname,
|
|
uint32_t flags,
|
|
const mozilla::OriginAttributes &aOriginAttributes,
|
|
nsIDNSRecord **result);
|
|
private:
|
|
~nsDNSService();
|
|
|
|
nsresult ReadPrefs(const char *name);
|
|
static already_AddRefed<nsDNSService> GetSingleton();
|
|
|
|
uint16_t GetAFForLookup(const nsACString &host, uint32_t flags);
|
|
|
|
nsresult PreprocessHostname(bool aLocalDomain,
|
|
const nsACString &aInput,
|
|
nsIIDNService *aIDN,
|
|
nsACString &aACE);
|
|
|
|
nsresult ResolveInternal(const nsACString &aHostname,
|
|
uint32_t flags,
|
|
const mozilla::OriginAttributes &aOriginAttributes,
|
|
nsIDNSRecord **result);
|
|
|
|
RefPtr<nsHostResolver> mResolver;
|
|
nsCOMPtr<nsIIDNService> mIDN;
|
|
|
|
// mLock protects access to mResolver and mIPv4OnlyDomains
|
|
mozilla::Mutex 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;
|
|
nsCString mForceResolve;
|
|
bool mDisableIPv6;
|
|
bool mDisablePrefetch;
|
|
bool mBlockDotOnion;
|
|
bool mNotifyResolution;
|
|
bool mOfflineLocalhost;
|
|
bool mForceResolveOn;
|
|
uint32_t mProxyType;
|
|
nsTHashtable<nsCStringHashKey> mLocalDomains;
|
|
RefPtr<mozilla::net::TRRService> mTrrService;
|
|
|
|
uint32_t mResCacheEntries;
|
|
uint32_t mResCacheExpiration;
|
|
uint32_t mResCacheGrace;
|
|
bool mResolverPrefsUpdated;
|
|
};
|
|
|
|
#endif //nsDNSService2_h__
|