diff options
Diffstat (limited to 'layout/build/nsLayoutStatics.cpp')
-rw-r--r-- | layout/build/nsLayoutStatics.cpp | 411 |
1 files changed, 411 insertions, 0 deletions
diff --git a/layout/build/nsLayoutStatics.cpp b/layout/build/nsLayoutStatics.cpp new file mode 100644 index 0000000000..1b6f45818c --- /dev/null +++ b/layout/build/nsLayoutStatics.cpp @@ -0,0 +1,411 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 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/. */ + +#include "base/basictypes.h" + +#include "nsLayoutStatics.h" +#include "nscore.h" + +#include "mozilla/intl/AppDateTimeFormat.h" +#include "MediaManager.h" +#include "mozilla/dom/ServiceWorkerRegistrar.h" +#include "nsAttrValue.h" +#include "nsColorNames.h" +#include "nsComputedDOMStyle.h" +#include "nsContentDLF.h" +#include "nsContentUtils.h" +#include "nsCSSAnonBoxes.h" +#include "mozilla/css/ErrorReporter.h" +#include "nsCSSProps.h" +#include "nsCSSPseudoElements.h" +#include "nsCSSRendering.h" +#include "nsGenericHTMLFrameElement.h" +#include "mozilla/dom/Attr.h" +#include "mozilla/dom/PopupBlocker.h" +#include "nsIFrame.h" +#include "nsFrameState.h" +#include "nsGlobalWindow.h" +#include "nsGkAtoms.h" +#include "nsImageFrame.h" +#include "mozilla/GlobalStyleSheetCache.h" +#include "nsRegion.h" +#include "nsRepeatService.h" +#include "nsFloatManager.h" +#include "nsTextControlFrame.h" +#include "txMozillaXSLTProcessor.h" +#include "nsTreeSanitizer.h" +#include "nsCellMap.h" +#include "nsTextFrame.h" +#include "nsCCUncollectableMarker.h" +#include "nsTextFragment.h" +#include "nsCORSListenerProxy.h" +#include "nsHtml5Module.h" +#include "nsHTMLTags.h" +#include "nsFocusManager.h" +#include "mozilla/dom/HTMLDNSPrefetch.h" +#include "mozilla/dom/HTMLInputElement.h" +#include "mozilla/dom/SVGElementFactory.h" +#include "nsLanguageAtomService.h" +#include "nsMathMLAtoms.h" +#include "nsMathMLOperators.h" +#include "Navigator.h" +#include "StorageObserver.h" +#include "CacheObserver.h" +#include "DisplayItemClip.h" +#include "HitTestInfo.h" +#include "ActiveLayerTracker.h" +#include "AnimationCommon.h" +#include "LayerAnimationInfo.h" +#include "mozilla/TimelineConsumers.h" + +#include "AudioChannelService.h" +#include "mozilla/dom/PromiseDebugging.h" +#include "mozilla/dom/nsMixedContentBlocker.h" + +#include "nsXULPopupManager.h" +#include "nsXULContentUtils.h" +#include "nsXULPrototypeCache.h" +#include "nsXULTooltipListener.h" + +#include "mozilla/dom/UIDirectionManager.h" + +#include "CubebUtils.h" +#include "WebAudioUtils.h" + +#include "nsError.h" + +#include "nsJSEnvironment.h" +#include "nsContentSink.h" +#include "nsFrameMessageManager.h" +#include "nsDOMMutationObserver.h" +#include "nsHyphenationManager.h" +#include "nsWindowMemoryReporter.h" +#include "mozilla/dom/ContentParent.h" +#include "mozilla/ProcessPriorityManager.h" +#include "mozilla/PermissionManager.h" +#include "mozilla/dom/CustomElementRegistry.h" +#include "mozilla/EventDispatcher.h" +#include "mozilla/IMEStateManager.h" +#ifndef MOZ_WIDGET_ANDROID +# include "mozilla/Viaduct.h" +#endif +#include "mozilla/dom/HTMLVideoElement.h" +#include "ThirdPartyUtil.h" +#include "TouchManager.h" +#include "DecoderDoctorLogger.h" +#include "MediaDecoder.h" +#include "mozilla/ClearSiteData.h" +#include "mozilla/EditorController.h" +#include "mozilla/HTMLEditorController.h" +#include "mozilla/ServoBindings.h" +#include "mozilla/StaticPresData.h" +#include "mozilla/dom/AbstractRange.h" +#include "mozilla/dom/Document.h" +#include "mozilla/dom/WebIDLGlobalNameHash.h" +#include "mozilla/dom/U2FTokenManager.h" +#include "mozilla/dom/WebAuthnController.h" +#ifdef OS_WIN +# include "mozilla/dom/WinWebAuthnManager.h" +#endif +#include "mozilla/dom/PointerEventHandler.h" +#include "mozilla/dom/RemoteWorkerService.h" +#include "mozilla/dom/BlobURLProtocolHandler.h" +#include "mozilla/dom/ReportingHeader.h" +#include "mozilla/dom/BrowserParent.h" +#include "mozilla/dom/MIDIPlatformService.h" +#include "mozilla/dom/quota/ActorsParent.h" +#include "mozilla/dom/localstorage/ActorsParent.h" +#include "mozilla/net/UrlClassifierFeatureFactory.h" +#include "mozilla/RemoteLazyInputStreamStorage.h" +#include "nsLayoutUtils.h" +#include "nsThreadManager.h" +#include "mozilla/css/ImageLoader.h" +#include "gfxUserFontSet.h" +#include "RestoreTabContentObserver.h" +#include "mozilla/intl/nsComplexBreaker.h" + +#include "nsRLBoxExpatDriver.h" +#include "RLBoxWOFF2Types.h" + +using namespace mozilla; +using namespace mozilla::net; +using namespace mozilla::dom; +using namespace mozilla::dom::ipc; +using namespace mozilla::dom::quota; + +nsrefcnt nsLayoutStatics::sLayoutStaticRefcnt = 0; + +nsresult nsLayoutStatics::Initialize() { + NS_ASSERTION(sLayoutStaticRefcnt == 0, "nsLayoutStatics isn't zero!"); + + sLayoutStaticRefcnt = 1; + NS_LOG_ADDREF(&sLayoutStaticRefcnt, sLayoutStaticRefcnt, "nsLayoutStatics", + 1); + + nsresult rv; + + ContentParent::StartUp(); + + nsCSSProps::AddRefTable(); + nsColorNames::AddRefTable(); + +#ifdef DEBUG + nsCSSPseudoElements::AssertAtoms(); + nsCSSAnonBoxes::AssertAtoms(); + DebugVerifyFrameStateBits(); +#endif + + StartupJSEnvironment(); + + nsGlobalWindowInner::Init(); + nsGlobalWindowOuter::Init(); + + rv = nsContentUtils::Init(); + if (NS_FAILED(rv)) { + NS_ERROR("Could not initialize nsContentUtils"); + return rv; + } + + nsAttrValue::Init(); + + rv = nsTextFragment::Init(); + if (NS_FAILED(rv)) { + NS_ERROR("Could not initialize nsTextFragment"); + return rv; + } + + nsCellMap::Init(); + + StaticPresData::Init(); + nsCSSRendering::Init(); + css::ImageLoader::Init(); + + rv = HTMLDNSPrefetch::Initialize(); + if (NS_FAILED(rv)) { + NS_ERROR("Could not initialize HTML DNS prefetch"); + return rv; + } + + nsMathMLOperators::AddRefTable(); + +#ifdef DEBUG + nsIFrame::DisplayReflowStartup(); +#endif + Attr::Initialize(); + + PopupBlocker::Initialize(); + + rv = txMozillaXSLTProcessor::Startup(); + if (NS_FAILED(rv)) { + NS_ERROR("Could not initialize txMozillaXSLTProcessor"); + return rv; + } + + rv = StorageObserver::Init(); + if (NS_FAILED(rv)) { + NS_ERROR("Could not initialize StorageObserver"); + return rv; + } + + rv = nsCCUncollectableMarker::Init(); + if (NS_FAILED(rv)) { + NS_ERROR("Could not initialize nsCCUncollectableMarker"); + return rv; + } + + rv = nsXULPopupManager::Init(); + if (NS_FAILED(rv)) { + NS_ERROR("Could not initialize nsXULPopupManager"); + return rv; + } + + rv = nsFocusManager::Init(); + if (NS_FAILED(rv)) { + NS_ERROR("Could not initialize nsFocusManager"); + return rv; + } + + DecoderDoctorLogger::Init(); + MediaManager::StartupInit(); + CubebUtils::InitLibrary(); + + nsHtml5Module::InitializeStatics(); + nsLayoutUtils::Initialize(); + PointerEventHandler::InitializeStatics(); + TouchManager::InitializeStatics(); + + nsWindowMemoryReporter::Init(); + + SVGElementFactory::Init(); + + ProcessPriorityManager::Init(); + + UIDirectionManager::Initialize(); + + CacheObserver::Init(); + + IMEStateManager::Init(); + + ServiceWorkerRegistrar::Initialize(); + + MediaDecoder::InitStatics(); + + PromiseDebugging::Init(); + + if (XRE_IsParentProcess() || XRE_IsContentProcess()) { + InitializeServo(); + } + + // This must be initialized on the main-thread. + mozilla::RemoteLazyInputStreamStorage::Initialize(); + + mozilla::dom::U2FTokenManager::Initialize(); + mozilla::dom::WebAuthnController::Initialize(); + +#ifdef OS_WIN + mozilla::dom::WinWebAuthnManager::Initialize(); +#endif + + if (XRE_IsParentProcess()) { + // On content process we initialize these components when PContentChild is + // fully initialized. + mozilla::dom::RemoteWorkerService::Initialize(); + } + + ClearSiteData::Initialize(); + + // Reporting API. + ReportingHeader::Initialize(); + + if (XRE_IsParentProcess()) { + InitializeQuotaManager(); + InitializeLocalStorage(); + } + + ThirdPartyUtil::Startup(); + + RestoreTabContentObserver::Initialize(); + + ComplexBreaker::Initialize(); + + RLBoxExpatSandboxPool::Initialize(); + + RLBoxWOFF2SandboxPool::Initalize(); + + if (XRE_IsParentProcess()) { + MIDIPlatformService::InitStatics(); + } + +#ifndef MOZ_WIDGET_ANDROID + if (XRE_IsParentProcess()) { + InitializeViaduct(); + } +#endif + + return NS_OK; +} + +void nsLayoutStatics::Shutdown() { + // Don't need to shutdown nsWindowMemoryReporter, that will be done by the + // memory reporter manager. + + if (XRE_IsParentProcess() || XRE_IsContentProcess()) { + ShutdownServo(); + } + + mozilla::dom::AbstractRange::Shutdown(); + Document::Shutdown(); + nsMessageManagerScriptExecutor::Shutdown(); + nsFocusManager::Shutdown(); + nsXULPopupManager::Shutdown(); + UIDirectionManager::Shutdown(); + StorageObserver::Shutdown(); + txMozillaXSLTProcessor::Shutdown(); + Attr::Shutdown(); + PopupBlocker::Shutdown(); + IMEStateManager::Shutdown(); + EditorController::Shutdown(); + HTMLEditorController::Shutdown(); + HTMLDNSPrefetch::Shutdown(); + nsCSSRendering::Shutdown(); + StaticPresData::Shutdown(); + nsLanguageAtomService::Shutdown(); +#ifdef DEBUG + nsIFrame::DisplayReflowShutdown(); +#endif + nsCellMap::Shutdown(); + ActiveLayerTracker::Shutdown(); + + // Release all of our atoms + nsColorNames::ReleaseTable(); + nsCSSProps::ReleaseTable(); + nsRepeatService::Shutdown(); + + nsXULContentUtils::Finish(); + nsXULPrototypeCache::ReleaseGlobals(); + + SVGElementFactory::Shutdown(); + nsMathMLOperators::ReleaseTable(); + + nsFloatManager::Shutdown(); + nsImageFrame::ReleaseGlobals(); + + mozilla::css::ErrorReporter::ReleaseGlobals(); + + nsTextFragment::Shutdown(); + + nsAttrValue::Shutdown(); + nsContentUtils::Shutdown(); + nsMixedContentBlocker::Shutdown(); + GlobalStyleSheetCache::Shutdown(); + + ShutdownJSEnvironment(); + nsGlobalWindowInner::ShutDown(); + nsGlobalWindowOuter::ShutDown(); + + CubebUtils::ShutdownLibrary(); + WebAudioUtils::Shutdown(); + + nsCORSListenerProxy::Shutdown(); + + PointerEventHandler::ReleaseStatics(); + + TouchManager::ReleaseStatics(); + + nsTreeSanitizer::ReleaseStatics(); + + nsHtml5Module::ReleaseStatics(); + + mozilla::EventDispatcher::Shutdown(); + + HTMLInputElement::DestroyUploadLastDir(); + + nsLayoutUtils::Shutdown(); + + nsHyphenationManager::Shutdown(); + nsDOMMutationObserver::Shutdown(); + + mozilla::intl::AppDateTimeFormat::Shutdown(); + + ContentParent::ShutDown(); + + DisplayItemClip::Shutdown(); + HitTestInfo::Shutdown(); + + CacheObserver::Shutdown(); + + PromiseDebugging::Shutdown(); + + BlobURLProtocolHandler::RemoveDataEntries(); + + css::ImageLoader::Shutdown(); + + mozilla::net::UrlClassifierFeatureFactory::Shutdown(); + + RestoreTabContentObserver::Shutdown(); + + ComplexBreaker::Shutdown(); +} |