author | Kershaw Chang <kechang@mozilla.com> |
Wed, 17 Feb 2016 22:29:00 +0100 | |
changeset 284718 | 0712c88206ab71951eeca3552ae7665dfdca7005 |
parent 284717 | 73b1336a0b5d78e9fd433607ec564314d2f8d4e3 |
child 284719 | c7be30a5321ea3b9c620d221c088698d82c31042 |
push id | 30013 |
push user | cbook@mozilla.com |
push date | Fri, 19 Feb 2016 11:02:40 +0000 |
treeherder | mozilla-central@a87d6d52c1fc [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | bagder |
bugs | 1239955 |
milestone | 47.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/netwerk/base/nsIOService.cpp +++ b/netwerk/base/nsIOService.cpp @@ -1016,32 +1016,28 @@ nsIOService::SetOffline(bool offline) mOffline = true; // indicate we're trying to shutdown // don't care if notifications fail if (observerService) observerService->NotifyObservers(subject, NS_IOSERVICE_GOING_OFFLINE_TOPIC, offlineString.get()); - if (mDNSService) - mDNSService->SetOffline(true); - if (mSocketTransportService) mSocketTransportService->SetOffline(true); mLastOfflineStateChange = PR_IntervalNow(); if (observerService) observerService->NotifyObservers(subject, NS_IOSERVICE_OFFLINE_STATUS_TOPIC, offlineString.get()); } else if (!offline && mOffline) { // go online if (mDNSService) { - mDNSService->SetOffline(false); DebugOnly<nsresult> rv = mDNSService->Init(); NS_ASSERTION(NS_SUCCEEDED(rv), "DNS service init failed"); } InitializeSocketTransportService(); mOffline = false; // indicate success only AFTER we've // brought up the services // trigger a PAC reload when we come back online
--- a/netwerk/dns/ChildDNSService.cpp +++ b/netwerk/dns/ChildDNSService.cpp @@ -1,19 +1,21 @@ /* 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/. */ #include "mozilla/net/ChildDNSService.h" #include "nsIDNSListener.h" +#include "nsIIOService.h" #include "nsIThread.h" #include "nsThreadUtils.h" #include "nsIXPConnect.h" #include "nsIPrefService.h" #include "nsIProtocolProxyService.h" +#include "nsNetCID.h" #include "mozilla/net/NeckoChild.h" #include "mozilla/net/DNSListenerProxy.h" #include "nsServiceManagerUtils.h" namespace mozilla { namespace net { //----------------------------------------------------------------------------- @@ -37,17 +39,16 @@ ChildDNSService* ChildDNSService::GetSin NS_IMPL_ISUPPORTS(ChildDNSService, nsIDNSService, nsPIDNSService, nsIObserver) ChildDNSService::ChildDNSService() : mFirstTime(true) - , mOffline(false) , mDisablePrefetch(false) , mPendingRequestsLock("DNSPendingRequestsLock") { MOZ_ASSERT(IsNeckoChild()); } ChildDNSService::~ChildDNSService() { @@ -98,17 +99,17 @@ ChildDNSService::AsyncResolveExtended(co return NS_ERROR_DNS_LOOKUP_QUEUE_FULL; } // We need original flags for the pending requests hash. uint32_t originalFlags = flags; // Support apps being 'offline' even if parent is not: avoids DNS traffic by // apps that have been told they are offline. - if (mOffline) { + if (GetOffline()) { flags |= RESOLVE_OFFLINE; } // We need original listener for the pending requests hash. nsIDNSListener *originalListener = listener; // make sure JS callers get notification on the main thread nsCOMPtr<nsIEventTarget> target = target_; @@ -293,28 +294,25 @@ ChildDNSService::GetPrefetchEnabled(bool NS_IMETHODIMP ChildDNSService::SetPrefetchEnabled(bool inVal) { mDisablePrefetch = !inVal; return NS_OK; } -NS_IMETHODIMP -ChildDNSService::GetOffline(bool* aResult) +bool +ChildDNSService::GetOffline() const { - *aResult = mOffline; - return NS_OK; -} - -NS_IMETHODIMP -ChildDNSService::SetOffline(bool value) -{ - mOffline = value; - return NS_OK; + bool offline = false; + nsCOMPtr<nsIIOService> io = do_GetService(NS_IOSERVICE_CONTRACTID); + if (io) { + io->GetOffline(&offline); + } + return offline; } //----------------------------------------------------------------------------- // ChildDNSService::nsIObserver //----------------------------------------------------------------------------- NS_IMETHODIMP ChildDNSService::Observe(nsISupports *subject, const char *topic,
--- a/netwerk/dns/ChildDNSService.h +++ b/netwerk/dns/ChildDNSService.h @@ -30,27 +30,28 @@ public: NS_DECL_NSIDNSSERVICE NS_DECL_NSIOBSERVER ChildDNSService(); static ChildDNSService* GetSingleton(); void NotifyRequestDone(DNSRequestChild *aDnsRequest); + + bool GetOffline() const; private: virtual ~ChildDNSService(); void MOZ_ALWAYS_INLINE GetDNSRecordHashKey(const nsACString &aHost, uint32_t aFlags, const nsACString &aNetworkInterface, nsIDNSListener* aListener, nsACString &aHashKey); bool mFirstTime; - bool mOffline; bool mDisablePrefetch; // We need to remember pending dns requests to be able to cancel them. nsClassHashtable<nsCStringHashKey, nsTArray<RefPtr<DNSRequestChild>>> mPendingRequests; Mutex mPendingRequestsLock; }; } // namespace net
--- a/netwerk/dns/nsDNSService2.cpp +++ b/netwerk/dns/nsDNSService2.cpp @@ -478,17 +478,16 @@ private: //----------------------------------------------------------------------------- nsDNSService::nsDNSService() : mLock("nsDNSServer.mLock") , mDisableIPv6(false) , mDisablePrefetch(false) , mFirstTime(true) - , mOffline(false) , mNotifyResolution(false) , mOfflineLocalhost(false) { } nsDNSService::~nsDNSService() { } @@ -672,28 +671,25 @@ nsDNSService::Shutdown() if (observerService) { observerService->RemoveObserver(this, NS_NETWORK_LINK_TOPIC); observerService->RemoveObserver(this, "last-pb-context-exited"); } return NS_OK; } -NS_IMETHODIMP -nsDNSService::GetOffline(bool *offline) +bool +nsDNSService::GetOffline() const { - *offline = mOffline; - return NS_OK; -} - -NS_IMETHODIMP -nsDNSService::SetOffline(bool offline) -{ - mOffline = offline; - return NS_OK; + bool offline = false; + nsCOMPtr<nsIIOService> io = do_GetService(NS_IOSERVICE_CONTRACTID); + if (io) { + io->GetOffline(&offline); + } + return offline; } NS_IMETHODIMP nsDNSService::GetPrefetchEnabled(bool *outVal) { MutexAutoLock lock(mLock); *outVal = !mDisablePrefetch; return NS_OK; @@ -779,17 +775,17 @@ nsDNSService::AsyncResolveExtended(const return NS_ERROR_OFFLINE; nsCString hostname; nsresult rv = PreprocessHostname(localDomain, aHostname, idn, hostname); if (NS_FAILED(rv)) { return rv; } - if (mOffline && + if (GetOffline() && (!mOfflineLocalhost || !hostname.LowerCaseEqualsASCII("localhost"))) { flags |= RESOLVE_OFFLINE; } // make sure JS callers get notification on the main thread nsCOMPtr<nsIXPConnectWrappedJS> wrappedListener = do_QueryInterface(listener); if (wrappedListener && !target) { nsCOMPtr<nsIThread> mainThread; @@ -894,17 +890,17 @@ nsDNSService::Resolve(const nsACString & NS_ENSURE_TRUE(res, NS_ERROR_OFFLINE); nsCString hostname; nsresult rv = PreprocessHostname(localDomain, aHostname, idn, hostname); if (NS_FAILED(rv)) { return rv; } - if (mOffline && + if (GetOffline() && (!mOfflineLocalhost || !hostname.LowerCaseEqualsASCII("localhost"))) { flags |= RESOLVE_OFFLINE; } // // sync resolve: since the host resolver only works asynchronously, we need // to use a mutex and a condvar to wait for the result. however, since the // result may be in the resolvers cache, we might get called back recursively
--- a/netwerk/dns/nsDNSService2.h +++ b/netwerk/dns/nsDNSService2.h @@ -31,16 +31,18 @@ public: NS_DECL_NSIMEMORYREPORTER nsDNSService(); static nsIDNSService* GetXPCOMSingleton(); size_t SizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) const; + bool GetOffline() const; + private: ~nsDNSService(); static nsDNSService* GetSingleton(); uint16_t GetAFForLookup(const nsACString &host, uint32_t flags); nsresult PreprocessHostname(bool aLocalDomain, @@ -57,15 +59,14 @@ private: // 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. nsAdoptingCString mIPv4OnlyDomains; bool mDisableIPv6; bool mDisablePrefetch; bool mBlockDotOnion; bool mFirstTime; - bool mOffline; bool mNotifyResolution; bool mOfflineLocalhost; nsTHashtable<nsCStringHashKey> mLocalDomains; }; #endif //nsDNSService2_h__
--- a/netwerk/dns/nsPIDNSService.idl +++ b/netwerk/dns/nsPIDNSService.idl @@ -5,17 +5,17 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "nsIDNSService.idl" /** * This is a private interface used by the internals of the networking library. * It will never be frozen. Do not use it in external code. */ -[scriptable, uuid(6b16fb1f-5709-4c94-a89f-a22be873c54d)] +[scriptable, uuid(24e598fd-7b1a-436c-9154-14d8b38df8a5)] interface nsPIDNSService : nsIDNSService { /** * called to initialize the DNS service. */ void init(); /** @@ -26,14 +26,9 @@ interface nsPIDNSService : nsIDNSService * this method. */ void shutdown(); /** * Whether or not DNS prefetching (aka RESOLVE_SPECULATE) is enabled */ attribute boolean prefetchEnabled; - - /** - * @return whether the DNS service is offline. - */ - attribute boolean offline; };