LCOV - code coverage report
Current view: top level - layout/build - nsLayoutModule.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 99 190 52.1 %
Date: 2017-07-14 16:53:18 Functions: 39 107 36.4 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
       2             : /* This Source Code Form is subject to the terms of the Mozilla Public
       3             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       4             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       5             : 
       6             : #include "base/basictypes.h"
       7             : 
       8             : #include "XPCModule.h"
       9             : #include "mozilla/ModuleUtils.h"
      10             : #include "nsImageModule.h"
      11             : #include "nsLayoutStatics.h"
      12             : #include "nsContentCID.h"
      13             : #include "nsContentDLF.h"
      14             : #include "nsContentPolicyUtils.h"
      15             : #include "nsDataDocumentContentPolicy.h"
      16             : #include "nsNoDataProtocolContentPolicy.h"
      17             : #include "nsDOMCID.h"
      18             : #include "nsHTMLContentSerializer.h"
      19             : #include "nsHTMLParts.h"
      20             : #include "nsIComponentManager.h"
      21             : #include "nsIContentIterator.h"
      22             : #include "nsIContentSerializer.h"
      23             : #include "nsIContentViewer.h"
      24             : #include "nsIController.h"
      25             : #include "nsIControllers.h"
      26             : #include "nsIDOMDOMImplementation.h"
      27             : #include "nsIDocument.h"
      28             : #include "nsIDocumentEncoder.h"
      29             : #include "nsIFactory.h"
      30             : #include "nsIFrameUtil.h"
      31             : #include "nsIIdleService.h"
      32             : #include "nsHTMLStyleSheet.h"
      33             : #include "nsILayoutDebugger.h"
      34             : #include "nsNameSpaceManager.h"
      35             : #include "nsIObserver.h"
      36             : #include "nsIObserverService.h"
      37             : #include "nsIScriptNameSpaceManager.h"
      38             : #include "nsIScriptError.h"
      39             : #include "nsISelection.h"
      40             : #include "nsCaret.h"
      41             : #include "nsPlainTextSerializer.h"
      42             : #include "nsXMLContentSerializer.h"
      43             : #include "nsXHTMLContentSerializer.h"
      44             : #include "nsRuleNode.h"
      45             : #include "nsContentAreaDragDrop.h"
      46             : #include "nsContentList.h"
      47             : #include "nsBox.h"
      48             : #include "nsIFrameTraversal.h"
      49             : #include "nsLayoutCID.h"
      50             : #include "nsStyleSheetService.h"
      51             : #include "nsFocusManager.h"
      52             : #include "ThirdPartyUtil.h"
      53             : #include "nsStructuredCloneContainer.h"
      54             : #include "gfxPlatform.h"
      55             : #include "mozilla/gfx/gfxVars.h"
      56             : 
      57             : #include "nsIEventListenerService.h"
      58             : #include "nsIMessageManager.h"
      59             : 
      60             : // Transformiix stuff
      61             : #include "mozilla/dom/XPathEvaluator.h"
      62             : #include "txMozillaXSLTProcessor.h"
      63             : #include "txNodeSetAdaptor.h"
      64             : 
      65             : #include "mozilla/dom/DOMParser.h"
      66             : #include "mozilla/dom/XMLHttpRequestMainThread.h"
      67             : #include "nsDOMSerializer.h"
      68             : 
      69             : // view stuff
      70             : #include "nsContentCreatorFunctions.h"
      71             : 
      72             : #include "mozilla/dom/FormData.h"
      73             : #include "nsHostObjectURI.h"
      74             : #include "nsGlobalWindowCommands.h"
      75             : #include "nsIControllerCommandTable.h"
      76             : #include "nsJSProtocolHandler.h"
      77             : #include "nsScriptNameSpaceManager.h"
      78             : #include "nsIControllerContext.h"
      79             : #include "nsJSON.h"
      80             : #include "nsZipArchive.h"
      81             : #include "mozilla/Attributes.h"
      82             : #include "mozilla/dom/DOMException.h"
      83             : #include "mozilla/dom/DOMRequest.h"
      84             : #include "mozilla/dom/LocalStorageManager.h"
      85             : #include "mozilla/dom/network/UDPSocketChild.h"
      86             : #include "mozilla/dom/quota/QuotaManagerService.h"
      87             : #include "mozilla/dom/SessionStorageManager.h"
      88             : #include "mozilla/dom/workers/ServiceWorkerManager.h"
      89             : #include "mozilla/dom/workers/WorkerDebuggerManager.h"
      90             : #include "mozilla/dom/Notification.h"
      91             : #include "mozilla/OSFileConstants.h"
      92             : #include "mozilla/Services.h"
      93             : 
      94             : #ifdef MOZ_WEBSPEECH_TEST_BACKEND
      95             : #include "mozilla/dom/FakeSpeechRecognitionService.h"
      96             : #endif
      97             : #ifdef MOZ_WEBSPEECH_POCKETSPHINX
      98             : #include "mozilla/dom/PocketSphinxSpeechRecognitionService.h"
      99             : #endif
     100             : #ifdef MOZ_WEBSPEECH
     101             : #include "mozilla/dom/nsSynthVoiceRegistry.h"
     102             : #endif
     103             : 
     104             : #include "mozilla/dom/PushNotifier.h"
     105             : using mozilla::dom::PushNotifier;
     106             : #define PUSHNOTIFIER_CID \
     107             : { 0x2fc2d3e3, 0x020f, 0x404e, { 0xb0, 0x6a, 0x6e, 0xcf, 0x3e, 0xa2, 0x33, 0x4a } }
     108             : 
     109             : #include "AudioChannelAgent.h"
     110             : using mozilla::dom::AudioChannelAgent;
     111             : 
     112             : // Editor stuff
     113             : #include "nsEditorCID.h"
     114             : #include "mozilla/EditorController.h" //CID
     115             : #include "mozilla/HTMLEditor.h"
     116             : 
     117             : #include "nsTextServicesDocument.h"
     118             : #include "nsTextServicesCID.h"
     119             : 
     120             : #include "nsScriptSecurityManager.h"
     121             : #include "ContentPrincipal.h"
     122             : #include "SystemPrincipal.h"
     123             : #include "NullPrincipal.h"
     124             : #include "nsNetCID.h"
     125             : #if defined(MOZ_WIDGET_ANDROID)
     126             : #include "nsHapticFeedback.h"
     127             : #endif
     128             : #include "nsParserUtils.h"
     129             : 
     130             : #include "nsHTMLCanvasFrame.h"
     131             : 
     132             : #include "nsIDOMWebGLRenderingContext.h"
     133             : 
     134             : class nsIDocumentLoaderFactory;
     135             : 
     136             : #define PRODUCT_NAME "Gecko"
     137             : 
     138             : /* 0ddf4df8-4dbb-4133-8b79-9afb966514f5 */
     139             : #define NS_PLUGINDOCLOADERFACTORY_CID \
     140             : { 0x0ddf4df8, 0x4dbb, 0x4133, { 0x8b, 0x79, 0x9a, 0xfb, 0x96, 0x65, 0x14, 0xf5 } }
     141             : 
     142             : #define NS_WINDOWCOMMANDTABLE_CID \
     143             :  { /* 0DE2FBFA-6B7F-11D7-BBBA-0003938A9D96 */        \
     144             :   0x0DE2FBFA, 0x6B7F, 0x11D7, {0xBB, 0xBA, 0x00, 0x03, 0x93, 0x8A, 0x9D, 0x96} }
     145             : 
     146             : #include "nsIBoxObject.h"
     147             : 
     148             : #ifdef MOZ_XUL
     149             : #include "inDOMView.h"
     150             : #endif /* MOZ_XUL */
     151             : 
     152             : #include "inDeepTreeWalker.h"
     153             : #include "inCSSValueSearch.h"
     154             : #include "inDOMUtils.h"
     155             : 
     156             : #ifdef MOZ_XUL
     157             : #include "nsIXULDocument.h"
     158             : #include "nsIXULSortService.h"
     159             : #endif
     160             : 
     161             : static void Shutdown();
     162             : 
     163             : #include "nsGeolocation.h"
     164             : #include "nsDeviceSensors.h"
     165             : #include "mozilla/dom/nsContentSecurityManager.h"
     166             : #include "mozilla/dom/nsCSPService.h"
     167             : #include "mozilla/dom/nsCSPContext.h"
     168             : #include "nsIPowerManagerService.h"
     169             : #include "nsIMediaManager.h"
     170             : #include "mozilla/dom/nsMixedContentBlocker.h"
     171             : 
     172             : #include "AudioChannelService.h"
     173             : #include "mozilla/net/WebSocketEventService.h"
     174             : 
     175             : #include "mozilla/dom/FlyWebService.h"
     176             : 
     177             : #include "mozilla/dom/power/PowerManagerService.h"
     178             : #include "mozilla/dom/time/TimeService.h"
     179             : #include "StreamingProtocolService.h"
     180             : 
     181             : #include "nsIPresentationService.h"
     182             : 
     183             : #include "MediaManager.h"
     184             : 
     185             : #include "GMPService.h"
     186             : 
     187             : #include "mozilla/dom/PresentationDeviceManager.h"
     188             : #include "mozilla/dom/PresentationTCPSessionTransport.h"
     189             : 
     190             : #include "nsScriptError.h"
     191             : 
     192             : #include "mozilla/TextInputProcessor.h"
     193             : 
     194             : using namespace mozilla;
     195             : using namespace mozilla::dom;
     196             : using mozilla::dom::power::PowerManagerService;
     197             : using mozilla::dom::quota::QuotaManagerService;
     198             : using mozilla::dom::workers::ServiceWorkerManager;
     199             : using mozilla::dom::workers::WorkerDebuggerManager;
     200             : using mozilla::dom::UDPSocketChild;
     201             : using mozilla::dom::time::TimeService;
     202             : using mozilla::net::StreamingProtocolControllerService;
     203             : using mozilla::gmp::GeckoMediaPluginService;
     204             : using mozilla::dom::NotificationTelemetryService;
     205             : 
     206             : #define NS_EDITORCOMMANDTABLE_CID \
     207             : { 0x4f5e62b8, 0xd659, 0x4156, \
     208             :   { 0x84, 0xfc, 0x2f, 0x60, 0x99, 0x40, 0x03, 0x69 } }
     209             : 
     210             : #define NS_EDITINGCOMMANDTABLE_CID \
     211             : { 0xcb38a746, 0xbeb8, 0x43f3, \
     212             :   { 0x94, 0x29, 0x77, 0x96, 0xe1, 0xa9, 0x3f, 0xb4 } }
     213             : 
     214             : #define NS_HAPTICFEEDBACK_CID \
     215             : { 0x1f15dbc8, 0xbfaa, 0x45de, \
     216             :   { 0x8a, 0x46, 0x08, 0xe2, 0xe2, 0x63, 0x26, 0xb0 } }
     217             : 
     218           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(TextEditor)
     219             : 
     220           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsParserUtils)
     221             : 
     222           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsTextServicesDocument)
     223             : 
     224           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(HTMLEditor)
     225             : 
     226             : // Transformiix
     227             : /* 5d5d92cd-6bf8-11d9-bf4a-000a95dc234c */
     228             : #define TRANSFORMIIX_NODESET_CID \
     229             : { 0x5d5d92cd, 0x6bf8, 0x11d9, { 0xbf, 0x4a, 0x0, 0x0a, 0x95, 0xdc, 0x23, 0x4c } }
     230             : 
     231             : #define TRANSFORMIIX_NODESET_CONTRACTID \
     232             : "@mozilla.org/transformiix-nodeset;1"
     233             : 
     234             : // PresentationDeviceManager
     235             : /* e1e79dec-4085-4994-ac5b-744b016697e6 */
     236             : #define PRESENTATION_DEVICE_MANAGER_CID \
     237             : { 0xe1e79dec, 0x4085, 0x4994, { 0xac, 0x5b, 0x74, 0x4b, 0x01, 0x66, 0x97, 0xe6 } }
     238             : 
     239             : #define PRESENTATION_TCP_SESSION_TRANSPORT_CID \
     240             : { 0xc9d023f4, 0x6228, 0x4c07, { 0x8b, 0x1d, 0x9c, 0x19, 0x57, 0x3f, 0xaa, 0x27 } }
     241             : 
     242             : already_AddRefed<nsIPresentationService> NS_CreatePresentationService();
     243             : 
     244             : // Factory Constructor
     245           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(txMozillaXSLTProcessor)
     246           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(XPathEvaluator)
     247           0 : NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(txNodeSetAdaptor, Init)
     248           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsDOMSerializer)
     249           0 : NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(XMLHttpRequestMainThread, Init)
     250           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(FormData)
     251           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsHostObjectURI)
     252           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(DOMParser)
     253           4 : NS_GENERIC_FACTORY_CONSTRUCTOR(Exception)
     254           4 : NS_GENERIC_FACTORY_CONSTRUCTOR(LocalStorageManager)
     255           2 : NS_GENERIC_FACTORY_CONSTRUCTOR(SessionStorageManager)
     256           0 : NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(DOMRequestService,
     257             :                                          DOMRequestService::FactoryCreate)
     258           0 : NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(QuotaManagerService,
     259             :                                          QuotaManagerService::FactoryCreate)
     260           2 : NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(ServiceWorkerManager,
     261             :                                          ServiceWorkerManager::GetInstance)
     262           0 : NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(WorkerDebuggerManager,
     263             :                                          WorkerDebuggerManager::GetInstance)
     264             : 
     265             : #ifdef MOZ_WEBSPEECH
     266           0 : NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsSynthVoiceRegistry,
     267             :                                          nsSynthVoiceRegistry::GetInstanceForService)
     268             : #endif
     269             : 
     270           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(AudioChannelAgent)
     271             : 
     272           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsDeviceSensors)
     273             : 
     274             : #if defined(ANDROID)
     275             : NS_GENERIC_FACTORY_CONSTRUCTOR(nsHapticFeedback)
     276             : #endif
     277           4 : NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(ThirdPartyUtil, Init)
     278           1 : NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIPowerManagerService,
     279             :                                          PowerManagerService::GetInstance)
     280           0 : NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsITimeService,
     281             :                                          TimeService::GetInstance)
     282           0 : NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIStreamingProtocolControllerService,
     283             :                                          StreamingProtocolControllerService::GetInstance)
     284             : 
     285           0 : NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIMediaManagerService,
     286             :                                          MediaManager::GetInstance)
     287           2 : NS_GENERIC_FACTORY_CONSTRUCTOR(PresentationDeviceManager)
     288           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(TextInputProcessor)
     289           1 : NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIPresentationService,
     290             :                                          NS_CreatePresentationService)
     291           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(PresentationTCPSessionTransport)
     292           2 : NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(NotificationTelemetryService, Init)
     293           4 : NS_GENERIC_FACTORY_CONSTRUCTOR(PushNotifier)
     294             : 
     295             : //-----------------------------------------------------------------------------
     296             : 
     297             : static bool gInitialized = false;
     298             : 
     299             : // Perform our one-time intialization for this module
     300             : 
     301             : // static
     302             : nsresult
     303           3 : Initialize()
     304             : {
     305           3 :   if (gInitialized) {
     306           0 :     MOZ_CRASH("Recursive layout module initialization");
     307             :     return NS_ERROR_FAILURE;
     308             :   }
     309           3 :   if (XRE_GetProcessType() == GeckoProcessType_GPU) {
     310             :     // We mark the layout module as being available in the GPU process so that
     311             :     // XPCOM's component manager initializes the power manager service, which
     312             :     // is needed for nsAppShell. However, we don't actually need anything in
     313             :     // the layout module itself.
     314           0 :     return NS_OK;
     315             :   }
     316             : 
     317             :   static_assert(sizeof(uintptr_t) == sizeof(void*),
     318             :                 "Eeek! You'll need to adjust the size of uintptr_t to the "
     319             :                 "size of a pointer on your platform.");
     320             : 
     321           3 :   gInitialized = true;
     322             : 
     323             :   nsresult rv;
     324           3 :   rv = xpcModuleCtor();
     325           3 :   if (NS_FAILED(rv))
     326           0 :     return rv;
     327             : 
     328           3 :   rv = nsLayoutStatics::Initialize();
     329           3 :   if (NS_FAILED(rv)) {
     330           0 :     Shutdown();
     331           0 :     return rv;
     332             :   }
     333             : 
     334           3 :   return NS_OK;
     335             : }
     336             : 
     337             : // Shutdown this module, releasing all of the module resources
     338             : 
     339             : // static
     340             : void
     341           0 : Shutdown()
     342             : {
     343           0 :   NS_PRECONDITION(gInitialized, "module not initialized");
     344           0 :   if (!gInitialized)
     345           0 :     return;
     346             : 
     347           0 :   gInitialized = false;
     348             : 
     349           0 :   nsLayoutStatics::Release();
     350             : }
     351             : 
     352             : #ifdef DEBUG
     353             : nsresult NS_NewFrameUtil(nsIFrameUtil** aResult);
     354             : nsresult NS_NewLayoutDebugger(nsILayoutDebugger** aResult);
     355             : #endif
     356             : 
     357             : nsresult NS_NewBoxObject(nsIBoxObject** aResult);
     358             : 
     359             : #ifdef MOZ_XUL
     360             : nsresult NS_NewListBoxObject(nsIBoxObject** aResult);
     361             : nsresult NS_NewScrollBoxObject(nsIBoxObject** aResult);
     362             : nsresult NS_NewMenuBoxObject(nsIBoxObject** aResult);
     363             : nsresult NS_NewPopupBoxObject(nsIBoxObject** aResult);
     364             : nsresult NS_NewContainerBoxObject(nsIBoxObject** aResult);
     365             : nsresult NS_NewTreeBoxObject(nsIBoxObject** aResult);
     366             : #endif
     367             : 
     368             : nsresult NS_NewCanvasRenderingContextWebGL(nsIDOMWebGLRenderingContext** aResult);
     369             : 
     370             : nsresult NS_CreateFrameTraversal(nsIFrameTraversal** aResult);
     371             : 
     372             : nsresult NS_NewDomSelection(nsISelection** aResult);
     373             : already_AddRefed<nsIContentViewer> NS_NewContentViewer();
     374             : nsresult NS_NewGenRegularIterator(nsIContentIterator** aResult);
     375             : nsresult NS_NewGenSubtreeIterator(nsIContentIterator** aInstancePtrResult);
     376             : nsresult NS_NewContentDocumentLoaderFactory(nsIDocumentLoaderFactory** aResult);
     377             : nsresult NS_NewHTMLCopyTextEncoder(nsIDocumentEncoder** aResult);
     378             : nsresult NS_NewTextEncoder(nsIDocumentEncoder** aResult);
     379             : nsresult NS_NewContentPolicy(nsIContentPolicy** aResult);
     380             : 
     381             : nsresult NS_NewEventListenerService(nsIEventListenerService** aResult);
     382             : nsresult NS_NewGlobalMessageManager(nsIMessageBroadcaster** aResult);
     383             : nsresult NS_NewParentProcessMessageManager(nsIMessageBroadcaster** aResult);
     384             : nsresult NS_NewChildProcessMessageManager(nsISyncMessageSender** aResult);
     385             : 
     386             : nsresult NS_NewXULControllers(nsISupports* aOuter, REFNSIID aIID, void** aResult);
     387             : 
     388             : #define MAKE_CTOR(ctor_, iface_, func_)                   \
     389             : static nsresult                                           \
     390             : ctor_(nsISupports* aOuter, REFNSIID aIID, void** aResult) \
     391             : {                                                         \
     392             :   *aResult = nullptr;                                      \
     393             :   if (aOuter)                                             \
     394             :     return NS_ERROR_NO_AGGREGATION;                       \
     395             :   iface_* inst;                                           \
     396             :   nsresult rv = func_(&inst);                             \
     397             :   if (NS_SUCCEEDED(rv)) {                                 \
     398             :     rv = inst->QueryInterface(aIID, aResult);             \
     399             :     NS_RELEASE(inst);                                     \
     400             :   }                                                       \
     401             :   return rv;                                              \
     402             : }
     403             : 
     404             : // As above, but expects
     405             : //   already_AddRefed<nsIFoo> NS_NewFoo();
     406             : // instead of
     407             : //   nsresult NS_NewFoo(nsIFoo**);
     408             : #define MAKE_CTOR2(ctor_, iface_, func_)                  \
     409             : static nsresult                                           \
     410             : ctor_(nsISupports* aOuter, REFNSIID aIID, void** aResult) \
     411             : {                                                         \
     412             :   *aResult = nullptr;                                      \
     413             :   if (aOuter) {                                           \
     414             :     return NS_ERROR_NO_AGGREGATION;                       \
     415             :   }                                                       \
     416             :   nsCOMPtr<iface_> inst = func_();                        \
     417             :   inst.forget(aResult);                                   \
     418             :   return NS_OK;                                           \
     419             : }
     420             : 
     421             : #ifdef DEBUG
     422           0 : MAKE_CTOR(CreateNewFrameUtil,             nsIFrameUtil,                NS_NewFrameUtil)
     423           0 : MAKE_CTOR(CreateNewLayoutDebugger,        nsILayoutDebugger,           NS_NewLayoutDebugger)
     424             : #endif
     425             : 
     426           0 : MAKE_CTOR(CreateNewFrameTraversal,      nsIFrameTraversal,      NS_CreateFrameTraversal)
     427           0 : MAKE_CTOR(CreateNewBoxObject,           nsIBoxObject,           NS_NewBoxObject)
     428             : 
     429             : #ifdef MOZ_XUL
     430           0 : MAKE_CTOR(CreateNewListBoxObject,       nsIBoxObject,           NS_NewListBoxObject)
     431           0 : MAKE_CTOR(CreateNewMenuBoxObject,       nsIBoxObject,           NS_NewMenuBoxObject)
     432           0 : MAKE_CTOR(CreateNewPopupBoxObject,      nsIBoxObject,           NS_NewPopupBoxObject)
     433           0 : MAKE_CTOR(CreateNewScrollBoxObject,     nsIBoxObject,           NS_NewScrollBoxObject)
     434           0 : MAKE_CTOR(CreateNewTreeBoxObject,       nsIBoxObject,           NS_NewTreeBoxObject)
     435           0 : MAKE_CTOR(CreateNewContainerBoxObject,  nsIBoxObject,           NS_NewContainerBoxObject)
     436             : #endif // MOZ_XUL
     437             : 
     438             : #ifdef MOZ_XUL
     439           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(inDOMView)
     440             : #endif
     441           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(inDeepTreeWalker)
     442           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(inCSSValueSearch)
     443           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(inDOMUtils)
     444             : 
     445           0 : MAKE_CTOR2(CreateContentViewer,           nsIContentViewer,            NS_NewContentViewer)
     446           7 : MAKE_CTOR(CreateHTMLDocument,             nsIDocument,                 NS_NewHTMLDocument)
     447           0 : MAKE_CTOR(CreateXMLDocument,              nsIDocument,                 NS_NewXMLDocument)
     448          21 : MAKE_CTOR(CreateSVGDocument,              nsIDocument,                 NS_NewSVGDocument)
     449           0 : MAKE_CTOR(CreateImageDocument,            nsIDocument,                 NS_NewImageDocument)
     450           0 : MAKE_CTOR(CreateDOMSelection,             nsISelection,                NS_NewDomSelection)
     451           0 : MAKE_CTOR2(CreateContentIterator,         nsIContentIterator,          NS_NewContentIterator)
     452           0 : MAKE_CTOR2(CreatePreContentIterator,      nsIContentIterator,          NS_NewPreContentIterator)
     453           0 : MAKE_CTOR2(CreateSubtreeIterator,         nsIContentIterator,          NS_NewContentSubtreeIterator)
     454           0 : MAKE_CTOR(CreateTextEncoder,              nsIDocumentEncoder,          NS_NewTextEncoder)
     455           0 : MAKE_CTOR(CreateHTMLCopyTextEncoder,      nsIDocumentEncoder,          NS_NewHTMLCopyTextEncoder)
     456           0 : MAKE_CTOR(CreateXMLContentSerializer,     nsIContentSerializer,        NS_NewXMLContentSerializer)
     457           0 : MAKE_CTOR(CreateHTMLContentSerializer,    nsIContentSerializer,        NS_NewHTMLContentSerializer)
     458           0 : MAKE_CTOR(CreateXHTMLContentSerializer,   nsIContentSerializer,        NS_NewXHTMLContentSerializer)
     459           0 : MAKE_CTOR(CreatePlainTextSerializer,      nsIContentSerializer,        NS_NewPlainTextSerializer)
     460           3 : MAKE_CTOR(CreateContentPolicy,            nsIContentPolicy,            NS_NewContentPolicy)
     461             : #ifdef MOZ_XUL
     462           0 : MAKE_CTOR(CreateXULSortService,           nsIXULSortService,           NS_NewXULSortService)
     463           1 : MAKE_CTOR(CreateXULDocument,              nsIXULDocument,              NS_NewXULDocument)
     464             : // NS_NewXULControllers
     465             : #endif
     466           2 : MAKE_CTOR(CreateContentDLF,               nsIDocumentLoaderFactory,    NS_NewContentDocumentLoaderFactory)
     467           2 : MAKE_CTOR(CreateEventListenerService,     nsIEventListenerService,     NS_NewEventListenerService)
     468           1 : MAKE_CTOR(CreateGlobalMessageManager,     nsIMessageBroadcaster,       NS_NewGlobalMessageManager)
     469           1 : MAKE_CTOR(CreateParentMessageManager,     nsIMessageBroadcaster,       NS_NewParentProcessMessageManager)
     470           3 : MAKE_CTOR(CreateChildMessageManager,      nsISyncMessageSender,        NS_NewChildProcessMessageManager)
     471           4 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsDataDocumentContentPolicy)
     472           4 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsNoDataProtocolContentPolicy)
     473           0 : MAKE_CTOR(CreatePluginDocument,           nsIDocument,                 NS_NewPluginDocument)
     474           0 : MAKE_CTOR(CreateVideoDocument,            nsIDocument,                 NS_NewVideoDocument)
     475           2 : MAKE_CTOR(CreateFocusManager,             nsIFocusManager,      NS_NewFocusManager)
     476             : 
     477           0 : MAKE_CTOR(CreateCanvasRenderingContextWebGL, nsIDOMWebGLRenderingContext, NS_NewCanvasRenderingContextWebGL)
     478             : 
     479           6 : NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsStyleSheetService, Init)
     480             : 
     481           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsJSURI)
     482             : 
     483             : // views are not refcounted, so this is the same as
     484             : // NS_GENERIC_FACTORY_CONSTRUCTOR without the NS_ADDREF/NS_RELEASE
     485             : #define NS_GENERIC_FACTORY_CONSTRUCTOR_NOREFS(_InstanceClass)                 \
     486             : static nsresult                                                               \
     487             : _InstanceClass##Constructor(nsISupports *aOuter, REFNSIID aIID,               \
     488             :                             void **aResult)                                   \
     489             : {                                                                             \
     490             :     nsresult rv;                                                              \
     491             :                                                                               \
     492             :     *aResult = nullptr;                                                       \
     493             :     if (nullptr != aOuter) {                                                  \
     494             :         rv = NS_ERROR_NO_AGGREGATION;                                         \
     495             :         return rv;                                                            \
     496             :     }                                                                         \
     497             :                                                                               \
     498             :     _InstanceClass * inst = new _InstanceClass();                             \
     499             :     if (nullptr == inst) {                                                    \
     500             :         rv = NS_ERROR_OUT_OF_MEMORY;                                          \
     501             :         return rv;                                                            \
     502             :     }                                                                         \
     503             :     rv = inst->QueryInterface(aIID, aResult);                                 \
     504             :                                                                               \
     505             :     return rv;                                                                \
     506             : }                                                                             \
     507             : 
     508             : #define NS_GEOLOCATION_CID \
     509             :   { 0x1E1C3FF, 0x94A, 0xD048, { 0x44, 0xB4, 0x62, 0xD2, 0x9C, 0x7B, 0x4F, 0x39 } }
     510             : 
     511           0 : NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(Geolocation, Init)
     512             : 
     513             : #define NS_GEOLOCATION_SERVICE_CID \
     514             :   { 0x404d02a, 0x1CA, 0xAAAB, { 0x47, 0x62, 0x94, 0x4b, 0x1b, 0xf2, 0xf7, 0xb5 } }
     515             : 
     516             : #define NS_AUDIOCHANNEL_SERVICE_CID \
     517             :   { 0xf712e983, 0x048a, 0x443f, { 0x88, 0x02, 0xfc, 0xc3, 0xd9, 0x27, 0xce, 0xac }}
     518             : 
     519             : #define NS_WEBSOCKETEVENT_SERVICE_CID \
     520             :   { 0x31689828, 0xda66, 0x49a6, { 0x87, 0x0c, 0xdf, 0x62, 0xb8, 0x3f, 0xe7, 0x89 }}
     521             : 
     522             : #define NS_FLYWEB_SERVICE_CID \
     523             :   { 0x5de19ef0, 0x895e, 0x4c0c, { 0xa6, 0xe0, 0xea, 0xe0, 0x23, 0x2b, 0x84, 0x5a } }
     524             : 
     525           0 : NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsGeolocationService, nsGeolocationService::GetGeolocationService)
     526             : 
     527           0 : NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(AudioChannelService, AudioChannelService::GetOrCreate)
     528             : 
     529           0 : NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(WebSocketEventService, WebSocketEventService::GetOrCreate)
     530             : 
     531           0 : NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(FlyWebService, FlyWebService::GetOrCreateAddRefed)
     532             : 
     533             : #ifdef MOZ_WEBSPEECH_TEST_BACKEND
     534           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(FakeSpeechRecognitionService)
     535             : #endif
     536             : #ifdef MOZ_WEBSPEECH_POCKETSPHINX
     537             : NS_GENERIC_FACTORY_CONSTRUCTOR(PocketSphinxSpeechRecognitionService)
     538             : #endif
     539             : 
     540           4 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsContentSecurityManager)
     541           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsCSPContext)
     542           6 : NS_GENERIC_FACTORY_CONSTRUCTOR(CSPService)
     543           6 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsMixedContentBlocker)
     544             : 
     545           2 : NS_GENERIC_FACTORY_CONSTRUCTOR(ContentPrincipal)
     546          24 : NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(SystemPrincipal,
     547             :     nsScriptSecurityManager::SystemPrincipalSingletonConstructor)
     548           0 : NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(NullPrincipal, Init)
     549           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsStructuredCloneContainer)
     550             : 
     551           2 : NS_GENERIC_FACTORY_CONSTRUCTOR(OSFileConstantsService)
     552           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(UDPSocketChild)
     553             : 
     554           1 : NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(GeckoMediaPluginService, GeckoMediaPluginService::GetGeckoMediaPluginService)
     555             : 
     556           4 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsScriptError)
     557             : 
     558             : #ifdef ACCESSIBILITY
     559             : #include "xpcAccessibilityService.h"
     560             : 
     561           0 :   MAKE_CTOR(CreateA11yService, nsIAccessibilityService, NS_GetAccessibilityService)
     562             : #endif
     563             : 
     564             : static nsresult
     565           3 : Construct_nsIScriptSecurityManager(nsISupports *aOuter, REFNSIID aIID,
     566             :                                    void **aResult)
     567             : {
     568           3 :     if (!aResult)
     569           0 :         return NS_ERROR_NULL_POINTER;
     570           3 :     *aResult = nullptr;
     571           3 :     if (aOuter)
     572           0 :         return NS_ERROR_NO_AGGREGATION;
     573           3 :     nsScriptSecurityManager *obj = nsScriptSecurityManager::GetScriptSecurityManager();
     574           3 :     if (!obj)
     575           0 :         return NS_ERROR_OUT_OF_MEMORY;
     576           3 :     if (NS_FAILED(obj->QueryInterface(aIID, aResult)))
     577           0 :         return NS_ERROR_FAILURE;
     578           3 :     return NS_OK;
     579             : }
     580             : 
     581             : #ifdef DEBUG
     582             : NS_DEFINE_NAMED_CID(NS_FRAME_UTIL_CID);
     583             : NS_DEFINE_NAMED_CID(NS_LAYOUT_DEBUGGER_CID);
     584             : #endif
     585             : NS_DEFINE_NAMED_CID(NS_FRAMETRAVERSAL_CID);
     586             : NS_DEFINE_NAMED_CID(NS_BOXOBJECT_CID);
     587             : #ifdef MOZ_XUL
     588             : NS_DEFINE_NAMED_CID(NS_LISTBOXOBJECT_CID);
     589             : NS_DEFINE_NAMED_CID(NS_MENUBOXOBJECT_CID);
     590             : NS_DEFINE_NAMED_CID(NS_POPUPBOXOBJECT_CID);
     591             : NS_DEFINE_NAMED_CID(NS_CONTAINERBOXOBJECT_CID);
     592             : NS_DEFINE_NAMED_CID(NS_SCROLLBOXOBJECT_CID);
     593             : NS_DEFINE_NAMED_CID(NS_TREEBOXOBJECT_CID);
     594             : #endif // MOZ_XUL
     595             : #ifdef MOZ_XUL
     596             : NS_DEFINE_NAMED_CID(IN_DOMVIEW_CID);
     597             : #endif
     598             : NS_DEFINE_NAMED_CID(IN_DEEPTREEWALKER_CID);
     599             : NS_DEFINE_NAMED_CID(IN_CSSVALUESEARCH_CID);
     600             : NS_DEFINE_NAMED_CID(IN_DOMUTILS_CID);
     601             : NS_DEFINE_NAMED_CID(NS_CONTENT_VIEWER_CID);
     602             : NS_DEFINE_NAMED_CID(NS_HTMLDOCUMENT_CID);
     603             : NS_DEFINE_NAMED_CID(NS_XMLDOCUMENT_CID);
     604             : NS_DEFINE_NAMED_CID(NS_SVGDOCUMENT_CID);
     605             : NS_DEFINE_NAMED_CID(NS_IMAGEDOCUMENT_CID);
     606             : NS_DEFINE_NAMED_CID(NS_DOMSELECTION_CID);
     607             : NS_DEFINE_NAMED_CID(NS_CONTENTITERATOR_CID);
     608             : NS_DEFINE_NAMED_CID(NS_PRECONTENTITERATOR_CID);
     609             : NS_DEFINE_NAMED_CID(NS_SUBTREEITERATOR_CID);
     610             : NS_DEFINE_NAMED_CID(NS_CANVASRENDERINGCONTEXTWEBGL_CID);
     611             : NS_DEFINE_NAMED_CID(NS_TEXT_ENCODER_CID);
     612             : NS_DEFINE_NAMED_CID(NS_HTMLCOPY_TEXT_ENCODER_CID);
     613             : NS_DEFINE_NAMED_CID(NS_XMLCONTENTSERIALIZER_CID);
     614             : NS_DEFINE_NAMED_CID(NS_XHTMLCONTENTSERIALIZER_CID);
     615             : NS_DEFINE_NAMED_CID(NS_HTMLCONTENTSERIALIZER_CID);
     616             : NS_DEFINE_NAMED_CID(NS_PLAINTEXTSERIALIZER_CID);
     617             : NS_DEFINE_NAMED_CID(NS_PARSERUTILS_CID);
     618             : NS_DEFINE_NAMED_CID(NS_SCRIPTABLEUNESCAPEHTML_CID);
     619             : NS_DEFINE_NAMED_CID(NS_CONTENTPOLICY_CID);
     620             : NS_DEFINE_NAMED_CID(NS_DATADOCUMENTCONTENTPOLICY_CID);
     621             : NS_DEFINE_NAMED_CID(NS_NODATAPROTOCOLCONTENTPOLICY_CID);
     622             : NS_DEFINE_NAMED_CID(NS_XULCONTROLLERS_CID);
     623             : #ifdef MOZ_XUL
     624             : NS_DEFINE_NAMED_CID(NS_XULSORTSERVICE_CID);
     625             : NS_DEFINE_NAMED_CID(NS_XULDOCUMENT_CID);
     626             : #endif
     627             : NS_DEFINE_NAMED_CID(NS_CONTENT_DOCUMENT_LOADER_FACTORY_CID);
     628             : NS_DEFINE_NAMED_CID(NS_JSPROTOCOLHANDLER_CID);
     629             : NS_DEFINE_NAMED_CID(NS_JSURI_CID);
     630             : NS_DEFINE_NAMED_CID(NS_WINDOWCOMMANDTABLE_CID);
     631             : NS_DEFINE_NAMED_CID(NS_WINDOWCONTROLLER_CID);
     632             : NS_DEFINE_NAMED_CID(NS_PLUGINDOCLOADERFACTORY_CID);
     633             : NS_DEFINE_NAMED_CID(NS_PLUGINDOCUMENT_CID);
     634             : NS_DEFINE_NAMED_CID(NS_VIDEODOCUMENT_CID);
     635             : NS_DEFINE_NAMED_CID(NS_STYLESHEETSERVICE_CID);
     636             : NS_DEFINE_NAMED_CID(TRANSFORMIIX_XSLT_PROCESSOR_CID);
     637             : NS_DEFINE_NAMED_CID(TRANSFORMIIX_XPATH_EVALUATOR_CID);
     638             : NS_DEFINE_NAMED_CID(TRANSFORMIIX_NODESET_CID);
     639             : NS_DEFINE_NAMED_CID(NS_XMLSERIALIZER_CID);
     640             : NS_DEFINE_NAMED_CID(NS_FORMDATA_CID);
     641             : NS_DEFINE_NAMED_CID(NS_HOSTOBJECTURI_CID);
     642             : NS_DEFINE_NAMED_CID(NS_XMLHTTPREQUEST_CID);
     643             : NS_DEFINE_NAMED_CID(NS_DOMPARSER_CID);
     644             : NS_DEFINE_NAMED_CID(NS_DOMSESSIONSTORAGEMANAGER_CID);
     645             : NS_DEFINE_NAMED_CID(NS_DOMLOCALSTORAGEMANAGER_CID);
     646             : NS_DEFINE_NAMED_CID(NS_DOMJSON_CID);
     647             : NS_DEFINE_NAMED_CID(NS_TEXTEDITOR_CID);
     648             : NS_DEFINE_NAMED_CID(DOMREQUEST_SERVICE_CID);
     649             : NS_DEFINE_NAMED_CID(QUOTAMANAGER_SERVICE_CID);
     650             : NS_DEFINE_NAMED_CID(SERVICEWORKERMANAGER_CID);
     651             : NS_DEFINE_NAMED_CID(NOTIFICATIONTELEMETRYSERVICE_CID);
     652             : NS_DEFINE_NAMED_CID(PUSHNOTIFIER_CID);
     653             : NS_DEFINE_NAMED_CID(WORKERDEBUGGERMANAGER_CID);
     654             : NS_DEFINE_NAMED_CID(NS_AUDIOCHANNELAGENT_CID);
     655             : NS_DEFINE_NAMED_CID(NS_HTMLEDITOR_CID);
     656             : NS_DEFINE_NAMED_CID(NS_EDITORCONTROLLER_CID);
     657             : NS_DEFINE_NAMED_CID(NS_EDITINGCONTROLLER_CID);
     658             : NS_DEFINE_NAMED_CID(NS_EDITORCOMMANDTABLE_CID);
     659             : NS_DEFINE_NAMED_CID(NS_EDITINGCOMMANDTABLE_CID);
     660             : NS_DEFINE_NAMED_CID(NS_TEXTSERVICESDOCUMENT_CID);
     661             : NS_DEFINE_NAMED_CID(NS_GEOLOCATION_SERVICE_CID);
     662             : NS_DEFINE_NAMED_CID(NS_GEOLOCATION_CID);
     663             : NS_DEFINE_NAMED_CID(NS_AUDIOCHANNEL_SERVICE_CID);
     664             : NS_DEFINE_NAMED_CID(NS_WEBSOCKETEVENT_SERVICE_CID);
     665             : NS_DEFINE_NAMED_CID(NS_FLYWEB_SERVICE_CID);
     666             : NS_DEFINE_NAMED_CID(NS_FOCUSMANAGER_CID);
     667             : NS_DEFINE_NAMED_CID(NS_CONTENTSECURITYMANAGER_CID);
     668             : NS_DEFINE_NAMED_CID(CSPSERVICE_CID);
     669             : NS_DEFINE_NAMED_CID(NS_CSPCONTEXT_CID);
     670             : NS_DEFINE_NAMED_CID(NS_MIXEDCONTENTBLOCKER_CID);
     671             : NS_DEFINE_NAMED_CID(NS_EVENTLISTENERSERVICE_CID);
     672             : NS_DEFINE_NAMED_CID(NS_GLOBALMESSAGEMANAGER_CID);
     673             : NS_DEFINE_NAMED_CID(NS_PARENTPROCESSMESSAGEMANAGER_CID);
     674             : NS_DEFINE_NAMED_CID(NS_CHILDPROCESSMESSAGEMANAGER_CID);
     675             : NS_DEFINE_NAMED_CID(NS_SCRIPTSECURITYMANAGER_CID);
     676             : NS_DEFINE_NAMED_CID(NS_PRINCIPAL_CID);
     677             : NS_DEFINE_NAMED_CID(NS_SYSTEMPRINCIPAL_CID);
     678             : NS_DEFINE_NAMED_CID(NS_NULLPRINCIPAL_CID);
     679             : NS_DEFINE_NAMED_CID(THIRDPARTYUTIL_CID);
     680             : NS_DEFINE_NAMED_CID(NS_STRUCTUREDCLONECONTAINER_CID);
     681             : NS_DEFINE_NAMED_CID(NS_DEVICE_SENSORS_CID);
     682             : #if defined(ANDROID)
     683             : NS_DEFINE_NAMED_CID(NS_HAPTICFEEDBACK_CID);
     684             : #endif
     685             : NS_DEFINE_NAMED_CID(NS_POWERMANAGERSERVICE_CID);
     686             : NS_DEFINE_NAMED_CID(OSFILECONSTANTSSERVICE_CID);
     687             : NS_DEFINE_NAMED_CID(UDPSOCKETCHILD_CID);
     688             : NS_DEFINE_NAMED_CID(NS_TIMESERVICE_CID);
     689             : NS_DEFINE_NAMED_CID(NS_MEDIASTREAMCONTROLLERSERVICE_CID);
     690             : NS_DEFINE_NAMED_CID(NS_MEDIAMANAGERSERVICE_CID);
     691             : #ifdef MOZ_WEBSPEECH_TEST_BACKEND
     692             : NS_DEFINE_NAMED_CID(NS_FAKE_SPEECH_RECOGNITION_SERVICE_CID);
     693             : #endif
     694             : #ifdef MOZ_WEBSPEECH_POCKETSPHINX
     695             : NS_DEFINE_NAMED_CID(NS_POCKETSPHINX_SPEECH_RECOGNITION_SERVICE_CID);
     696             : #endif
     697             : #ifdef MOZ_WEBSPEECH
     698             : NS_DEFINE_NAMED_CID(NS_SYNTHVOICEREGISTRY_CID);
     699             : #endif
     700             : 
     701             : #ifdef ACCESSIBILITY
     702             : NS_DEFINE_NAMED_CID(NS_ACCESSIBILITY_SERVICE_CID);
     703             : #endif
     704             : 
     705             : NS_DEFINE_NAMED_CID(GECKO_MEDIA_PLUGIN_SERVICE_CID);
     706             : 
     707             : NS_DEFINE_NAMED_CID(PRESENTATION_SERVICE_CID);
     708             : NS_DEFINE_NAMED_CID(PRESENTATION_DEVICE_MANAGER_CID);
     709             : NS_DEFINE_NAMED_CID(PRESENTATION_TCP_SESSION_TRANSPORT_CID);
     710             : 
     711             : NS_DEFINE_NAMED_CID(TEXT_INPUT_PROCESSOR_CID);
     712             : 
     713             : NS_DEFINE_NAMED_CID(NS_SCRIPTERROR_CID);
     714             : 
     715             : static nsresult
     716           2 : CreateWindowCommandTableConstructor(nsISupports *aOuter,
     717             :                                     REFNSIID aIID, void **aResult)
     718             : {
     719             :   nsresult rv;
     720             :   nsCOMPtr<nsIControllerCommandTable> commandTable =
     721           4 :       do_CreateInstance(NS_CONTROLLERCOMMANDTABLE_CONTRACTID, &rv);
     722           2 :   if (NS_FAILED(rv)) return rv;
     723             : 
     724           2 :   rv = nsWindowCommandRegistration::RegisterWindowCommands(commandTable);
     725           2 :   if (NS_FAILED(rv)) return rv;
     726             : 
     727           2 :   return commandTable->QueryInterface(aIID, aResult);
     728             : }
     729             : 
     730             : static nsresult
     731           2 : CreateWindowControllerWithSingletonCommandTable(nsISupports *aOuter,
     732             :                                       REFNSIID aIID, void **aResult)
     733             : {
     734             :   nsresult rv;
     735             :   nsCOMPtr<nsIController> controller =
     736           4 :        do_CreateInstance("@mozilla.org/embedcomp/base-command-controller;1", &rv);
     737             : 
     738           2 :  if (NS_FAILED(rv)) return rv;
     739             : 
     740           4 :   nsCOMPtr<nsIControllerCommandTable> windowCommandTable = do_GetService(kNS_WINDOWCOMMANDTABLE_CID, &rv);
     741           2 :   if (NS_FAILED(rv)) return rv;
     742             : 
     743             :   // this is a singleton; make it immutable
     744           2 :   windowCommandTable->MakeImmutable();
     745             : 
     746           4 :   nsCOMPtr<nsIControllerContext> controllerContext = do_QueryInterface(controller, &rv);
     747           2 :   if (NS_FAILED(rv)) return rv;
     748             : 
     749           2 :   controllerContext->Init(windowCommandTable);
     750           2 :   if (NS_FAILED(rv)) return rv;
     751             : 
     752           2 :   return controller->QueryInterface(aIID, aResult);
     753             : }
     754             : 
     755             : // Constructor of a controller which is set up to use, internally, a
     756             : // singleton command-table pre-filled with editor commands.
     757             : static nsresult
     758           2 : EditorControllerConstructor(nsISupports* aOuter, REFNSIID aIID, void** aResult)
     759             : {
     760             :   nsresult rv;
     761           4 :   nsCOMPtr<nsIController> controller = do_CreateInstance("@mozilla.org/embedcomp/base-command-controller;1", &rv);
     762           2 :   if (NS_FAILED(rv)) return rv;
     763             : 
     764           4 :   nsCOMPtr<nsIControllerCommandTable> editorCommandTable = do_GetService(kNS_EDITORCOMMANDTABLE_CID, &rv);
     765           2 :   if (NS_FAILED(rv)) return rv;
     766             : 
     767             :   // this guy is a singleton, so make it immutable
     768           2 :   editorCommandTable->MakeImmutable();
     769             : 
     770           4 :   nsCOMPtr<nsIControllerContext> controllerContext = do_QueryInterface(controller, &rv);
     771           2 :   if (NS_FAILED(rv)) return rv;
     772             : 
     773           2 :   rv = controllerContext->Init(editorCommandTable);
     774           2 :   if (NS_FAILED(rv)) return rv;
     775             : 
     776           2 :   return controller->QueryInterface(aIID, aResult);
     777             : }
     778             : 
     779             : // Constructor of a controller which is set up to use, internally, a
     780             : // singleton command-table pre-filled with editing commands.
     781             : static nsresult
     782           2 : nsEditingControllerConstructor(nsISupports *aOuter, REFNSIID aIID,
     783             :                                 void **aResult)
     784             : {
     785             :   nsresult rv;
     786           4 :   nsCOMPtr<nsIController> controller = do_CreateInstance("@mozilla.org/embedcomp/base-command-controller;1", &rv);
     787           2 :   if (NS_FAILED(rv)) return rv;
     788             : 
     789           4 :   nsCOMPtr<nsIControllerCommandTable> editingCommandTable = do_GetService(kNS_EDITINGCOMMANDTABLE_CID, &rv);
     790           2 :   if (NS_FAILED(rv)) return rv;
     791             : 
     792             :   // this guy is a singleton, so make it immutable
     793           2 :   editingCommandTable->MakeImmutable();
     794             : 
     795           4 :   nsCOMPtr<nsIControllerContext> controllerContext = do_QueryInterface(controller, &rv);
     796           2 :   if (NS_FAILED(rv)) return rv;
     797             : 
     798           2 :   rv = controllerContext->Init(editingCommandTable);
     799           2 :   if (NS_FAILED(rv)) return rv;
     800             : 
     801           2 :   return controller->QueryInterface(aIID, aResult);
     802             : }
     803             : 
     804             : // Constructor for a command-table pre-filled with editor commands
     805             : static nsresult
     806           1 : nsEditorCommandTableConstructor(nsISupports *aOuter, REFNSIID aIID,
     807             :                                             void **aResult)
     808             : {
     809             :   nsresult rv;
     810             :   nsCOMPtr<nsIControllerCommandTable> commandTable =
     811           2 :       do_CreateInstance(NS_CONTROLLERCOMMANDTABLE_CONTRACTID, &rv);
     812           1 :   if (NS_FAILED(rv)) return rv;
     813             : 
     814           1 :   rv = EditorController::RegisterEditorCommands(commandTable);
     815           1 :   if (NS_FAILED(rv)) return rv;
     816             : 
     817             :   // we don't know here whether we're being created as an instance,
     818             :   // or a service, so we can't become immutable
     819             : 
     820           1 :   return commandTable->QueryInterface(aIID, aResult);
     821             : }
     822             : 
     823             : // Constructor for a command-table pre-filled with editing commands
     824             : static nsresult
     825           1 : nsEditingCommandTableConstructor(nsISupports *aOuter, REFNSIID aIID,
     826             :                                               void **aResult)
     827             : {
     828             :   nsresult rv;
     829             :   nsCOMPtr<nsIControllerCommandTable> commandTable =
     830           2 :       do_CreateInstance(NS_CONTROLLERCOMMANDTABLE_CONTRACTID, &rv);
     831           1 :   if (NS_FAILED(rv)) return rv;
     832             : 
     833           1 :   rv = EditorController::RegisterEditingCommands(commandTable);
     834           1 :   if (NS_FAILED(rv)) return rv;
     835             : 
     836             :   // we don't know here whether we're being created as an instance,
     837             :   // or a service, so we can't become immutable
     838             : 
     839           1 :   return commandTable->QueryInterface(aIID, aResult);
     840             : }
     841             : 
     842             : static const mozilla::Module::CIDEntry kLayoutCIDs[] = {
     843             :   XPCONNECT_CIDENTRIES
     844             : #ifdef DEBUG
     845             :   { &kNS_FRAME_UTIL_CID, false, nullptr, CreateNewFrameUtil },
     846             :   { &kNS_LAYOUT_DEBUGGER_CID, false, nullptr, CreateNewLayoutDebugger },
     847             : #endif
     848             :   { &kNS_FRAMETRAVERSAL_CID, false, nullptr, CreateNewFrameTraversal },
     849             :   { &kNS_BOXOBJECT_CID, false, nullptr, CreateNewBoxObject },
     850             : #ifdef MOZ_XUL
     851             :   { &kNS_LISTBOXOBJECT_CID, false, nullptr, CreateNewListBoxObject },
     852             :   { &kNS_MENUBOXOBJECT_CID, false, nullptr, CreateNewMenuBoxObject },
     853             :   { &kNS_POPUPBOXOBJECT_CID, false, nullptr, CreateNewPopupBoxObject },
     854             :   { &kNS_CONTAINERBOXOBJECT_CID, false, nullptr, CreateNewContainerBoxObject },
     855             :   { &kNS_SCROLLBOXOBJECT_CID, false, nullptr, CreateNewScrollBoxObject },
     856             :   { &kNS_TREEBOXOBJECT_CID, false, nullptr, CreateNewTreeBoxObject },
     857             : #endif // MOZ_XUL
     858             : #ifdef MOZ_XUL
     859             :   { &kIN_DOMVIEW_CID, false, nullptr, inDOMViewConstructor },
     860             : #endif
     861             :   { &kIN_DEEPTREEWALKER_CID, false, nullptr, inDeepTreeWalkerConstructor },
     862             :   { &kIN_CSSVALUESEARCH_CID, false, nullptr, inCSSValueSearchConstructor },
     863             :   { &kIN_DOMUTILS_CID, false, nullptr, inDOMUtilsConstructor },
     864             :   { &kNS_CONTENT_VIEWER_CID, false, nullptr, CreateContentViewer },
     865             :   { &kNS_HTMLDOCUMENT_CID, false, nullptr, CreateHTMLDocument },
     866             :   { &kNS_XMLDOCUMENT_CID, false, nullptr, CreateXMLDocument },
     867             :   { &kNS_SVGDOCUMENT_CID, false, nullptr, CreateSVGDocument },
     868             :   { &kNS_IMAGEDOCUMENT_CID, false, nullptr, CreateImageDocument },
     869             :   { &kNS_DOMSELECTION_CID, false, nullptr, CreateDOMSelection },
     870             :   { &kNS_CONTENTITERATOR_CID, false, nullptr, CreateContentIterator },
     871             :   { &kNS_PRECONTENTITERATOR_CID, false, nullptr, CreatePreContentIterator },
     872             :   { &kNS_SUBTREEITERATOR_CID, false, nullptr, CreateSubtreeIterator },
     873             :   { &kNS_CANVASRENDERINGCONTEXTWEBGL_CID, false, nullptr, CreateCanvasRenderingContextWebGL },
     874             :   { &kNS_TEXT_ENCODER_CID, false, nullptr, CreateTextEncoder },
     875             :   { &kNS_HTMLCOPY_TEXT_ENCODER_CID, false, nullptr, CreateHTMLCopyTextEncoder },
     876             :   { &kNS_XMLCONTENTSERIALIZER_CID, false, nullptr, CreateXMLContentSerializer },
     877             :   { &kNS_HTMLCONTENTSERIALIZER_CID, false, nullptr, CreateHTMLContentSerializer },
     878             :   { &kNS_XHTMLCONTENTSERIALIZER_CID, false, nullptr, CreateXHTMLContentSerializer },
     879             :   { &kNS_PLAINTEXTSERIALIZER_CID, false, nullptr, CreatePlainTextSerializer },
     880             :   { &kNS_PARSERUTILS_CID, false, nullptr, nsParserUtilsConstructor },
     881             :   { &kNS_SCRIPTABLEUNESCAPEHTML_CID, false, nullptr, nsParserUtilsConstructor },
     882             :   { &kNS_CONTENTPOLICY_CID, false, nullptr, CreateContentPolicy },
     883             :   { &kNS_DATADOCUMENTCONTENTPOLICY_CID, false, nullptr, nsDataDocumentContentPolicyConstructor },
     884             :   { &kNS_NODATAPROTOCOLCONTENTPOLICY_CID, false, nullptr, nsNoDataProtocolContentPolicyConstructor },
     885             :   { &kNS_XULCONTROLLERS_CID, false, nullptr, NS_NewXULControllers },
     886             : #ifdef MOZ_XUL
     887             :   { &kNS_XULSORTSERVICE_CID, false, nullptr, CreateXULSortService },
     888             :   { &kNS_XULDOCUMENT_CID, false, nullptr, CreateXULDocument },
     889             : #endif
     890             :   { &kNS_CONTENT_DOCUMENT_LOADER_FACTORY_CID, false, nullptr, CreateContentDLF },
     891             :   { &kNS_JSPROTOCOLHANDLER_CID, false, nullptr, nsJSProtocolHandler::Create },
     892             :   { &kNS_JSURI_CID, false, nullptr, nsJSURIConstructor },
     893             :   { &kNS_WINDOWCOMMANDTABLE_CID, false, nullptr, CreateWindowCommandTableConstructor },
     894             :   { &kNS_WINDOWCONTROLLER_CID, false, nullptr, CreateWindowControllerWithSingletonCommandTable },
     895             :   { &kNS_PLUGINDOCLOADERFACTORY_CID, false, nullptr, CreateContentDLF },
     896             :   { &kNS_PLUGINDOCUMENT_CID, false, nullptr, CreatePluginDocument },
     897             :   { &kNS_VIDEODOCUMENT_CID, false, nullptr, CreateVideoDocument },
     898             :   { &kNS_STYLESHEETSERVICE_CID, false, nullptr, nsStyleSheetServiceConstructor },
     899             :   { &kTRANSFORMIIX_XSLT_PROCESSOR_CID, false, nullptr, txMozillaXSLTProcessorConstructor },
     900             :   { &kTRANSFORMIIX_XPATH_EVALUATOR_CID, false, nullptr, XPathEvaluatorConstructor },
     901             :   { &kTRANSFORMIIX_NODESET_CID, false, nullptr, txNodeSetAdaptorConstructor },
     902             :   { &kNS_XMLSERIALIZER_CID, false, nullptr, nsDOMSerializerConstructor },
     903             :   { &kNS_FORMDATA_CID, false, nullptr, FormDataConstructor },
     904             :   { &kNS_HOSTOBJECTURI_CID, false, nullptr, nsHostObjectURIConstructor },
     905             :   { &kNS_XMLHTTPREQUEST_CID, false, nullptr, XMLHttpRequestMainThreadConstructor },
     906             :   { &kNS_DOMPARSER_CID, false, nullptr, DOMParserConstructor },
     907             :   { &kNS_XPCEXCEPTION_CID, false, nullptr, ExceptionConstructor },
     908             :   { &kNS_DOMSESSIONSTORAGEMANAGER_CID, false, nullptr, SessionStorageManagerConstructor },
     909             :   { &kNS_DOMLOCALSTORAGEMANAGER_CID, false, nullptr, LocalStorageManagerConstructor },
     910             :   { &kNS_DOMJSON_CID, false, nullptr, NS_NewJSON },
     911             :   { &kNS_TEXTEDITOR_CID, false, nullptr, TextEditorConstructor },
     912             :   { &kDOMREQUEST_SERVICE_CID, false, nullptr, DOMRequestServiceConstructor },
     913             :   { &kQUOTAMANAGER_SERVICE_CID, false, nullptr, QuotaManagerServiceConstructor },
     914             :   { &kSERVICEWORKERMANAGER_CID, false, nullptr, ServiceWorkerManagerConstructor },
     915             :   { &kNOTIFICATIONTELEMETRYSERVICE_CID, false, nullptr, NotificationTelemetryServiceConstructor },
     916             :   { &kPUSHNOTIFIER_CID, false, nullptr, PushNotifierConstructor },
     917             :   { &kWORKERDEBUGGERMANAGER_CID, true, nullptr, WorkerDebuggerManagerConstructor },
     918             :   { &kNS_AUDIOCHANNELAGENT_CID, true, nullptr, AudioChannelAgentConstructor },
     919             :   { &kNS_HTMLEDITOR_CID, false, nullptr, HTMLEditorConstructor },
     920             :   { &kNS_EDITORCONTROLLER_CID, false, nullptr, EditorControllerConstructor },
     921             :   { &kNS_EDITINGCONTROLLER_CID, false, nullptr, nsEditingControllerConstructor },
     922             :   { &kNS_EDITORCOMMANDTABLE_CID, false, nullptr, nsEditorCommandTableConstructor },
     923             :   { &kNS_EDITINGCOMMANDTABLE_CID, false, nullptr, nsEditingCommandTableConstructor },
     924             :   { &kNS_TEXTSERVICESDOCUMENT_CID, false, nullptr, nsTextServicesDocumentConstructor },
     925             :   { &kNS_GEOLOCATION_SERVICE_CID, false, nullptr, nsGeolocationServiceConstructor },
     926             :   { &kNS_GEOLOCATION_CID, false, nullptr, GeolocationConstructor },
     927             :   { &kNS_AUDIOCHANNEL_SERVICE_CID, false, nullptr, AudioChannelServiceConstructor },
     928             :   { &kNS_WEBSOCKETEVENT_SERVICE_CID, false, nullptr, WebSocketEventServiceConstructor },
     929             :   { &kNS_FLYWEB_SERVICE_CID, false, nullptr, FlyWebServiceConstructor },
     930             :   { &kNS_FOCUSMANAGER_CID, false, nullptr, CreateFocusManager },
     931             : #ifdef MOZ_WEBSPEECH_TEST_BACKEND
     932             :   { &kNS_FAKE_SPEECH_RECOGNITION_SERVICE_CID, false, nullptr, FakeSpeechRecognitionServiceConstructor },
     933             : #endif
     934             : #ifdef MOZ_WEBSPEECH_POCKETSPHINX
     935             :   { &kNS_POCKETSPHINX_SPEECH_RECOGNITION_SERVICE_CID, false, nullptr, PocketSphinxSpeechRecognitionServiceConstructor },
     936             : #endif
     937             : #ifdef MOZ_WEBSPEECH
     938             :   { &kNS_SYNTHVOICEREGISTRY_CID, true, nullptr, nsSynthVoiceRegistryConstructor },
     939             : #endif
     940             :   { &kNS_CONTENTSECURITYMANAGER_CID, false, nullptr, nsContentSecurityManagerConstructor },
     941             :   { &kCSPSERVICE_CID, false, nullptr, CSPServiceConstructor },
     942             :   { &kNS_CSPCONTEXT_CID, false, nullptr, nsCSPContextConstructor },
     943             :   { &kNS_MIXEDCONTENTBLOCKER_CID, false, nullptr, nsMixedContentBlockerConstructor },
     944             :   { &kNS_EVENTLISTENERSERVICE_CID, false, nullptr, CreateEventListenerService },
     945             :   { &kNS_GLOBALMESSAGEMANAGER_CID, false, nullptr, CreateGlobalMessageManager },
     946             :   { &kNS_PARENTPROCESSMESSAGEMANAGER_CID, false, nullptr, CreateParentMessageManager },
     947             :   { &kNS_CHILDPROCESSMESSAGEMANAGER_CID, false, nullptr, CreateChildMessageManager },
     948             :   { &kNS_SCRIPTSECURITYMANAGER_CID, false, nullptr, Construct_nsIScriptSecurityManager },
     949             :   { &kNS_PRINCIPAL_CID, false, nullptr, ContentPrincipalConstructor },
     950             :   { &kNS_SYSTEMPRINCIPAL_CID, false, nullptr, SystemPrincipalConstructor },
     951             :   { &kNS_NULLPRINCIPAL_CID, false, nullptr, NullPrincipalConstructor },
     952             :   { &kNS_DEVICE_SENSORS_CID, false, nullptr, nsDeviceSensorsConstructor },
     953             : #if defined(ANDROID)
     954             :   { &kNS_HAPTICFEEDBACK_CID, false, nullptr, nsHapticFeedbackConstructor },
     955             : #endif
     956             :   { &kTHIRDPARTYUTIL_CID, false, nullptr, ThirdPartyUtilConstructor },
     957             :   { &kNS_STRUCTUREDCLONECONTAINER_CID, false, nullptr, nsStructuredCloneContainerConstructor },
     958             :   { &kNS_POWERMANAGERSERVICE_CID, false, nullptr, nsIPowerManagerServiceConstructor, Module::ALLOW_IN_GPU_PROCESS },
     959             :   { &kOSFILECONSTANTSSERVICE_CID, true, nullptr, OSFileConstantsServiceConstructor },
     960             :   { &kUDPSOCKETCHILD_CID, false, nullptr, UDPSocketChildConstructor },
     961             :   { &kGECKO_MEDIA_PLUGIN_SERVICE_CID, true, nullptr, GeckoMediaPluginServiceConstructor },
     962             :   { &kNS_TIMESERVICE_CID, false, nullptr, nsITimeServiceConstructor },
     963             :   { &kNS_MEDIASTREAMCONTROLLERSERVICE_CID, false, nullptr, nsIStreamingProtocolControllerServiceConstructor },
     964             :   { &kNS_MEDIAMANAGERSERVICE_CID, false, nullptr, nsIMediaManagerServiceConstructor },
     965             : #ifdef ACCESSIBILITY
     966             :   { &kNS_ACCESSIBILITY_SERVICE_CID, false, nullptr, CreateA11yService },
     967             : #endif
     968             :   { &kPRESENTATION_SERVICE_CID, false, nullptr, nsIPresentationServiceConstructor },
     969             :   { &kPRESENTATION_DEVICE_MANAGER_CID, false, nullptr, PresentationDeviceManagerConstructor },
     970             :   { &kPRESENTATION_TCP_SESSION_TRANSPORT_CID, false, nullptr, PresentationTCPSessionTransportConstructor },
     971             :   { &kTEXT_INPUT_PROCESSOR_CID, false, nullptr, TextInputProcessorConstructor },
     972             :   { &kNS_SCRIPTERROR_CID, false, nullptr, nsScriptErrorConstructor },
     973             :   { nullptr }
     974             : };
     975             : 
     976             : static const mozilla::Module::ContractIDEntry kLayoutContracts[] = {
     977             :   XPCONNECT_CONTRACTS
     978             :   { "@mozilla.org/layout/xul-boxobject;1", &kNS_BOXOBJECT_CID },
     979             : #ifdef MOZ_XUL
     980             :   { "@mozilla.org/layout/xul-boxobject-listbox;1", &kNS_LISTBOXOBJECT_CID },
     981             :   { "@mozilla.org/layout/xul-boxobject-menu;1", &kNS_MENUBOXOBJECT_CID },
     982             :   { "@mozilla.org/layout/xul-boxobject-popup;1", &kNS_POPUPBOXOBJECT_CID },
     983             :   { "@mozilla.org/layout/xul-boxobject-container;1", &kNS_CONTAINERBOXOBJECT_CID },
     984             :   { "@mozilla.org/layout/xul-boxobject-scrollbox;1", &kNS_SCROLLBOXOBJECT_CID },
     985             :   { "@mozilla.org/layout/xul-boxobject-tree;1", &kNS_TREEBOXOBJECT_CID },
     986             : #endif // MOZ_XUL
     987             : #ifdef MOZ_XUL
     988             :   { "@mozilla.org/inspector/dom-view;1", &kIN_DOMVIEW_CID },
     989             : #endif
     990             :   { "@mozilla.org/inspector/deep-tree-walker;1", &kIN_DEEPTREEWALKER_CID },
     991             :   { "@mozilla.org/inspector/search;1?type=cssvalue", &kIN_CSSVALUESEARCH_CID },
     992             :   { IN_DOMUTILS_CONTRACTID, &kIN_DOMUTILS_CID },
     993             :   { "@mozilla.org/xml/xml-document;1", &kNS_XMLDOCUMENT_CID },
     994             :   { "@mozilla.org/svg/svg-document;1", &kNS_SVGDOCUMENT_CID },
     995             :   { "@mozilla.org/content/dom-selection;1", &kNS_DOMSELECTION_CID },
     996             :   { "@mozilla.org/content/post-content-iterator;1", &kNS_CONTENTITERATOR_CID },
     997             :   { "@mozilla.org/content/pre-content-iterator;1", &kNS_PRECONTENTITERATOR_CID },
     998             :   { "@mozilla.org/content/subtree-content-iterator;1", &kNS_SUBTREEITERATOR_CID },
     999             :   { "@mozilla.org/content/canvas-rendering-context;1?id=webgl", &kNS_CANVASRENDERINGCONTEXTWEBGL_CID },
    1000             :   { NS_DOC_ENCODER_CONTRACTID_BASE "text/xml", &kNS_TEXT_ENCODER_CID },
    1001             :   { NS_DOC_ENCODER_CONTRACTID_BASE "application/xml", &kNS_TEXT_ENCODER_CID },
    1002             :   { NS_DOC_ENCODER_CONTRACTID_BASE "application/xhtml+xml", &kNS_TEXT_ENCODER_CID },
    1003             :   { NS_DOC_ENCODER_CONTRACTID_BASE "image/svg+xml", &kNS_TEXT_ENCODER_CID },
    1004             :   { NS_DOC_ENCODER_CONTRACTID_BASE "text/html", &kNS_TEXT_ENCODER_CID },
    1005             :   { NS_DOC_ENCODER_CONTRACTID_BASE "text/plain", &kNS_TEXT_ENCODER_CID },
    1006             :   { NS_HTMLCOPY_ENCODER_CONTRACTID, &kNS_HTMLCOPY_TEXT_ENCODER_CID },
    1007             :   { NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "text/xml", &kNS_XMLCONTENTSERIALIZER_CID },
    1008             :   { NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "application/xml", &kNS_XMLCONTENTSERIALIZER_CID },
    1009             :   { NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "application/xhtml+xml", &kNS_XHTMLCONTENTSERIALIZER_CID },
    1010             :   { NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "image/svg+xml", &kNS_XMLCONTENTSERIALIZER_CID },
    1011             :   { NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "text/html", &kNS_HTMLCONTENTSERIALIZER_CID },
    1012             :   { NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "application/vnd.mozilla.xul+xml", &kNS_XMLCONTENTSERIALIZER_CID },
    1013             :   { NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "text/plain", &kNS_PLAINTEXTSERIALIZER_CID },
    1014             :   { NS_PARSERUTILS_CONTRACTID, &kNS_PARSERUTILS_CID },
    1015             :   { NS_SCRIPTABLEUNESCAPEHTML_CONTRACTID, &kNS_SCRIPTABLEUNESCAPEHTML_CID },
    1016             :   { NS_CONTENTPOLICY_CONTRACTID, &kNS_CONTENTPOLICY_CID },
    1017             :   { NS_DATADOCUMENTCONTENTPOLICY_CONTRACTID, &kNS_DATADOCUMENTCONTENTPOLICY_CID },
    1018             :   { NS_NODATAPROTOCOLCONTENTPOLICY_CONTRACTID, &kNS_NODATAPROTOCOLCONTENTPOLICY_CID },
    1019             :   { "@mozilla.org/xul/xul-controllers;1", &kNS_XULCONTROLLERS_CID },
    1020             : #ifdef MOZ_XUL
    1021             :   { "@mozilla.org/xul/xul-sort-service;1", &kNS_XULSORTSERVICE_CID },
    1022             :   { "@mozilla.org/xul/xul-document;1", &kNS_XULDOCUMENT_CID },
    1023             : #endif
    1024             :   { CONTENT_DLF_CONTRACTID, &kNS_CONTENT_DOCUMENT_LOADER_FACTORY_CID },
    1025             :   { NS_JSPROTOCOLHANDLER_CONTRACTID, &kNS_JSPROTOCOLHANDLER_CID },
    1026             :   { NS_WINDOWCONTROLLER_CONTRACTID, &kNS_WINDOWCONTROLLER_CID },
    1027             :   { PLUGIN_DLF_CONTRACTID, &kNS_PLUGINDOCLOADERFACTORY_CID },
    1028             :   { NS_STYLESHEETSERVICE_CONTRACTID, &kNS_STYLESHEETSERVICE_CID },
    1029             :   { TRANSFORMIIX_XSLT_PROCESSOR_CONTRACTID, &kTRANSFORMIIX_XSLT_PROCESSOR_CID },
    1030             :   { NS_XPATH_EVALUATOR_CONTRACTID, &kTRANSFORMIIX_XPATH_EVALUATOR_CID },
    1031             :   { TRANSFORMIIX_NODESET_CONTRACTID, &kTRANSFORMIIX_NODESET_CID },
    1032             :   { NS_XMLSERIALIZER_CONTRACTID, &kNS_XMLSERIALIZER_CID },
    1033             :   { NS_FORMDATA_CONTRACTID, &kNS_FORMDATA_CID },
    1034             :   { NS_XMLHTTPREQUEST_CONTRACTID, &kNS_XMLHTTPREQUEST_CID },
    1035             :   { NS_DOMPARSER_CONTRACTID, &kNS_DOMPARSER_CID },
    1036             :   { XPC_EXCEPTION_CONTRACTID, &kNS_XPCEXCEPTION_CID },
    1037             :   { "@mozilla.org/dom/localStorage-manager;1", &kNS_DOMLOCALSTORAGEMANAGER_CID },
    1038             :   // Keeping the old ContractID for backward compatibility
    1039             :   { "@mozilla.org/dom/storagemanager;1", &kNS_DOMLOCALSTORAGEMANAGER_CID },
    1040             :   { "@mozilla.org/dom/sessionStorage-manager;1", &kNS_DOMSESSIONSTORAGEMANAGER_CID },
    1041             :   { "@mozilla.org/dom/json;1", &kNS_DOMJSON_CID },
    1042             :   { "@mozilla.org/editor/texteditor;1", &kNS_TEXTEDITOR_CID },
    1043             :   { DOMREQUEST_SERVICE_CONTRACTID, &kDOMREQUEST_SERVICE_CID },
    1044             :   { QUOTAMANAGER_SERVICE_CONTRACTID, &kQUOTAMANAGER_SERVICE_CID },
    1045             :   { SERVICEWORKERMANAGER_CONTRACTID, &kSERVICEWORKERMANAGER_CID },
    1046             :   { NOTIFICATIONTELEMETRYSERVICE_CONTRACTID, &kNOTIFICATIONTELEMETRYSERVICE_CID },
    1047             :   { PUSHNOTIFIER_CONTRACTID, &kPUSHNOTIFIER_CID },
    1048             :   { WORKERDEBUGGERMANAGER_CONTRACTID, &kWORKERDEBUGGERMANAGER_CID },
    1049             :   { NS_AUDIOCHANNELAGENT_CONTRACTID, &kNS_AUDIOCHANNELAGENT_CID },
    1050             :   { "@mozilla.org/editor/htmleditor;1", &kNS_HTMLEDITOR_CID },
    1051             :   { "@mozilla.org/editor/editorcontroller;1", &kNS_EDITORCONTROLLER_CID },
    1052             :   { "@mozilla.org/editor/editingcontroller;1", &kNS_EDITINGCONTROLLER_CID },
    1053             :   { "@mozilla.org/textservices/textservicesdocument;1", &kNS_TEXTSERVICESDOCUMENT_CID },
    1054             :   { "@mozilla.org/geolocation/service;1", &kNS_GEOLOCATION_SERVICE_CID },
    1055             :   { "@mozilla.org/geolocation;1", &kNS_GEOLOCATION_CID },
    1056             :   { "@mozilla.org/audiochannel/service;1", &kNS_AUDIOCHANNEL_SERVICE_CID },
    1057             :   { "@mozilla.org/websocketevent/service;1", &kNS_WEBSOCKETEVENT_SERVICE_CID },
    1058             :   { "@mozilla.org/flyweb-service;1", &kNS_FLYWEB_SERVICE_CID },
    1059             :   { NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "flyweb", &kNS_FLYWEB_SERVICE_CID },
    1060             :   { "@mozilla.org/focus-manager;1", &kNS_FOCUSMANAGER_CID },
    1061             : #ifdef MOZ_WEBSPEECH_TEST_BACKEND
    1062             :   { NS_SPEECH_RECOGNITION_SERVICE_CONTRACTID_PREFIX "fake", &kNS_FAKE_SPEECH_RECOGNITION_SERVICE_CID },
    1063             : #endif
    1064             : #ifdef MOZ_WEBSPEECH_POCKETSPHINX
    1065             :   { NS_SPEECH_RECOGNITION_SERVICE_CONTRACTID_PREFIX "pocketsphinx-en-US", &kNS_POCKETSPHINX_SPEECH_RECOGNITION_SERVICE_CID },
    1066             : #endif
    1067             : #ifdef MOZ_WEBSPEECH
    1068             :   { NS_SYNTHVOICEREGISTRY_CONTRACTID, &kNS_SYNTHVOICEREGISTRY_CID },
    1069             : #endif
    1070             :   { NS_CONTENTSECURITYMANAGER_CONTRACTID, &kNS_CONTENTSECURITYMANAGER_CID },
    1071             :   { CSPSERVICE_CONTRACTID, &kCSPSERVICE_CID },
    1072             :   { NS_CSPCONTEXT_CONTRACTID, &kNS_CSPCONTEXT_CID },
    1073             :   { NS_MIXEDCONTENTBLOCKER_CONTRACTID, &kNS_MIXEDCONTENTBLOCKER_CID },
    1074             :   { NS_EVENTLISTENERSERVICE_CONTRACTID, &kNS_EVENTLISTENERSERVICE_CID },
    1075             :   { NS_GLOBALMESSAGEMANAGER_CONTRACTID, &kNS_GLOBALMESSAGEMANAGER_CID },
    1076             :   { NS_PARENTPROCESSMESSAGEMANAGER_CONTRACTID, &kNS_PARENTPROCESSMESSAGEMANAGER_CID },
    1077             :   { NS_CHILDPROCESSMESSAGEMANAGER_CONTRACTID, &kNS_CHILDPROCESSMESSAGEMANAGER_CID },
    1078             :   { NS_SCRIPTSECURITYMANAGER_CONTRACTID, &kNS_SCRIPTSECURITYMANAGER_CID },
    1079             :   { NS_PRINCIPAL_CONTRACTID, &kNS_PRINCIPAL_CID },
    1080             :   { NS_SYSTEMPRINCIPAL_CONTRACTID, &kNS_SYSTEMPRINCIPAL_CID },
    1081             :   { NS_NULLPRINCIPAL_CONTRACTID, &kNS_NULLPRINCIPAL_CID },
    1082             :   { NS_DEVICE_SENSORS_CONTRACTID, &kNS_DEVICE_SENSORS_CID },
    1083             : #if defined(ANDROID)
    1084             :   { "@mozilla.org/widget/hapticfeedback;1", &kNS_HAPTICFEEDBACK_CID },
    1085             : #endif
    1086             :   { THIRDPARTYUTIL_CONTRACTID, &kTHIRDPARTYUTIL_CID },
    1087             :   { NS_STRUCTUREDCLONECONTAINER_CONTRACTID, &kNS_STRUCTUREDCLONECONTAINER_CID },
    1088             :   { POWERMANAGERSERVICE_CONTRACTID, &kNS_POWERMANAGERSERVICE_CID, Module::ALLOW_IN_GPU_PROCESS },
    1089             :   { OSFILECONSTANTSSERVICE_CONTRACTID, &kOSFILECONSTANTSSERVICE_CID },
    1090             :   { "@mozilla.org/udp-socket-child;1", &kUDPSOCKETCHILD_CID },
    1091             :   { TIMESERVICE_CONTRACTID, &kNS_TIMESERVICE_CID },
    1092             :   { MEDIASTREAMCONTROLLERSERVICE_CONTRACTID, &kNS_MEDIASTREAMCONTROLLERSERVICE_CID },
    1093             :   { MEDIAMANAGERSERVICE_CONTRACTID, &kNS_MEDIAMANAGERSERVICE_CID },
    1094             : #ifdef ACCESSIBILITY
    1095             :   { "@mozilla.org/accessibilityService;1", &kNS_ACCESSIBILITY_SERVICE_CID },
    1096             :   { "@mozilla.org/accessibleRetrieval;1", &kNS_ACCESSIBILITY_SERVICE_CID },
    1097             : #endif
    1098             :   { "@mozilla.org/gecko-media-plugin-service;1",  &kGECKO_MEDIA_PLUGIN_SERVICE_CID },
    1099             :   { PRESENTATION_SERVICE_CONTRACTID, &kPRESENTATION_SERVICE_CID },
    1100             :   { PRESENTATION_DEVICE_MANAGER_CONTRACTID, &kPRESENTATION_DEVICE_MANAGER_CID },
    1101             :   { PRESENTATION_TCP_SESSION_TRANSPORT_CONTRACTID, &kPRESENTATION_TCP_SESSION_TRANSPORT_CID },
    1102             :   { "@mozilla.org/text-input-processor;1", &kTEXT_INPUT_PROCESSOR_CID },
    1103             :   { NS_SCRIPTERROR_CONTRACTID, &kNS_SCRIPTERROR_CID },
    1104             :   { nullptr }
    1105             : };
    1106             : 
    1107             : static const mozilla::Module::CategoryEntry kLayoutCategories[] = {
    1108             :   XPCONNECT_CATEGORIES
    1109             :   { "content-policy", NS_DATADOCUMENTCONTENTPOLICY_CONTRACTID, NS_DATADOCUMENTCONTENTPOLICY_CONTRACTID },
    1110             :   { "content-policy", NS_NODATAPROTOCOLCONTENTPOLICY_CONTRACTID, NS_NODATAPROTOCOLCONTENTPOLICY_CONTRACTID },
    1111             :   { "content-policy", "CSPService", CSPSERVICE_CONTRACTID },
    1112             :   { "content-policy", NS_MIXEDCONTENTBLOCKER_CONTRACTID, NS_MIXEDCONTENTBLOCKER_CONTRACTID },
    1113             :   { "net-channel-event-sinks", "CSPService", CSPSERVICE_CONTRACTID },
    1114             :   { "net-channel-event-sinks", NS_MIXEDCONTENTBLOCKER_CONTRACTID, NS_MIXEDCONTENTBLOCKER_CONTRACTID },
    1115             :   { "app-startup", "Script Security Manager", "service," NS_SCRIPTSECURITYMANAGER_CONTRACTID },
    1116             :   { "app-startup", "Push Notifier", "service," PUSHNOTIFIER_CONTRACTID },
    1117             :   { "clear-origin-attributes-data", "QuotaManagerService", "service," QUOTAMANAGER_SERVICE_CONTRACTID },
    1118             :   { OBSERVER_TOPIC_IDLE_DAILY, "QuotaManagerService", QUOTAMANAGER_SERVICE_CONTRACTID },
    1119             :   CONTENTDLF_CATEGORIES
    1120             :   { "profile-after-change", "PresentationDeviceManager", PRESENTATION_DEVICE_MANAGER_CONTRACTID },
    1121             :   { "profile-after-change", "PresentationService", PRESENTATION_SERVICE_CONTRACTID },
    1122             :   { "profile-after-change", "Notification Telemetry Service", NOTIFICATIONTELEMETRYSERVICE_CONTRACTID },
    1123             :   { nullptr }
    1124             : };
    1125             : 
    1126             : static void
    1127           0 : LayoutModuleDtor()
    1128             : {
    1129           0 :   if (XRE_GetProcessType() == GeckoProcessType_GPU) {
    1130           0 :     return;
    1131             :   }
    1132             : 
    1133           0 :   Shutdown();
    1134           0 :   nsContentUtils::XPCOMShutdown();
    1135             : 
    1136             :   // Layout depends heavily on gfx and imagelib, so we want to make sure that
    1137             :   // these modules are shut down after all the layout cleanup runs.
    1138           0 :   mozilla::image::ShutdownModule();
    1139           0 :   gfxPlatform::Shutdown();
    1140           0 :   gfx::gfxVars::Shutdown();
    1141             : 
    1142           0 :   nsScriptSecurityManager::Shutdown();
    1143           0 :   xpcModuleDtor();
    1144             : }
    1145             : 
    1146             : static const mozilla::Module kLayoutModule = {
    1147             :   mozilla::Module::kVersion,
    1148             :   kLayoutCIDs,
    1149             :   kLayoutContracts,
    1150             :   kLayoutCategories,
    1151             :   nullptr,
    1152             :   Initialize,
    1153             :   LayoutModuleDtor,
    1154             :   Module::ALLOW_IN_GPU_PROCESS
    1155             : };
    1156             : 
    1157             : NSMODULE_DEFN(nsLayoutModule) = &kLayoutModule;

Generated by: LCOV version 1.13