/* 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/. */ #define ALLOW_LATE_HTTPLOG_H_INCLUDE 1 #include "base/basictypes.h" #include "mozilla/Components.h" #include "mozilla/ModuleUtils.h" #include "mozilla/net/BackgroundChannelRegistrar.h" #include "mozilla/net/NeckoChild.h" #include "nsCOMPtr.h" #include "nsCategoryCache.h" #include "nsDNSPrefetch.h" #include "nsIClassInfoImpl.h" #include "nsIContentSniffer.h" #include "nsLoadGroup.h" #include "nsMimeTypes.h" #include "nsSimpleURI.h" #include "nsStandardURL.h" #include "nsXULAppAPI.h" #include "nscore.h" #ifdef MOZ_AUTH_EXTENSION # include "nsAuthGSSAPI.h" #endif #include "nsNetCID.h" #if defined(XP_MACOSX) || defined(XP_WIN) || defined(XP_LINUX) # define BUILD_NETWORK_INFO_SERVICE 1 #endif using namespace mozilla; using ContentSnifferCache = nsCategoryCache; ContentSnifferCache* gNetSniffers = nullptr; ContentSnifferCache* gDataSniffers = nullptr; ContentSnifferCache* gORBSniffers = nullptr; ContentSnifferCache* gNetAndORBSniffers = nullptr; #define static using nsLoadGroup = mozilla::net::nsLoadGroup; NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsLoadGroup, Init) #undef static /////////////////////////////////////////////////////////////////////////////// // protocols /////////////////////////////////////////////////////////////////////////////// // http/https #include "Http2Compression.h" #include "nsHttpHandler.h" #undef LOG #undef LOG_ENABLED #include "ThrottleQueue.h" #include "nsHttpActivityDistributor.h" #include "nsHttpAuthManager.h" #undef LOG #undef LOG_ENABLED NS_IMPL_COMPONENT_FACTORY(net::nsHttpHandler) { return net::nsHttpHandler::GetInstance().downcast(); } NS_IMPL_COMPONENT_FACTORY(net::nsHttpsHandler) { auto handler = MakeRefPtr(); if (NS_FAILED(handler->Init())) { return nullptr; } return handler.forget().downcast(); } // For WebSocketChannel::Shutdown() in nsNetShutdown(). #include "WebSocketChannel.h" /////////////////////////////////////////////////////////////////////////////// #include "mozTXTToHTMLConv.h" #include "nsHTTPCompressConv.h" #include "nsMultiMixedConv.h" #include "nsStreamConverterService.h" #include "nsUnknownDecoder.h" /////////////////////////////////////////////////////////////////////////////// #include "nsIndexedToHTML.h" nsresult NS_NewMultiMixedConv(nsMultiMixedConv** result); nsresult MOZ_NewTXTToHTMLConv(mozTXTToHTMLConv** result); nsresult NS_NewHTTPCompressConv(mozilla::net::nsHTTPCompressConv** result); nsresult NS_NewStreamConv(nsStreamConverterService** aStreamConv); nsresult CreateNewStreamConvServiceFactory(REFNSIID aIID, void** aResult) { if (!aResult) { return NS_ERROR_INVALID_POINTER; } RefPtr inst; nsresult rv = NS_NewStreamConv(getter_AddRefs(inst)); if (NS_FAILED(rv)) { *aResult = nullptr; return rv; } rv = inst->QueryInterface(aIID, aResult); if (NS_FAILED(rv)) { *aResult = nullptr; } return rv; } nsresult CreateNewMultiMixedConvFactory(REFNSIID aIID, void** aResult) { if (!aResult) { return NS_ERROR_INVALID_POINTER; } RefPtr inst; nsresult rv = NS_NewMultiMixedConv(getter_AddRefs(inst)); if (NS_FAILED(rv)) { *aResult = nullptr; return rv; } rv = inst->QueryInterface(aIID, aResult); if (NS_FAILED(rv)) { *aResult = nullptr; } return rv; } nsresult CreateNewTXTToHTMLConvFactory(REFNSIID aIID, void** aResult) { if (!aResult) { return NS_ERROR_INVALID_POINTER; } RefPtr inst; nsresult rv = MOZ_NewTXTToHTMLConv(getter_AddRefs(inst)); if (NS_FAILED(rv)) { *aResult = nullptr; return rv; } rv = inst->QueryInterface(aIID, aResult); if (NS_FAILED(rv)) { *aResult = nullptr; } return rv; } nsresult CreateNewHTTPCompressConvFactory(REFNSIID aIID, void** aResult) { if (!aResult) { return NS_ERROR_INVALID_POINTER; } RefPtr inst; nsresult rv = NS_NewHTTPCompressConv(getter_AddRefs(inst)); if (NS_FAILED(rv)) { *aResult = nullptr; return rv; } rv = inst->QueryInterface(aIID, aResult); if (NS_FAILED(rv)) { *aResult = nullptr; } return rv; } nsresult CreateNewUnknownDecoderFactory(REFNSIID aIID, void** aResult) { if (!aResult) { return NS_ERROR_NULL_POINTER; } *aResult = nullptr; RefPtr inst = new nsUnknownDecoder(); return inst->QueryInterface(aIID, aResult); } nsresult CreateNewBinaryDetectorFactory(REFNSIID aIID, void** aResult) { if (!aResult) { return NS_ERROR_NULL_POINTER; } *aResult = nullptr; RefPtr inst = new nsBinaryDetector(); return inst->QueryInterface(aIID, aResult); } /////////////////////////////////////////////////////////////////////////////// // Module implementation for the net library // Net module startup hook nsresult nsNetStartup() { mozilla::net::nsStandardURL::InitGlobalObjects(); return NS_OK; } // Net module shutdown hook void nsNetShutdown() { // Release the url parser that the stdurl is holding. mozilla::net::nsStandardURL::ShutdownGlobalObjects(); // Release global state used by the URL helper module. net_ShutdownURLHelper(); // Release DNS service reference. nsDNSPrefetch::Shutdown(); // Release the Websocket Admission Manager mozilla::net::WebSocketChannel::Shutdown(); mozilla::net::Http2CompressionCleanup(); #ifdef MOZ_AUTH_EXTENSION nsAuthGSSAPI::Shutdown(); #endif delete gNetSniffers; gNetSniffers = nullptr; delete gDataSniffers; gDataSniffers = nullptr; delete gORBSniffers; gORBSniffers = nullptr; delete gNetAndORBSniffers; gNetAndORBSniffers = nullptr; }