/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set sw=2 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/. */ #define ALLOW_LATE_HTTPLOG_H_INCLUDE 1 #include "base/basictypes.h" #include "nsCOMPtr.h" #include "nsIClassInfoImpl.h" #include "mozilla/Components.h" #include "mozilla/ModuleUtils.h" #include "nscore.h" #include "nsSimpleURI.h" #include "nsLoadGroup.h" #include "nsMimeTypes.h" #include "nsDNSPrefetch.h" #include "nsXULAppAPI.h" #include "nsCategoryCache.h" #include "nsIContentSniffer.h" #include "nsStandardURL.h" #include "mozilla/net/BackgroundChannelRegistrar.h" #include "mozilla/net/NeckoChild.h" #include "RedirectChannelRegistrar.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 "nsHttpHandler.h" #include "Http2Compression.h" #undef LOG #undef LOG_ENABLED #include "nsHttpAuthManager.h" #include "nsHttpActivityDistributor.h" #include "ThrottleQueue.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(); } #include "WebSocketChannel.h" #include "WebSocketChannelChild.h" namespace mozilla::net { static BaseWebSocketChannel* WebSocketChannelConstructor(bool aSecure) { if (IsNeckoChild()) { return new WebSocketChannelChild(aSecure); } if (aSecure) { return new WebSocketSSLChannel; } return new WebSocketChannel; } #define WEB_SOCKET_HANDLER_CONSTRUCTOR(type, secure) \ nsresult type##Constructor(REFNSIID aIID, void** aResult) { \ RefPtr inst; \ \ *aResult = nullptr; \ inst = WebSocketChannelConstructor(secure); \ return inst->QueryInterface(aIID, aResult); \ } WEB_SOCKET_HANDLER_CONSTRUCTOR(WebSocketChannel, false) WEB_SOCKET_HANDLER_CONSTRUCTOR(WebSocketSSLChannel, true) #undef WEB_SOCKET_HANDLER_CONSTRUCTOR } // namespace mozilla::net /////////////////////////////////////////////////////////////////////////////// #include "nsStreamConverterService.h" #include "nsMultiMixedConv.h" #include "nsHTTPCompressConv.h" #include "mozTXTToHTMLConv.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(); #ifdef XP_MACOSX net_ShutdownURLHelperOSX(); #endif // Release DNS service reference. nsDNSPrefetch::Shutdown(); // Release the Websocket Admission Manager mozilla::net::WebSocketChannel::Shutdown(); mozilla::net::Http2CompressionCleanup(); mozilla::net::RedirectChannelRegistrar::Shutdown(); mozilla::net::BackgroundChannelRegistrar::Shutdown(); #ifdef MOZ_AUTH_EXTENSION nsAuthGSSAPI::Shutdown(); #endif delete gNetSniffers; gNetSniffers = nullptr; delete gDataSniffers; gDataSniffers = nullptr; delete gORBSniffers; gORBSniffers = nullptr; delete gNetAndORBSniffers; gNetAndORBSniffers = nullptr; }