michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- michael@0: * michael@0: * This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "mozilla/ModuleUtils.h" michael@0: #include "nsDocShellCID.h" michael@0: michael@0: #include "nsDocShell.h" michael@0: #include "nsDefaultURIFixup.h" michael@0: #include "nsWebNavigationInfo.h" michael@0: #include "nsAboutRedirector.h" michael@0: #include "nsCDefaultURIFixup.h" michael@0: michael@0: // uriloader michael@0: #include "nsURILoader.h" michael@0: #include "nsDocLoader.h" michael@0: #include "nsOSHelperAppService.h" michael@0: #include "nsExternalProtocolHandler.h" michael@0: #include "nsPrefetchService.h" michael@0: #include "nsOfflineCacheUpdate.h" michael@0: #include "nsLocalHandlerApp.h" michael@0: #ifdef MOZ_ENABLE_DBUS michael@0: #include "nsDBusHandlerApp.h" michael@0: #endif michael@0: #if defined(MOZ_WIDGET_ANDROID) || defined(MOZ_ENABLE_MEEGOTOUCHSHARE) michael@0: #include "nsExternalSharingAppService.h" michael@0: #endif michael@0: #if defined(MOZ_WIDGET_ANDROID) michael@0: #include "nsExternalURLHandlerService.h" michael@0: #endif michael@0: michael@0: // session history michael@0: #include "nsSHEntry.h" michael@0: #include "nsSHEntryShared.h" michael@0: #include "nsSHistory.h" michael@0: #include "nsSHTransaction.h" michael@0: michael@0: // download history michael@0: #include "nsDownloadHistory.h" michael@0: michael@0: static bool gInitialized = false; michael@0: michael@0: // The one time initialization for this module michael@0: static nsresult michael@0: Initialize() michael@0: { michael@0: NS_PRECONDITION(!gInitialized, "docshell module already initialized"); michael@0: if (gInitialized) { michael@0: return NS_OK; michael@0: } michael@0: gInitialized = true; michael@0: michael@0: nsresult rv = nsSHistory::Startup(); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: michael@0: nsSHEntryShared::Startup(); michael@0: return NS_OK; michael@0: } michael@0: michael@0: static void michael@0: Shutdown() michael@0: { michael@0: nsSHistory::Shutdown(); michael@0: nsSHEntryShared::Shutdown(); michael@0: gInitialized = false; michael@0: } michael@0: michael@0: // docshell michael@0: NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsDocShell, Init) michael@0: NS_GENERIC_FACTORY_CONSTRUCTOR(nsDefaultURIFixup) michael@0: NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsWebNavigationInfo, Init) michael@0: michael@0: // uriloader michael@0: NS_GENERIC_FACTORY_CONSTRUCTOR(nsURILoader) michael@0: NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsDocLoader, Init) michael@0: NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsOSHelperAppService, Init) michael@0: NS_GENERIC_FACTORY_CONSTRUCTOR(nsExternalProtocolHandler) michael@0: NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrefetchService, Init) michael@0: NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsOfflineCacheUpdateService, michael@0: nsOfflineCacheUpdateService::GetInstance) michael@0: NS_GENERIC_FACTORY_CONSTRUCTOR(nsOfflineCacheUpdate) michael@0: NS_GENERIC_FACTORY_CONSTRUCTOR(PlatformLocalHandlerApp_t) michael@0: #ifdef MOZ_ENABLE_DBUS michael@0: NS_GENERIC_FACTORY_CONSTRUCTOR(nsDBusHandlerApp) michael@0: #endif michael@0: #if defined(MOZ_WIDGET_ANDROID) || defined(MOZ_ENABLE_MEEGOTOUCHSHARE) michael@0: NS_GENERIC_FACTORY_CONSTRUCTOR(nsExternalSharingAppService) michael@0: #endif michael@0: #if defined(MOZ_WIDGET_ANDROID) michael@0: NS_GENERIC_FACTORY_CONSTRUCTOR(nsExternalURLHandlerService) michael@0: #endif michael@0: michael@0: // session history michael@0: NS_GENERIC_FACTORY_CONSTRUCTOR(nsSHEntry) michael@0: NS_GENERIC_FACTORY_CONSTRUCTOR(nsSHTransaction) michael@0: NS_GENERIC_FACTORY_CONSTRUCTOR(nsSHistory) michael@0: michael@0: // download history michael@0: NS_GENERIC_FACTORY_CONSTRUCTOR(nsDownloadHistory) michael@0: michael@0: NS_DEFINE_NAMED_CID(NS_DOCSHELL_CID); michael@0: NS_DEFINE_NAMED_CID(NS_DEFAULTURIFIXUP_CID); michael@0: NS_DEFINE_NAMED_CID(NS_WEBNAVIGATION_INFO_CID); michael@0: NS_DEFINE_NAMED_CID(NS_ABOUT_REDIRECTOR_MODULE_CID); michael@0: NS_DEFINE_NAMED_CID(NS_URI_LOADER_CID); michael@0: NS_DEFINE_NAMED_CID(NS_DOCUMENTLOADER_SERVICE_CID); michael@0: NS_DEFINE_NAMED_CID(NS_EXTERNALHELPERAPPSERVICE_CID); michael@0: NS_DEFINE_NAMED_CID(NS_EXTERNALPROTOCOLHANDLER_CID); michael@0: NS_DEFINE_NAMED_CID(NS_PREFETCHSERVICE_CID); michael@0: NS_DEFINE_NAMED_CID(NS_OFFLINECACHEUPDATESERVICE_CID); michael@0: NS_DEFINE_NAMED_CID(NS_OFFLINECACHEUPDATE_CID); michael@0: NS_DEFINE_NAMED_CID(NS_LOCALHANDLERAPP_CID); michael@0: #ifdef MOZ_ENABLE_DBUS michael@0: NS_DEFINE_NAMED_CID(NS_DBUSHANDLERAPP_CID); michael@0: #endif michael@0: #if defined(MOZ_WIDGET_ANDROID) || defined(MOZ_ENABLE_MEEGOTOUCHSHARE) michael@0: NS_DEFINE_NAMED_CID(NS_EXTERNALSHARINGAPPSERVICE_CID); michael@0: #endif michael@0: #if defined(MOZ_WIDGET_ANDROID) michael@0: NS_DEFINE_NAMED_CID(NS_EXTERNALURLHANDLERSERVICE_CID); michael@0: #endif michael@0: NS_DEFINE_NAMED_CID(NS_SHENTRY_CID); michael@0: NS_DEFINE_NAMED_CID(NS_SHTRANSACTION_CID); michael@0: NS_DEFINE_NAMED_CID(NS_SHISTORY_CID); michael@0: NS_DEFINE_NAMED_CID(NS_SHISTORY_INTERNAL_CID); michael@0: NS_DEFINE_NAMED_CID(NS_DOWNLOADHISTORY_CID); michael@0: michael@0: michael@0: const mozilla::Module::CIDEntry kDocShellCIDs[] = { michael@0: { &kNS_DOCSHELL_CID, false, nullptr, nsDocShellConstructor }, michael@0: { &kNS_DEFAULTURIFIXUP_CID, false, nullptr, nsDefaultURIFixupConstructor }, michael@0: { &kNS_WEBNAVIGATION_INFO_CID, false, nullptr, nsWebNavigationInfoConstructor }, michael@0: { &kNS_ABOUT_REDIRECTOR_MODULE_CID, false, nullptr, nsAboutRedirector::Create }, michael@0: { &kNS_URI_LOADER_CID, false, nullptr, nsURILoaderConstructor }, michael@0: { &kNS_DOCUMENTLOADER_SERVICE_CID, false, nullptr, nsDocLoaderConstructor }, michael@0: { &kNS_EXTERNALHELPERAPPSERVICE_CID, false, nullptr, nsOSHelperAppServiceConstructor }, michael@0: { &kNS_EXTERNALPROTOCOLHANDLER_CID, false, nullptr, nsExternalProtocolHandlerConstructor }, michael@0: { &kNS_PREFETCHSERVICE_CID, false, nullptr, nsPrefetchServiceConstructor }, michael@0: { &kNS_OFFLINECACHEUPDATESERVICE_CID, false, nullptr, nsOfflineCacheUpdateServiceConstructor }, michael@0: { &kNS_OFFLINECACHEUPDATE_CID, false, nullptr, nsOfflineCacheUpdateConstructor }, michael@0: { &kNS_LOCALHANDLERAPP_CID, false, nullptr, PlatformLocalHandlerApp_tConstructor }, michael@0: #ifdef MOZ_ENABLE_DBUS michael@0: { &kNS_DBUSHANDLERAPP_CID, false, nullptr, nsDBusHandlerAppConstructor }, michael@0: #endif michael@0: #if defined(MOZ_WIDGET_ANDROID) || defined(MOZ_ENABLE_MEEGOTOUCHSHARE) michael@0: { &kNS_EXTERNALSHARINGAPPSERVICE_CID, false, nullptr, nsExternalSharingAppServiceConstructor }, michael@0: #endif michael@0: #if defined(MOZ_WIDGET_ANDROID) michael@0: { &kNS_EXTERNALURLHANDLERSERVICE_CID, false, nullptr, nsExternalURLHandlerServiceConstructor }, michael@0: #endif michael@0: { &kNS_SHENTRY_CID, false, nullptr, nsSHEntryConstructor }, michael@0: { &kNS_SHTRANSACTION_CID, false, nullptr, nsSHTransactionConstructor }, michael@0: { &kNS_SHISTORY_CID, false, nullptr, nsSHistoryConstructor }, michael@0: { &kNS_SHISTORY_INTERNAL_CID, false, nullptr, nsSHistoryConstructor }, michael@0: { &kNS_DOWNLOADHISTORY_CID, false, nullptr, nsDownloadHistoryConstructor }, michael@0: { nullptr } michael@0: }; michael@0: michael@0: const mozilla::Module::ContractIDEntry kDocShellContracts[] = { michael@0: { "@mozilla.org/docshell;1", &kNS_DOCSHELL_CID }, michael@0: { NS_URIFIXUP_CONTRACTID, &kNS_DEFAULTURIFIXUP_CID }, michael@0: { NS_WEBNAVIGATION_INFO_CONTRACTID, &kNS_WEBNAVIGATION_INFO_CID }, michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "about", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "config", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: #ifdef MOZ_CRASHREPORTER michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "crashes", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: #endif michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "credits", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "plugins", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "mozilla", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "logo", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "buildconfig", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "license", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "neterror", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "compartments", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "memory", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "addons", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "newaddon", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "support", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "telemetry", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "networking", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "webrtc", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: { NS_ABOUT_MODULE_CONTRACTID_PREFIX "srcdoc", &kNS_ABOUT_REDIRECTOR_MODULE_CID }, michael@0: { NS_URI_LOADER_CONTRACTID, &kNS_URI_LOADER_CID }, michael@0: { NS_DOCUMENTLOADER_SERVICE_CONTRACTID, &kNS_DOCUMENTLOADER_SERVICE_CID }, michael@0: { NS_EXTERNALHELPERAPPSERVICE_CONTRACTID, &kNS_EXTERNALHELPERAPPSERVICE_CID }, michael@0: { NS_EXTERNALPROTOCOLSERVICE_CONTRACTID, &kNS_EXTERNALHELPERAPPSERVICE_CID }, michael@0: { NS_MIMESERVICE_CONTRACTID, &kNS_EXTERNALHELPERAPPSERVICE_CID }, michael@0: { NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX"default", &kNS_EXTERNALPROTOCOLHANDLER_CID }, michael@0: { NS_PREFETCHSERVICE_CONTRACTID, &kNS_PREFETCHSERVICE_CID }, michael@0: { NS_OFFLINECACHEUPDATESERVICE_CONTRACTID, &kNS_OFFLINECACHEUPDATESERVICE_CID }, michael@0: { NS_OFFLINECACHEUPDATE_CONTRACTID, &kNS_OFFLINECACHEUPDATE_CID }, michael@0: { NS_LOCALHANDLERAPP_CONTRACTID, &kNS_LOCALHANDLERAPP_CID }, michael@0: #ifdef MOZ_ENABLE_DBUS michael@0: { NS_DBUSHANDLERAPP_CONTRACTID, &kNS_DBUSHANDLERAPP_CID }, michael@0: #endif michael@0: #if defined(MOZ_WIDGET_ANDROID) || defined(MOZ_ENABLE_MEEGOTOUCHSHARE) michael@0: { NS_EXTERNALSHARINGAPPSERVICE_CONTRACTID, &kNS_EXTERNALSHARINGAPPSERVICE_CID }, michael@0: #endif michael@0: #if defined(MOZ_WIDGET_ANDROID) michael@0: { NS_EXTERNALURLHANDLERSERVICE_CONTRACTID, &kNS_EXTERNALURLHANDLERSERVICE_CID }, michael@0: #endif michael@0: { NS_SHENTRY_CONTRACTID, &kNS_SHENTRY_CID }, michael@0: { NS_SHTRANSACTION_CONTRACTID, &kNS_SHTRANSACTION_CID }, michael@0: { NS_SHISTORY_CONTRACTID, &kNS_SHISTORY_CID }, michael@0: { NS_SHISTORY_INTERNAL_CONTRACTID, &kNS_SHISTORY_INTERNAL_CID }, michael@0: { NS_DOWNLOADHISTORY_CONTRACTID, &kNS_DOWNLOADHISTORY_CID }, michael@0: { nullptr } michael@0: }; michael@0: michael@0: static const mozilla::Module kDocShellModule = { michael@0: mozilla::Module::kVersion, michael@0: kDocShellCIDs, michael@0: kDocShellContracts, michael@0: nullptr, michael@0: nullptr, michael@0: Initialize, michael@0: Shutdown michael@0: }; michael@0: michael@0: NSMODULE_DEFN(docshell_provider) = &kDocShellModule;