layout/build/nsLayoutModule.cpp

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     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/. */
     6 #include "base/basictypes.h"
     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 "nsHTMLStyleSheet.h"
    32 #include "nsILayoutDebugger.h"
    33 #include "nsNameSpaceManager.h"
    34 #include "nsINodeInfo.h"
    35 #include "nsIObserver.h"
    36 #include "nsIObserverService.h"
    37 #include "nsIScriptNameSpaceManager.h"
    38 #include "nsISelection.h"
    39 #include "nsCaret.h"
    40 #include "nsPlainTextSerializer.h"
    41 #include "nsXMLContentSerializer.h"
    42 #include "nsXHTMLContentSerializer.h"
    43 #include "nsRuleNode.h"
    44 #include "nsContentAreaDragDrop.h"
    45 #include "nsContentList.h"
    46 #include "nsBox.h"
    47 #include "nsIFrameTraversal.h"
    48 #include "nsLayoutCID.h"
    49 #include "nsStyleSheetService.h"
    50 #include "nsFocusManager.h"
    51 #include "ThirdPartyUtil.h"
    52 #include "nsStructuredCloneContainer.h"
    54 #include "nsIEventListenerService.h"
    55 #include "nsIMessageManager.h"
    57 // Transformiix stuff
    58 #include "mozilla/dom/XPathEvaluator.h"
    59 #include "txMozillaXSLTProcessor.h"
    60 #include "txNodeSetAdaptor.h"
    62 #include "mozilla/dom/DOMParser.h"
    63 #include "nsDOMSerializer.h"
    64 #include "nsXMLHttpRequest.h"
    65 #include "nsChannelPolicy.h"
    67 // view stuff
    68 #include "nsContentCreatorFunctions.h"
    70 // DOM includes
    71 #include "nsDOMBlobBuilder.h"
    72 #include "nsDOMFileReader.h"
    74 #include "gfxPlatform.h"
    75 #include "nsFormData.h"
    76 #include "nsHostObjectProtocolHandler.h"
    77 #include "nsHostObjectURI.h"
    78 #include "nsGlobalWindowCommands.h"
    79 #include "nsIControllerCommandTable.h"
    80 #include "nsJSProtocolHandler.h"
    81 #include "nsScriptNameSpaceManager.h"
    82 #include "nsIControllerContext.h"
    83 #include "nsDOMScriptObjectFactory.h"
    84 #include "DOMStorageManager.h"
    85 #include "nsJSON.h"
    86 #include "nsZipArchive.h"
    87 #include "mozIApplicationClearPrivateDataParams.h"
    88 #include "mozilla/Attributes.h"
    89 #include "mozilla/dom/DOMException.h"
    90 #include "mozilla/dom/DOMRequest.h"
    91 #include "mozilla/dom/indexedDB/IndexedDatabaseManager.h"
    92 #include "mozilla/dom/network/TCPSocketChild.h"
    93 #include "mozilla/dom/network/TCPSocketParent.h"
    94 #include "mozilla/dom/network/TCPServerSocketChild.h"
    95 #include "mozilla/dom/network/UDPSocketChild.h"
    96 #include "mozilla/dom/quota/QuotaManager.h"
    97 #include "mozilla/OSFileConstants.h"
    98 #include "mozilla/Services.h"
   100 #ifdef MOZ_WEBSPEECH
   101 #include "mozilla/dom/FakeSpeechRecognitionService.h"
   102 #include "mozilla/dom/nsSynthVoiceRegistry.h"
   103 #endif
   105 #ifdef MOZ_WIDGET_GONK
   106 #include "SystemWorkerManager.h"
   107 using mozilla::dom::gonk::SystemWorkerManager;
   108 #define SYSTEMWORKERMANAGER_CID \
   109   {0xd53b6524, 0x6ac3, 0x42b0, {0xae, 0xca, 0x62, 0xb3, 0xc4, 0xe5, 0x2b, 0x04}}
   110 #define SYSTEMWORKERMANAGER_CONTRACTID \
   111   "@mozilla.org/telephony/system-worker-manager;1"
   112 #endif
   114 #ifdef MOZ_B2G_BT
   115 #include "BluetoothService.h"
   116 using mozilla::dom::bluetooth::BluetoothService;
   117 #define BLUETOOTHSERVICE_CID \
   118   {0xa753b487, 0x3344, 0x4de4, {0xad, 0x5f, 0x06, 0x36, 0x76, 0xa7, 0xc1, 0x04}}
   119 #define BLUETOOTHSERVICE_CONTRACTID \
   120   "@mozilla.org/bluetooth/service;1"
   121 #endif
   123 #ifdef MOZ_WIDGET_GONK
   124 #include "AudioManager.h"
   125 using mozilla::dom::gonk::AudioManager;
   126 #include "nsVolumeService.h"
   127 using mozilla::system::nsVolumeService;
   128 #endif
   130 #include "AudioChannelAgent.h"
   131 using mozilla::dom::AudioChannelAgent;
   133 // Editor stuff
   134 #include "nsEditorCID.h"
   135 #include "nsEditor.h"
   136 #include "nsPlaintextEditor.h"
   137 #include "nsEditorController.h" //CID
   139 #include "nsHTMLEditor.h"
   140 #include "nsTextServicesDocument.h"
   141 #include "nsTextServicesCID.h"
   143 #include "nsScriptSecurityManager.h"
   144 #include "nsPrincipal.h"
   145 #include "nsSystemPrincipal.h"
   146 #include "nsNullPrincipal.h"
   147 #include "nsNetCID.h"
   148 #ifndef MOZ_WIDGET_GONK
   149 #if defined(MOZ_WIDGET_ANDROID)
   150 #include "nsHapticFeedback.h"
   151 #endif
   152 #endif
   153 #include "nsParserUtils.h"
   155 #define NS_EDITORCOMMANDTABLE_CID \
   156 { 0x4f5e62b8, 0xd659, 0x4156, { 0x84, 0xfc, 0x2f, 0x60, 0x99, 0x40, 0x03, 0x69 }}
   158 #define NS_EDITINGCOMMANDTABLE_CID \
   159 { 0xcb38a746, 0xbeb8, 0x43f3, { 0x94, 0x29, 0x77, 0x96, 0xe1, 0xa9, 0x3f, 0xb4 }}
   161 #define NS_HAPTICFEEDBACK_CID \
   162 { 0x1f15dbc8, 0xbfaa, 0x45de, \
   163 { 0x8a, 0x46, 0x08, 0xe2, 0xe2, 0x63, 0x26, 0xb0 } }
   165 NS_GENERIC_FACTORY_CONSTRUCTOR(nsPlaintextEditor)
   167 NS_GENERIC_FACTORY_CONSTRUCTOR(nsParserUtils)
   169 NS_GENERIC_FACTORY_CONSTRUCTOR(nsTextServicesDocument)
   170 NS_GENERIC_FACTORY_CONSTRUCTOR(nsHTMLEditor)
   172 #include "nsHTMLCanvasFrame.h"
   174 #include "nsIDOMWebGLRenderingContext.h"
   176 class nsIDocumentLoaderFactory;
   178 #define PRODUCT_NAME "Gecko"
   180 /* 0ddf4df8-4dbb-4133-8b79-9afb966514f5 */
   181 #define NS_PLUGINDOCLOADERFACTORY_CID \
   182 { 0x0ddf4df8, 0x4dbb, 0x4133, { 0x8b, 0x79, 0x9a, 0xfb, 0x96, 0x65, 0x14, 0xf5 } }
   184 #define NS_WINDOWCOMMANDTABLE_CID \
   185  { /* 0DE2FBFA-6B7F-11D7-BBBA-0003938A9D96 */        \
   186   0x0DE2FBFA, 0x6B7F, 0x11D7, {0xBB, 0xBA, 0x00, 0x03, 0x93, 0x8A, 0x9D, 0x96} }
   188 #include "nsIBoxObject.h"
   190 #ifdef MOZ_XUL
   191 #include "inDOMView.h"
   192 #endif /* MOZ_XUL */
   194 #include "inDeepTreeWalker.h"
   195 #include "inFlasher.h"
   196 #include "inCSSValueSearch.h"
   197 #include "inDOMUtils.h"
   199 #ifdef MOZ_XUL
   200 #include "nsIXULDocument.h"
   201 #include "nsIXULSortService.h"
   203 nsresult
   204 NS_NewXULContentBuilder(nsISupports* aOuter, REFNSIID aIID, void** aResult);
   206 nsresult
   207 NS_NewXULTreeBuilder(nsISupports* aOuter, REFNSIID aIID, void** aResult);
   208 #endif
   210 static void Shutdown();
   212 #include "nsGeolocation.h"
   213 #include "nsDeviceSensors.h"
   214 #ifdef MOZ_GAMEPAD
   215 #include "mozilla/dom/GamepadService.h"
   216 #endif
   217 #include "nsCSPService.h"
   218 #include "nsISmsService.h"
   219 #include "nsIMmsService.h"
   220 #include "nsIMobileMessageService.h"
   221 #include "nsIMobileMessageDatabaseService.h"
   222 #include "mozilla/dom/mobilemessage/MobileMessageService.h"
   223 #include "mozilla/dom/mobilemessage/SmsServicesFactory.h"
   224 #include "nsIPowerManagerService.h"
   225 #include "nsIAlarmHalService.h"
   226 #include "nsIMediaManager.h"
   227 #include "nsMixedContentBlocker.h"
   229 #include "AudioChannelService.h"
   231 #include "mozilla/dom/power/PowerManagerService.h"
   232 #include "mozilla/dom/alarm/AlarmHalService.h"
   233 #include "mozilla/dom/time/TimeService.h"
   234 #include "StreamingProtocolService.h"
   236 #include "mozilla/dom/telephony/TelephonyFactory.h"
   237 #include "nsITelephonyProvider.h"
   239 #ifdef MOZ_WIDGET_GONK
   240 #include "GonkGPSGeolocationProvider.h"
   241 #endif
   242 #include "MediaManager.h"
   244 using namespace mozilla;
   245 using namespace mozilla::dom;
   246 using namespace mozilla::dom::mobilemessage;
   247 using namespace mozilla::dom::telephony;
   248 using mozilla::dom::alarm::AlarmHalService;
   249 using mozilla::dom::indexedDB::IndexedDatabaseManager;
   250 using mozilla::dom::power::PowerManagerService;
   251 using mozilla::dom::quota::QuotaManager;
   252 using mozilla::dom::TCPSocketChild;
   253 using mozilla::dom::TCPSocketParent;
   254 using mozilla::dom::TCPServerSocketChild;
   255 using mozilla::dom::UDPSocketChild;
   256 using mozilla::dom::time::TimeService;
   257 using mozilla::net::StreamingProtocolControllerService;
   259 // Transformiix
   260 /* 5d5d92cd-6bf8-11d9-bf4a-000a95dc234c */
   261 #define TRANSFORMIIX_NODESET_CID \
   262 { 0x5d5d92cd, 0x6bf8, 0x11d9, { 0xbf, 0x4a, 0x0, 0x0a, 0x95, 0xdc, 0x23, 0x4c } }
   264 #define TRANSFORMIIX_NODESET_CONTRACTID \
   265 "@mozilla.org/transformiix-nodeset;1"
   267 // Factory Constructor
   268 NS_GENERIC_FACTORY_CONSTRUCTOR(txMozillaXSLTProcessor)
   269 NS_GENERIC_FACTORY_CONSTRUCTOR(XPathEvaluator)
   270 NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(txNodeSetAdaptor, Init)
   271 NS_GENERIC_FACTORY_CONSTRUCTOR(nsDOMSerializer)
   272 NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsXMLHttpRequest, Init)
   273 NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsDOMFileReader, Init)
   274 NS_GENERIC_FACTORY_CONSTRUCTOR(nsFormData)
   275 NS_GENERIC_FACTORY_CONSTRUCTOR(nsBlobProtocolHandler)
   276 NS_GENERIC_FACTORY_CONSTRUCTOR(nsMediaStreamProtocolHandler)
   277 NS_GENERIC_FACTORY_CONSTRUCTOR(nsMediaSourceProtocolHandler)
   278 NS_GENERIC_FACTORY_CONSTRUCTOR(nsFontTableProtocolHandler)
   279 NS_GENERIC_FACTORY_CONSTRUCTOR(nsHostObjectURI)
   280 NS_GENERIC_FACTORY_CONSTRUCTOR(DOMParser)
   281 NS_GENERIC_FACTORY_CONSTRUCTOR(Exception)
   282 NS_GENERIC_FACTORY_CONSTRUCTOR(DOMSessionStorageManager)
   283 NS_GENERIC_FACTORY_CONSTRUCTOR(DOMLocalStorageManager)
   284 NS_GENERIC_FACTORY_CONSTRUCTOR(nsChannelPolicy)
   285 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(IndexedDatabaseManager,
   286                                          IndexedDatabaseManager::FactoryCreate)
   287 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(DOMRequestService,
   288                                          DOMRequestService::FactoryCreate)
   289 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(QuotaManager,
   290                                          QuotaManager::FactoryCreate)
   291 #ifdef MOZ_WIDGET_GONK
   292 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(SystemWorkerManager,
   293                                          SystemWorkerManager::FactoryCreate)
   294 #endif
   295 #ifdef MOZ_B2G_BT
   296 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(BluetoothService,
   297                                          BluetoothService::FactoryCreate)
   298 #endif
   300 #ifdef MOZ_WEBSPEECH
   301 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsSynthVoiceRegistry,
   302                                          nsSynthVoiceRegistry::GetInstanceForService)
   303 #endif
   305 #ifdef MOZ_WIDGET_GONK
   306 NS_GENERIC_FACTORY_CONSTRUCTOR(AudioManager)
   307 #endif
   309 NS_GENERIC_FACTORY_CONSTRUCTOR(AudioChannelAgent)
   311 NS_GENERIC_FACTORY_CONSTRUCTOR(nsDeviceSensors)
   313 #ifndef MOZ_WIDGET_GONK
   314 #if defined(ANDROID)
   315 NS_GENERIC_FACTORY_CONSTRUCTOR(nsHapticFeedback)
   316 #endif
   317 #endif
   318 NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(ThirdPartyUtil, Init)
   319 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsISmsService,
   320                                          SmsServicesFactory::CreateSmsService)
   321 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIMmsService,
   322                                          SmsServicesFactory::CreateMmsService)
   323 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIMobileMessageService,
   324                                          MobileMessageService::GetInstance)
   325 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIMobileMessageDatabaseService,
   326                                          SmsServicesFactory::CreateMobileMessageDatabaseService)
   327 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIPowerManagerService,
   328                                          PowerManagerService::GetInstance)
   329 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIAlarmHalService,
   330                                          AlarmHalService::GetInstance)
   331 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsITimeService,
   332                                          TimeService::GetInstance)
   333 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIStreamingProtocolControllerService,
   334                                          StreamingProtocolControllerService::GetInstance)
   336 #ifdef MOZ_GAMEPAD
   337 using mozilla::dom::GamepadServiceTest;
   338 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(GamepadServiceTest,
   339                                          GamepadServiceTest::CreateService)
   340 #endif
   342 #ifdef MOZ_WIDGET_GONK
   343 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIGeolocationProvider,
   344                                          GonkGPSGeolocationProvider::GetSingleton)
   345 // Since the nsVolumeService constructor calls into nsIPowerManagerService,
   346 // we need it to be constructed sometime after nsIPowerManagerService.
   347 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsVolumeService,
   348                                          nsVolumeService::GetSingleton)
   349 #endif
   350 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIMediaManagerService,
   351                                          MediaManager::GetInstance)
   352 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsITelephonyProvider,
   353                                          TelephonyFactory::CreateTelephonyProvider)
   355 //-----------------------------------------------------------------------------
   357 static bool gInitialized = false;
   359 // Perform our one-time intialization for this module
   361 // static
   362 nsresult
   363 Initialize()
   364 {
   365   if (gInitialized) {
   366     NS_RUNTIMEABORT("Recursive layout module initialization");
   367     return NS_ERROR_FAILURE;
   368   }
   370   static_assert(sizeof(uintptr_t) == sizeof(void*),
   371                 "Eeek! You'll need to adjust the size of uintptr_t to the "
   372                 "size of a pointer on your platform.");
   374   gInitialized = true;
   376   nsresult rv;
   377   rv = xpcModuleCtor();
   378   if (NS_FAILED(rv))
   379     return rv;
   381   rv = nsLayoutStatics::Initialize();
   382   if (NS_FAILED(rv)) {
   383     Shutdown();
   384     return rv;
   385   }
   387 #ifdef DEBUG
   388   nsStyleContext::AssertStyleStructMaxDifferenceValid();
   389 #endif
   391   return NS_OK;
   392 }
   394 // Shutdown this module, releasing all of the module resources
   396 // static
   397 void
   398 Shutdown()
   399 {
   400   NS_PRECONDITION(gInitialized, "module not initialized");
   401   if (!gInitialized)
   402     return;
   404   gInitialized = false;
   406   nsLayoutStatics::Release();
   407 }
   409 #ifdef DEBUG
   410 nsresult NS_NewFrameUtil(nsIFrameUtil** aResult);
   411 nsresult NS_NewLayoutDebugger(nsILayoutDebugger** aResult);
   412 #endif
   414 nsresult NS_NewBoxObject(nsIBoxObject** aResult);
   416 #ifdef MOZ_XUL
   417 nsresult NS_NewListBoxObject(nsIBoxObject** aResult);
   418 nsresult NS_NewScrollBoxObject(nsIBoxObject** aResult);
   419 nsresult NS_NewMenuBoxObject(nsIBoxObject** aResult);
   420 nsresult NS_NewPopupBoxObject(nsIBoxObject** aResult);
   421 nsresult NS_NewContainerBoxObject(nsIBoxObject** aResult);
   422 nsresult NS_NewTreeBoxObject(nsIBoxObject** aResult);
   423 #endif
   425 nsresult NS_NewCanvasRenderingContextWebGL(nsIDOMWebGLRenderingContext** aResult);
   427 nsresult NS_CreateFrameTraversal(nsIFrameTraversal** aResult);
   429 nsresult NS_NewDomSelection(nsISelection** aResult);
   430 already_AddRefed<nsIContentViewer> NS_NewContentViewer();
   431 nsresult NS_NewGenRegularIterator(nsIContentIterator** aResult);
   432 nsresult NS_NewGenSubtreeIterator(nsIContentIterator** aInstancePtrResult);
   433 nsresult NS_NewContentDocumentLoaderFactory(nsIDocumentLoaderFactory** aResult);
   434 nsresult NS_NewHTMLCopyTextEncoder(nsIDocumentEncoder** aResult);
   435 nsresult NS_NewTextEncoder(nsIDocumentEncoder** aResult);
   436 nsresult NS_NewContentPolicy(nsIContentPolicy** aResult);
   438 nsresult NS_NewEventListenerService(nsIEventListenerService** aResult);
   439 nsresult NS_NewGlobalMessageManager(nsIMessageBroadcaster** aResult);
   440 nsresult NS_NewParentProcessMessageManager(nsIMessageBroadcaster** aResult);
   441 nsresult NS_NewChildProcessMessageManager(nsISyncMessageSender** aResult);
   443 nsresult NS_NewXULControllers(nsISupports* aOuter, REFNSIID aIID, void** aResult);
   445 #define MAKE_CTOR(ctor_, iface_, func_)                   \
   446 static nsresult                                           \
   447 ctor_(nsISupports* aOuter, REFNSIID aIID, void** aResult) \
   448 {                                                         \
   449   *aResult = nullptr;                                      \
   450   if (aOuter)                                             \
   451     return NS_ERROR_NO_AGGREGATION;                       \
   452   iface_* inst;                                           \
   453   nsresult rv = func_(&inst);                             \
   454   if (NS_SUCCEEDED(rv)) {                                 \
   455     rv = inst->QueryInterface(aIID, aResult);             \
   456     NS_RELEASE(inst);                                     \
   457   }                                                       \
   458   return rv;                                              \
   459 }
   461 // As above, but expects
   462 //   already_AddRefed<nsIFoo> NS_NewFoo();
   463 // instead of
   464 //   nsresult NS_NewFoo(nsIFoo**);
   465 #define MAKE_CTOR2(ctor_, iface_, func_)                  \
   466 static nsresult                                           \
   467 ctor_(nsISupports* aOuter, REFNSIID aIID, void** aResult) \
   468 {                                                         \
   469   *aResult = nullptr;                                      \
   470   if (aOuter) {                                           \
   471     return NS_ERROR_NO_AGGREGATION;                       \
   472   }                                                       \
   473   nsCOMPtr<iface_> inst = func_();                        \
   474   inst.forget(aResult);                                   \
   475   return NS_OK;                                           \
   476 }
   478 #ifdef DEBUG
   479 MAKE_CTOR(CreateNewFrameUtil,             nsIFrameUtil,                NS_NewFrameUtil)
   480 MAKE_CTOR(CreateNewLayoutDebugger,        nsILayoutDebugger,           NS_NewLayoutDebugger)
   481 #endif
   483 MAKE_CTOR(CreateNewFrameTraversal,      nsIFrameTraversal,      NS_CreateFrameTraversal)
   484 MAKE_CTOR(CreateNewBoxObject,           nsIBoxObject,           NS_NewBoxObject)
   486 #ifdef MOZ_XUL
   487 MAKE_CTOR(CreateNewListBoxObject,       nsIBoxObject,           NS_NewListBoxObject)
   488 MAKE_CTOR(CreateNewMenuBoxObject,       nsIBoxObject,           NS_NewMenuBoxObject)
   489 MAKE_CTOR(CreateNewPopupBoxObject,      nsIBoxObject,           NS_NewPopupBoxObject)
   490 MAKE_CTOR(CreateNewScrollBoxObject,     nsIBoxObject,           NS_NewScrollBoxObject)
   491 MAKE_CTOR(CreateNewTreeBoxObject,       nsIBoxObject,           NS_NewTreeBoxObject)
   492 MAKE_CTOR(CreateNewContainerBoxObject,  nsIBoxObject,           NS_NewContainerBoxObject)
   493 #endif // MOZ_XUL
   495 #ifdef MOZ_XUL
   496 NS_GENERIC_FACTORY_CONSTRUCTOR(inDOMView)
   497 #endif
   498 NS_GENERIC_FACTORY_CONSTRUCTOR(inDeepTreeWalker)
   499 NS_GENERIC_FACTORY_CONSTRUCTOR(inFlasher)
   500 NS_GENERIC_FACTORY_CONSTRUCTOR(inCSSValueSearch)
   501 NS_GENERIC_FACTORY_CONSTRUCTOR(inDOMUtils)
   503 MAKE_CTOR2(CreateContentViewer,           nsIContentViewer,            NS_NewContentViewer)
   504 MAKE_CTOR(CreateHTMLDocument,             nsIDocument,                 NS_NewHTMLDocument)
   505 MAKE_CTOR(CreateXMLDocument,              nsIDocument,                 NS_NewXMLDocument)
   506 MAKE_CTOR(CreateSVGDocument,              nsIDocument,                 NS_NewSVGDocument)
   507 MAKE_CTOR(CreateImageDocument,            nsIDocument,                 NS_NewImageDocument)
   508 MAKE_CTOR(CreateDOMBlob,                  nsISupports,                 nsDOMMultipartFile::NewBlob)
   509 MAKE_CTOR(CreateDOMFile,                  nsISupports,                 nsDOMMultipartFile::NewFile)
   510 MAKE_CTOR(CreateDOMSelection,             nsISelection,                NS_NewDomSelection)
   511 MAKE_CTOR2(CreateContentIterator,         nsIContentIterator,          NS_NewContentIterator)
   512 MAKE_CTOR2(CreatePreContentIterator,      nsIContentIterator,          NS_NewPreContentIterator)
   513 MAKE_CTOR2(CreateSubtreeIterator,         nsIContentIterator,          NS_NewContentSubtreeIterator)
   514 MAKE_CTOR(CreateTextEncoder,              nsIDocumentEncoder,          NS_NewTextEncoder)
   515 MAKE_CTOR(CreateHTMLCopyTextEncoder,      nsIDocumentEncoder,          NS_NewHTMLCopyTextEncoder)
   516 MAKE_CTOR(CreateXMLContentSerializer,     nsIContentSerializer,        NS_NewXMLContentSerializer)
   517 MAKE_CTOR(CreateHTMLContentSerializer,    nsIContentSerializer,        NS_NewHTMLContentSerializer)
   518 MAKE_CTOR(CreateXHTMLContentSerializer,   nsIContentSerializer,        NS_NewXHTMLContentSerializer)
   519 MAKE_CTOR(CreatePlainTextSerializer,      nsIContentSerializer,        NS_NewPlainTextSerializer)
   520 MAKE_CTOR(CreateContentPolicy,            nsIContentPolicy,            NS_NewContentPolicy)
   521 #ifdef MOZ_XUL
   522 MAKE_CTOR(CreateXULSortService,           nsIXULSortService,           NS_NewXULSortService)
   523 // NS_NewXULContentBuilder
   524 // NS_NewXULTreeBuilder
   525 MAKE_CTOR(CreateXULDocument,              nsIXULDocument,              NS_NewXULDocument)
   526 // NS_NewXULControllers
   527 #endif
   528 MAKE_CTOR(CreateContentDLF,               nsIDocumentLoaderFactory,    NS_NewContentDocumentLoaderFactory)
   529 MAKE_CTOR(CreateEventListenerService,     nsIEventListenerService,     NS_NewEventListenerService)
   530 MAKE_CTOR(CreateGlobalMessageManager,     nsIMessageBroadcaster,       NS_NewGlobalMessageManager)
   531 MAKE_CTOR(CreateParentMessageManager,     nsIMessageBroadcaster,       NS_NewParentProcessMessageManager)
   532 MAKE_CTOR(CreateChildMessageManager,      nsISyncMessageSender,        NS_NewChildProcessMessageManager)
   533 NS_GENERIC_FACTORY_CONSTRUCTOR(nsDataDocumentContentPolicy)
   534 NS_GENERIC_FACTORY_CONSTRUCTOR(nsNoDataProtocolContentPolicy)
   535 MAKE_CTOR(CreatePluginDocument,           nsIDocument,                 NS_NewPluginDocument)
   536 MAKE_CTOR(CreateVideoDocument,            nsIDocument,                 NS_NewVideoDocument)
   537 MAKE_CTOR(CreateFocusManager,             nsIFocusManager,      NS_NewFocusManager)
   539 MAKE_CTOR(CreateCanvasRenderingContextWebGL, nsIDOMWebGLRenderingContext, NS_NewCanvasRenderingContextWebGL)
   541 NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsStyleSheetService, Init)
   543 NS_GENERIC_FACTORY_CONSTRUCTOR(nsJSURI)
   545 // views are not refcounted, so this is the same as
   546 // NS_GENERIC_FACTORY_CONSTRUCTOR without the NS_ADDREF/NS_RELEASE
   547 #define NS_GENERIC_FACTORY_CONSTRUCTOR_NOREFS(_InstanceClass)                 \
   548 static nsresult                                                               \
   549 _InstanceClass##Constructor(nsISupports *aOuter, REFNSIID aIID,               \
   550                             void **aResult)                                   \
   551 {                                                                             \
   552     nsresult rv;                                                              \
   553                                                                               \
   554     *aResult = nullptr;                                                       \
   555     if (nullptr != aOuter) {                                                  \
   556         rv = NS_ERROR_NO_AGGREGATION;                                         \
   557         return rv;                                                            \
   558     }                                                                         \
   559                                                                               \
   560     _InstanceClass * inst = new _InstanceClass();                             \
   561     if (nullptr == inst) {                                                    \
   562         rv = NS_ERROR_OUT_OF_MEMORY;                                          \
   563         return rv;                                                            \
   564     }                                                                         \
   565     rv = inst->QueryInterface(aIID, aResult);                                 \
   566                                                                               \
   567     return rv;                                                                \
   568 }                                                                             \
   570 NS_GENERIC_FACTORY_CONSTRUCTOR(nsDOMScriptObjectFactory)
   572 #define NS_GEOLOCATION_CID \
   573   { 0x1E1C3FF, 0x94A, 0xD048, { 0x44, 0xB4, 0x62, 0xD2, 0x9C, 0x7B, 0x4F, 0x39 } }
   575 NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(Geolocation, Init)
   577 #define NS_GEOLOCATION_SERVICE_CID \
   578   { 0x404d02a, 0x1CA, 0xAAAB, { 0x47, 0x62, 0x94, 0x4b, 0x1b, 0xf2, 0xf7, 0xb5 } }
   580 #define NS_AUDIOCHANNEL_SERVICE_CID \
   581   { 0xf712e983, 0x048a, 0x443f, { 0x88, 0x02, 0xfc, 0xc3, 0xd9, 0x27, 0xce, 0xac }}
   583 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsGeolocationService, nsGeolocationService::GetGeolocationService)
   585 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(AudioChannelService, AudioChannelService::GetAudioChannelService)
   587 #ifdef MOZ_WEBSPEECH
   588 NS_GENERIC_FACTORY_CONSTRUCTOR(FakeSpeechRecognitionService)
   589 #endif
   591 NS_GENERIC_FACTORY_CONSTRUCTOR(CSPService)
   592 NS_GENERIC_FACTORY_CONSTRUCTOR(nsMixedContentBlocker)
   594 NS_GENERIC_FACTORY_CONSTRUCTOR(nsPrincipal)
   595 NS_GENERIC_FACTORY_CONSTRUCTOR(nsSecurityNameSet)
   596 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsSystemPrincipal,
   597     nsScriptSecurityManager::SystemPrincipalSingletonConstructor)
   598 NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsNullPrincipal, Init)
   599 NS_GENERIC_FACTORY_CONSTRUCTOR(nsStructuredCloneContainer)
   601 NS_GENERIC_FACTORY_CONSTRUCTOR(OSFileConstantsService)
   602 NS_GENERIC_FACTORY_CONSTRUCTOR(TCPSocketChild)
   603 NS_GENERIC_FACTORY_CONSTRUCTOR(TCPSocketParent)
   604 NS_GENERIC_FACTORY_CONSTRUCTOR(TCPServerSocketChild)
   605 NS_GENERIC_FACTORY_CONSTRUCTOR(UDPSocketChild)
   607 #ifdef ACCESSIBILITY
   608 #include "nsAccessibilityService.h"
   610   MAKE_CTOR(CreateA11yService, nsIAccessibilityService, NS_GetAccessibilityService)
   611 #endif
   613 static nsresult
   614 Construct_nsIScriptSecurityManager(nsISupports *aOuter, REFNSIID aIID,
   615                                    void **aResult)
   616 {
   617     if (!aResult)
   618         return NS_ERROR_NULL_POINTER;
   619     *aResult = nullptr;
   620     if (aOuter)
   621         return NS_ERROR_NO_AGGREGATION;
   622     nsScriptSecurityManager *obj = nsScriptSecurityManager::GetScriptSecurityManager();
   623     if (!obj)
   624         return NS_ERROR_OUT_OF_MEMORY;
   625     if (NS_FAILED(obj->QueryInterface(aIID, aResult)))
   626         return NS_ERROR_FAILURE;
   627     return NS_OK;
   628 }
   630 #ifdef DEBUG
   631 NS_DEFINE_NAMED_CID(NS_FRAME_UTIL_CID);
   632 NS_DEFINE_NAMED_CID(NS_LAYOUT_DEBUGGER_CID);
   633 #endif
   634 NS_DEFINE_NAMED_CID(NS_FRAMETRAVERSAL_CID);
   635 NS_DEFINE_NAMED_CID(NS_BOXOBJECT_CID);
   636 #ifdef MOZ_XUL
   637 NS_DEFINE_NAMED_CID(NS_LISTBOXOBJECT_CID);
   638 NS_DEFINE_NAMED_CID(NS_MENUBOXOBJECT_CID);
   639 NS_DEFINE_NAMED_CID(NS_POPUPBOXOBJECT_CID);
   640 NS_DEFINE_NAMED_CID(NS_CONTAINERBOXOBJECT_CID);
   641 NS_DEFINE_NAMED_CID(NS_SCROLLBOXOBJECT_CID);
   642 NS_DEFINE_NAMED_CID(NS_TREEBOXOBJECT_CID);
   643 #endif // MOZ_XUL
   644 #ifdef MOZ_XUL
   645 NS_DEFINE_NAMED_CID(IN_DOMVIEW_CID);
   646 #endif
   647 NS_DEFINE_NAMED_CID(IN_DEEPTREEWALKER_CID);
   648 NS_DEFINE_NAMED_CID(IN_FLASHER_CID);
   649 NS_DEFINE_NAMED_CID(IN_CSSVALUESEARCH_CID);
   650 NS_DEFINE_NAMED_CID(IN_DOMUTILS_CID);
   651 NS_DEFINE_NAMED_CID(NS_CONTENT_VIEWER_CID);
   652 NS_DEFINE_NAMED_CID(NS_HTMLDOCUMENT_CID);
   653 NS_DEFINE_NAMED_CID(NS_XMLDOCUMENT_CID);
   654 NS_DEFINE_NAMED_CID(NS_SVGDOCUMENT_CID);
   655 NS_DEFINE_NAMED_CID(NS_IMAGEDOCUMENT_CID);
   656 NS_DEFINE_NAMED_CID(NS_DOMMULTIPARTBLOB_CID);
   657 NS_DEFINE_NAMED_CID(NS_DOMMULTIPARTFILE_CID);
   658 NS_DEFINE_NAMED_CID(NS_DOMSELECTION_CID);
   659 NS_DEFINE_NAMED_CID(NS_CONTENTITERATOR_CID);
   660 NS_DEFINE_NAMED_CID(NS_PRECONTENTITERATOR_CID);
   661 NS_DEFINE_NAMED_CID(NS_SUBTREEITERATOR_CID);
   662 NS_DEFINE_NAMED_CID(NS_CANVASRENDERINGCONTEXTWEBGL_CID);
   663 NS_DEFINE_NAMED_CID(NS_TEXT_ENCODER_CID);
   664 NS_DEFINE_NAMED_CID(NS_HTMLCOPY_TEXT_ENCODER_CID);
   665 NS_DEFINE_NAMED_CID(NS_XMLCONTENTSERIALIZER_CID);
   666 NS_DEFINE_NAMED_CID(NS_XHTMLCONTENTSERIALIZER_CID);
   667 NS_DEFINE_NAMED_CID(NS_HTMLCONTENTSERIALIZER_CID);
   668 NS_DEFINE_NAMED_CID(NS_PLAINTEXTSERIALIZER_CID);
   669 NS_DEFINE_NAMED_CID(NS_PARSERUTILS_CID);
   670 NS_DEFINE_NAMED_CID(NS_SCRIPTABLEUNESCAPEHTML_CID);
   671 NS_DEFINE_NAMED_CID(NS_CONTENTPOLICY_CID);
   672 NS_DEFINE_NAMED_CID(NS_DATADOCUMENTCONTENTPOLICY_CID);
   673 NS_DEFINE_NAMED_CID(NS_NODATAPROTOCOLCONTENTPOLICY_CID);
   674 NS_DEFINE_NAMED_CID(NS_XULCONTROLLERS_CID);
   675 #ifdef MOZ_XUL
   676 NS_DEFINE_NAMED_CID(NS_XULSORTSERVICE_CID);
   677 NS_DEFINE_NAMED_CID(NS_XULTEMPLATEBUILDER_CID);
   678 NS_DEFINE_NAMED_CID(NS_XULTREEBUILDER_CID);
   679 NS_DEFINE_NAMED_CID(NS_XULDOCUMENT_CID);
   680 #endif
   681 NS_DEFINE_NAMED_CID(NS_CONTENT_DOCUMENT_LOADER_FACTORY_CID);
   682 NS_DEFINE_NAMED_CID(NS_DOM_SCRIPT_OBJECT_FACTORY_CID);
   683 NS_DEFINE_NAMED_CID(NS_JSPROTOCOLHANDLER_CID);
   684 NS_DEFINE_NAMED_CID(NS_JSURI_CID);
   685 NS_DEFINE_NAMED_CID(NS_WINDOWCOMMANDTABLE_CID);
   686 NS_DEFINE_NAMED_CID(NS_WINDOWCONTROLLER_CID);
   687 NS_DEFINE_NAMED_CID(NS_PLUGINDOCLOADERFACTORY_CID);
   688 NS_DEFINE_NAMED_CID(NS_PLUGINDOCUMENT_CID);
   689 NS_DEFINE_NAMED_CID(NS_VIDEODOCUMENT_CID);
   690 NS_DEFINE_NAMED_CID(NS_STYLESHEETSERVICE_CID);
   691 NS_DEFINE_NAMED_CID(TRANSFORMIIX_XSLT_PROCESSOR_CID);
   692 NS_DEFINE_NAMED_CID(TRANSFORMIIX_XPATH_EVALUATOR_CID);
   693 NS_DEFINE_NAMED_CID(TRANSFORMIIX_NODESET_CID);
   694 NS_DEFINE_NAMED_CID(NS_XMLSERIALIZER_CID);
   695 NS_DEFINE_NAMED_CID(NS_FILEREADER_CID);
   696 NS_DEFINE_NAMED_CID(NS_FORMDATA_CID);
   697 NS_DEFINE_NAMED_CID(NS_BLOBPROTOCOLHANDLER_CID);
   698 NS_DEFINE_NAMED_CID(NS_MEDIASTREAMPROTOCOLHANDLER_CID);
   699 NS_DEFINE_NAMED_CID(NS_MEDIASOURCEPROTOCOLHANDLER_CID);
   700 NS_DEFINE_NAMED_CID(NS_FONTTABLEPROTOCOLHANDLER_CID);
   701 NS_DEFINE_NAMED_CID(NS_HOSTOBJECTURI_CID);
   702 NS_DEFINE_NAMED_CID(NS_XMLHTTPREQUEST_CID);
   703 NS_DEFINE_NAMED_CID(NS_DOMPARSER_CID);
   704 NS_DEFINE_NAMED_CID(NS_DOMSESSIONSTORAGEMANAGER_CID);
   705 NS_DEFINE_NAMED_CID(NS_DOMLOCALSTORAGEMANAGER_CID);
   706 NS_DEFINE_NAMED_CID(NS_DOMJSON_CID);
   707 NS_DEFINE_NAMED_CID(NS_TEXTEDITOR_CID);
   708 NS_DEFINE_NAMED_CID(INDEXEDDB_MANAGER_CID);
   709 NS_DEFINE_NAMED_CID(DOMREQUEST_SERVICE_CID);
   710 NS_DEFINE_NAMED_CID(QUOTA_MANAGER_CID);
   711 #ifdef MOZ_WIDGET_GONK
   712 NS_DEFINE_NAMED_CID(SYSTEMWORKERMANAGER_CID);
   713 #endif
   714 #ifdef MOZ_B2G_BT
   715 NS_DEFINE_NAMED_CID(BLUETOOTHSERVICE_CID);
   716 #endif
   717 #ifdef MOZ_WIDGET_GONK
   718 NS_DEFINE_NAMED_CID(NS_AUDIOMANAGER_CID);
   719 NS_DEFINE_NAMED_CID(NS_VOLUMESERVICE_CID);
   720 #endif
   722 NS_DEFINE_NAMED_CID(NS_AUDIOCHANNELAGENT_CID);
   724 NS_DEFINE_NAMED_CID(NS_HTMLEDITOR_CID);
   725 NS_DEFINE_NAMED_CID(NS_EDITORCONTROLLER_CID);
   726 NS_DEFINE_NAMED_CID(NS_EDITINGCONTROLLER_CID);
   727 NS_DEFINE_NAMED_CID(NS_EDITORCOMMANDTABLE_CID);
   728 NS_DEFINE_NAMED_CID(NS_EDITINGCOMMANDTABLE_CID);
   729 NS_DEFINE_NAMED_CID(NS_TEXTSERVICESDOCUMENT_CID);
   730 NS_DEFINE_NAMED_CID(NS_GEOLOCATION_SERVICE_CID);
   731 NS_DEFINE_NAMED_CID(NS_GEOLOCATION_CID);
   732 NS_DEFINE_NAMED_CID(NS_AUDIOCHANNEL_SERVICE_CID);
   733 NS_DEFINE_NAMED_CID(NS_FOCUSMANAGER_CID);
   734 NS_DEFINE_NAMED_CID(CSPSERVICE_CID);
   735 NS_DEFINE_NAMED_CID(NS_MIXEDCONTENTBLOCKER_CID);
   736 NS_DEFINE_NAMED_CID(NS_EVENTLISTENERSERVICE_CID);
   737 NS_DEFINE_NAMED_CID(NS_GLOBALMESSAGEMANAGER_CID);
   738 NS_DEFINE_NAMED_CID(NS_PARENTPROCESSMESSAGEMANAGER_CID);
   739 NS_DEFINE_NAMED_CID(NS_CHILDPROCESSMESSAGEMANAGER_CID);
   740 NS_DEFINE_NAMED_CID(NSCHANNELPOLICY_CID);
   741 NS_DEFINE_NAMED_CID(NS_SCRIPTSECURITYMANAGER_CID);
   742 NS_DEFINE_NAMED_CID(NS_PRINCIPAL_CID);
   743 NS_DEFINE_NAMED_CID(NS_SYSTEMPRINCIPAL_CID);
   744 NS_DEFINE_NAMED_CID(NS_NULLPRINCIPAL_CID);
   745 NS_DEFINE_NAMED_CID(NS_SECURITYNAMESET_CID);
   746 NS_DEFINE_NAMED_CID(THIRDPARTYUTIL_CID);
   747 NS_DEFINE_NAMED_CID(NS_STRUCTUREDCLONECONTAINER_CID);
   748 NS_DEFINE_NAMED_CID(NS_DEVICE_SENSORS_CID);
   750 #ifndef MOZ_WIDGET_GONK
   751 #if defined(ANDROID)
   752 NS_DEFINE_NAMED_CID(NS_HAPTICFEEDBACK_CID);
   753 #endif
   754 #endif
   755 NS_DEFINE_NAMED_CID(SMS_SERVICE_CID);
   756 NS_DEFINE_NAMED_CID(MMS_SERVICE_CID);
   757 NS_DEFINE_NAMED_CID(MOBILE_MESSAGE_SERVICE_CID);
   758 NS_DEFINE_NAMED_CID(MOBILE_MESSAGE_DATABASE_SERVICE_CID);
   759 NS_DEFINE_NAMED_CID(NS_POWERMANAGERSERVICE_CID);
   760 NS_DEFINE_NAMED_CID(OSFILECONSTANTSSERVICE_CID);
   761 NS_DEFINE_NAMED_CID(NS_ALARMHALSERVICE_CID);
   762 NS_DEFINE_NAMED_CID(TCPSOCKETCHILD_CID);
   763 NS_DEFINE_NAMED_CID(TCPSOCKETPARENT_CID);
   764 NS_DEFINE_NAMED_CID(TCPSERVERSOCKETCHILD_CID);
   765 NS_DEFINE_NAMED_CID(UDPSOCKETCHILD_CID);
   766 NS_DEFINE_NAMED_CID(NS_TIMESERVICE_CID);
   767 NS_DEFINE_NAMED_CID(NS_MEDIASTREAMCONTROLLERSERVICE_CID);
   768 #ifdef MOZ_WIDGET_GONK
   769 NS_DEFINE_NAMED_CID(GONK_GPS_GEOLOCATION_PROVIDER_CID);
   770 #endif
   771 NS_DEFINE_NAMED_CID(NS_MEDIAMANAGERSERVICE_CID);
   772 #ifdef MOZ_GAMEPAD
   773 NS_DEFINE_NAMED_CID(NS_GAMEPAD_TEST_CID);
   774 #endif
   775 #ifdef MOZ_WEBSPEECH
   776 NS_DEFINE_NAMED_CID(NS_FAKE_SPEECH_RECOGNITION_SERVICE_CID);
   777 NS_DEFINE_NAMED_CID(NS_SYNTHVOICEREGISTRY_CID);
   778 #endif
   780 #ifdef ACCESSIBILITY
   781 NS_DEFINE_NAMED_CID(NS_ACCESSIBILITY_SERVICE_CID);
   782 #endif
   783 NS_DEFINE_NAMED_CID(TELEPHONY_PROVIDER_CID);
   785 static nsresult
   786 CreateWindowCommandTableConstructor(nsISupports *aOuter,
   787                                     REFNSIID aIID, void **aResult)
   788 {
   789   nsresult rv;
   790   nsCOMPtr<nsIControllerCommandTable> commandTable =
   791       do_CreateInstance(NS_CONTROLLERCOMMANDTABLE_CONTRACTID, &rv);
   792   if (NS_FAILED(rv)) return rv;
   794   rv = nsWindowCommandRegistration::RegisterWindowCommands(commandTable);
   795   if (NS_FAILED(rv)) return rv;
   797   return commandTable->QueryInterface(aIID, aResult);
   798 }
   800 static nsresult
   801 CreateWindowControllerWithSingletonCommandTable(nsISupports *aOuter,
   802                                       REFNSIID aIID, void **aResult)
   803 {
   804   nsresult rv;
   805   nsCOMPtr<nsIController> controller =
   806        do_CreateInstance("@mozilla.org/embedcomp/base-command-controller;1", &rv);
   808  if (NS_FAILED(rv)) return rv;
   810   nsCOMPtr<nsIControllerCommandTable> windowCommandTable = do_GetService(kNS_WINDOWCOMMANDTABLE_CID, &rv);
   811   if (NS_FAILED(rv)) return rv;
   813   // this is a singleton; make it immutable
   814   windowCommandTable->MakeImmutable();
   816   nsCOMPtr<nsIControllerContext> controllerContext = do_QueryInterface(controller, &rv);
   817   if (NS_FAILED(rv)) return rv;
   819   controllerContext->Init(windowCommandTable);
   820   if (NS_FAILED(rv)) return rv;
   822   return controller->QueryInterface(aIID, aResult);
   823 }
   825 // Constructor of a controller which is set up to use, internally, a
   826 // singleton command-table pre-filled with editor commands.
   827 static nsresult
   828 nsEditorControllerConstructor(nsISupports *aOuter, REFNSIID aIID,
   829                               void **aResult)
   830 {
   831   nsresult rv;
   832   nsCOMPtr<nsIController> controller = do_CreateInstance("@mozilla.org/embedcomp/base-command-controller;1", &rv);
   833   if (NS_FAILED(rv)) return rv;
   835   nsCOMPtr<nsIControllerCommandTable> editorCommandTable = do_GetService(kNS_EDITORCOMMANDTABLE_CID, &rv);
   836   if (NS_FAILED(rv)) return rv;
   838   // this guy is a singleton, so make it immutable
   839   editorCommandTable->MakeImmutable();
   841   nsCOMPtr<nsIControllerContext> controllerContext = do_QueryInterface(controller, &rv);
   842   if (NS_FAILED(rv)) return rv;
   844   rv = controllerContext->Init(editorCommandTable);
   845   if (NS_FAILED(rv)) return rv;
   847   return controller->QueryInterface(aIID, aResult);
   848 }
   850 // Constructor of a controller which is set up to use, internally, a
   851 // singleton command-table pre-filled with editing commands.
   852 static nsresult
   853 nsEditingControllerConstructor(nsISupports *aOuter, REFNSIID aIID,
   854                                 void **aResult)
   855 {
   856   nsresult rv;
   857   nsCOMPtr<nsIController> controller = do_CreateInstance("@mozilla.org/embedcomp/base-command-controller;1", &rv);
   858   if (NS_FAILED(rv)) return rv;
   860   nsCOMPtr<nsIControllerCommandTable> editingCommandTable = do_GetService(kNS_EDITINGCOMMANDTABLE_CID, &rv);
   861   if (NS_FAILED(rv)) return rv;
   863   // this guy is a singleton, so make it immutable
   864   editingCommandTable->MakeImmutable();
   866   nsCOMPtr<nsIControllerContext> controllerContext = do_QueryInterface(controller, &rv);
   867   if (NS_FAILED(rv)) return rv;
   869   rv = controllerContext->Init(editingCommandTable);
   870   if (NS_FAILED(rv)) return rv;
   872   return controller->QueryInterface(aIID, aResult);
   873 }
   875 // Constructor for a command-table pre-filled with editor commands
   876 static nsresult
   877 nsEditorCommandTableConstructor(nsISupports *aOuter, REFNSIID aIID,
   878                                             void **aResult)
   879 {
   880   nsresult rv;
   881   nsCOMPtr<nsIControllerCommandTable> commandTable =
   882       do_CreateInstance(NS_CONTROLLERCOMMANDTABLE_CONTRACTID, &rv);
   883   if (NS_FAILED(rv)) return rv;
   885   rv = nsEditorController::RegisterEditorCommands(commandTable);
   886   if (NS_FAILED(rv)) return rv;
   888   // we don't know here whether we're being created as an instance,
   889   // or a service, so we can't become immutable
   891   return commandTable->QueryInterface(aIID, aResult);
   892 }
   894 // Constructor for a command-table pre-filled with editing commands
   895 static nsresult
   896 nsEditingCommandTableConstructor(nsISupports *aOuter, REFNSIID aIID,
   897                                               void **aResult)
   898 {
   899   nsresult rv;
   900   nsCOMPtr<nsIControllerCommandTable> commandTable =
   901       do_CreateInstance(NS_CONTROLLERCOMMANDTABLE_CONTRACTID, &rv);
   902   if (NS_FAILED(rv)) return rv;
   904   rv = nsEditorController::RegisterEditingCommands(commandTable);
   905   if (NS_FAILED(rv)) return rv;
   907   // we don't know here whether we're being created as an instance,
   908   // or a service, so we can't become immutable
   910   return commandTable->QueryInterface(aIID, aResult);
   911 }
   914 static const mozilla::Module::CIDEntry kLayoutCIDs[] = {
   915   XPCONNECT_CIDENTRIES
   916 #ifdef DEBUG
   917   { &kNS_FRAME_UTIL_CID, false, nullptr, CreateNewFrameUtil },
   918   { &kNS_LAYOUT_DEBUGGER_CID, false, nullptr, CreateNewLayoutDebugger },
   919 #endif
   920   { &kNS_FRAMETRAVERSAL_CID, false, nullptr, CreateNewFrameTraversal },
   921   { &kNS_BOXOBJECT_CID, false, nullptr, CreateNewBoxObject },
   922 #ifdef MOZ_XUL
   923   { &kNS_LISTBOXOBJECT_CID, false, nullptr, CreateNewListBoxObject },
   924   { &kNS_MENUBOXOBJECT_CID, false, nullptr, CreateNewMenuBoxObject },
   925   { &kNS_POPUPBOXOBJECT_CID, false, nullptr, CreateNewPopupBoxObject },
   926   { &kNS_CONTAINERBOXOBJECT_CID, false, nullptr, CreateNewContainerBoxObject },
   927   { &kNS_SCROLLBOXOBJECT_CID, false, nullptr, CreateNewScrollBoxObject },
   928   { &kNS_TREEBOXOBJECT_CID, false, nullptr, CreateNewTreeBoxObject },
   929 #endif // MOZ_XUL
   930 #ifdef MOZ_XUL
   931   { &kIN_DOMVIEW_CID, false, nullptr, inDOMViewConstructor },
   932 #endif
   933   { &kIN_DEEPTREEWALKER_CID, false, nullptr, inDeepTreeWalkerConstructor },
   934   { &kIN_FLASHER_CID, false, nullptr, inFlasherConstructor },
   935   { &kIN_CSSVALUESEARCH_CID, false, nullptr, inCSSValueSearchConstructor },
   936   { &kIN_DOMUTILS_CID, false, nullptr, inDOMUtilsConstructor },
   937   { &kNS_CONTENT_VIEWER_CID, false, nullptr, CreateContentViewer },
   938   { &kNS_HTMLDOCUMENT_CID, false, nullptr, CreateHTMLDocument },
   939   { &kNS_XMLDOCUMENT_CID, false, nullptr, CreateXMLDocument },
   940   { &kNS_SVGDOCUMENT_CID, false, nullptr, CreateSVGDocument },
   941   { &kNS_IMAGEDOCUMENT_CID, false, nullptr, CreateImageDocument },
   942   { &kNS_DOMMULTIPARTBLOB_CID, false, nullptr, CreateDOMBlob },
   943   { &kNS_DOMMULTIPARTFILE_CID, false, nullptr, CreateDOMFile },
   944   { &kNS_DOMSELECTION_CID, false, nullptr, CreateDOMSelection },
   945   { &kNS_CONTENTITERATOR_CID, false, nullptr, CreateContentIterator },
   946   { &kNS_PRECONTENTITERATOR_CID, false, nullptr, CreatePreContentIterator },
   947   { &kNS_SUBTREEITERATOR_CID, false, nullptr, CreateSubtreeIterator },
   948   { &kNS_CANVASRENDERINGCONTEXTWEBGL_CID, false, nullptr, CreateCanvasRenderingContextWebGL },
   949   { &kNS_TEXT_ENCODER_CID, false, nullptr, CreateTextEncoder },
   950   { &kNS_HTMLCOPY_TEXT_ENCODER_CID, false, nullptr, CreateHTMLCopyTextEncoder },
   951   { &kNS_XMLCONTENTSERIALIZER_CID, false, nullptr, CreateXMLContentSerializer },
   952   { &kNS_HTMLCONTENTSERIALIZER_CID, false, nullptr, CreateHTMLContentSerializer },
   953   { &kNS_XHTMLCONTENTSERIALIZER_CID, false, nullptr, CreateXHTMLContentSerializer },
   954   { &kNS_PLAINTEXTSERIALIZER_CID, false, nullptr, CreatePlainTextSerializer },
   955   { &kNS_PARSERUTILS_CID, false, nullptr, nsParserUtilsConstructor },
   956   { &kNS_SCRIPTABLEUNESCAPEHTML_CID, false, nullptr, nsParserUtilsConstructor },
   957   { &kNS_CONTENTPOLICY_CID, false, nullptr, CreateContentPolicy },
   958   { &kNS_DATADOCUMENTCONTENTPOLICY_CID, false, nullptr, nsDataDocumentContentPolicyConstructor },
   959   { &kNS_NODATAPROTOCOLCONTENTPOLICY_CID, false, nullptr, nsNoDataProtocolContentPolicyConstructor },
   960   { &kNS_XULCONTROLLERS_CID, false, nullptr, NS_NewXULControllers },
   961 #ifdef MOZ_XUL
   962   { &kNS_XULSORTSERVICE_CID, false, nullptr, CreateXULSortService },
   963   { &kNS_XULTEMPLATEBUILDER_CID, false, nullptr, NS_NewXULContentBuilder },
   964   { &kNS_XULTREEBUILDER_CID, false, nullptr, NS_NewXULTreeBuilder },
   965   { &kNS_XULDOCUMENT_CID, false, nullptr, CreateXULDocument },
   966 #endif
   967   { &kNS_CONTENT_DOCUMENT_LOADER_FACTORY_CID, false, nullptr, CreateContentDLF },
   968   { &kNS_DOM_SCRIPT_OBJECT_FACTORY_CID, false, nullptr, nsDOMScriptObjectFactoryConstructor },
   969   { &kNS_JSPROTOCOLHANDLER_CID, false, nullptr, nsJSProtocolHandler::Create },
   970   { &kNS_JSURI_CID, false, nullptr, nsJSURIConstructor },
   971   { &kNS_WINDOWCOMMANDTABLE_CID, false, nullptr, CreateWindowCommandTableConstructor },
   972   { &kNS_WINDOWCONTROLLER_CID, false, nullptr, CreateWindowControllerWithSingletonCommandTable },
   973   { &kNS_PLUGINDOCLOADERFACTORY_CID, false, nullptr, CreateContentDLF },
   974   { &kNS_PLUGINDOCUMENT_CID, false, nullptr, CreatePluginDocument },
   975   { &kNS_VIDEODOCUMENT_CID, false, nullptr, CreateVideoDocument },
   976   { &kNS_STYLESHEETSERVICE_CID, false, nullptr, nsStyleSheetServiceConstructor },
   977   { &kTRANSFORMIIX_XSLT_PROCESSOR_CID, false, nullptr, txMozillaXSLTProcessorConstructor },
   978   { &kTRANSFORMIIX_XPATH_EVALUATOR_CID, false, nullptr, XPathEvaluatorConstructor },
   979   { &kTRANSFORMIIX_NODESET_CID, false, nullptr, txNodeSetAdaptorConstructor },
   980   { &kNS_XMLSERIALIZER_CID, false, nullptr, nsDOMSerializerConstructor },
   981   { &kNS_FILEREADER_CID, false, nullptr, nsDOMFileReaderConstructor },
   982   { &kNS_FORMDATA_CID, false, nullptr, nsFormDataConstructor },
   983   { &kNS_BLOBPROTOCOLHANDLER_CID, false, nullptr, nsBlobProtocolHandlerConstructor },
   984   { &kNS_MEDIASTREAMPROTOCOLHANDLER_CID, false, nullptr, nsMediaStreamProtocolHandlerConstructor },
   985   { &kNS_MEDIASOURCEPROTOCOLHANDLER_CID, false, nullptr, nsMediaSourceProtocolHandlerConstructor },
   986   { &kNS_FONTTABLEPROTOCOLHANDLER_CID, false, nullptr, nsFontTableProtocolHandlerConstructor },
   987   { &kNS_HOSTOBJECTURI_CID, false, nullptr, nsHostObjectURIConstructor },
   988   { &kNS_XMLHTTPREQUEST_CID, false, nullptr, nsXMLHttpRequestConstructor },
   989   { &kNS_DOMPARSER_CID, false, nullptr, DOMParserConstructor },
   990   { &kNS_XPCEXCEPTION_CID, false, nullptr, ExceptionConstructor },
   991   { &kNS_DOMSESSIONSTORAGEMANAGER_CID, false, nullptr, DOMSessionStorageManagerConstructor },
   992   { &kNS_DOMLOCALSTORAGEMANAGER_CID, false, nullptr, DOMLocalStorageManagerConstructor },
   993   { &kNS_DOMJSON_CID, false, nullptr, NS_NewJSON },
   994   { &kNS_TEXTEDITOR_CID, false, nullptr, nsPlaintextEditorConstructor },
   995   { &kINDEXEDDB_MANAGER_CID, false, nullptr, IndexedDatabaseManagerConstructor },
   996   { &kDOMREQUEST_SERVICE_CID, false, nullptr, DOMRequestServiceConstructor },
   997   { &kQUOTA_MANAGER_CID, false, nullptr, QuotaManagerConstructor },
   998 #ifdef MOZ_WIDGET_GONK
   999   { &kSYSTEMWORKERMANAGER_CID, true, nullptr, SystemWorkerManagerConstructor },
  1000 #endif
  1001 #ifdef MOZ_B2G_BT
  1002   { &kBLUETOOTHSERVICE_CID, true, nullptr, BluetoothServiceConstructor },
  1003 #endif
  1004 #ifdef MOZ_WIDGET_GONK
  1005   { &kNS_AUDIOMANAGER_CID, true, nullptr, AudioManagerConstructor },
  1006   { &kNS_VOLUMESERVICE_CID, true, nullptr, nsVolumeServiceConstructor },
  1007 #endif
  1008   { &kNS_AUDIOCHANNELAGENT_CID, true, nullptr, AudioChannelAgentConstructor },
  1009   { &kNS_HTMLEDITOR_CID, false, nullptr, nsHTMLEditorConstructor },
  1010   { &kNS_EDITORCONTROLLER_CID, false, nullptr, nsEditorControllerConstructor },
  1011   { &kNS_EDITINGCONTROLLER_CID, false, nullptr, nsEditingControllerConstructor },
  1012   { &kNS_EDITORCOMMANDTABLE_CID, false, nullptr, nsEditorCommandTableConstructor },
  1013   { &kNS_EDITINGCOMMANDTABLE_CID, false, nullptr, nsEditingCommandTableConstructor },
  1014   { &kNS_TEXTSERVICESDOCUMENT_CID, false, nullptr, nsTextServicesDocumentConstructor },
  1015   { &kNS_GEOLOCATION_SERVICE_CID, false, nullptr, nsGeolocationServiceConstructor },
  1016   { &kNS_GEOLOCATION_CID, false, nullptr, GeolocationConstructor },
  1017   { &kNS_AUDIOCHANNEL_SERVICE_CID, false, nullptr, AudioChannelServiceConstructor },
  1018   { &kNS_FOCUSMANAGER_CID, false, nullptr, CreateFocusManager },
  1019 #ifdef MOZ_WEBSPEECH
  1020   { &kNS_FAKE_SPEECH_RECOGNITION_SERVICE_CID, false, nullptr, FakeSpeechRecognitionServiceConstructor },
  1021   { &kNS_SYNTHVOICEREGISTRY_CID, true, nullptr, nsSynthVoiceRegistryConstructor },
  1022 #endif
  1023   { &kCSPSERVICE_CID, false, nullptr, CSPServiceConstructor },
  1024   { &kNS_MIXEDCONTENTBLOCKER_CID, false, nullptr, nsMixedContentBlockerConstructor },
  1025   { &kNS_EVENTLISTENERSERVICE_CID, false, nullptr, CreateEventListenerService },
  1026   { &kNS_GLOBALMESSAGEMANAGER_CID, false, nullptr, CreateGlobalMessageManager },
  1027   { &kNS_PARENTPROCESSMESSAGEMANAGER_CID, false, nullptr, CreateParentMessageManager },
  1028   { &kNS_CHILDPROCESSMESSAGEMANAGER_CID, false, nullptr, CreateChildMessageManager },
  1029   { &kNSCHANNELPOLICY_CID, false, nullptr, nsChannelPolicyConstructor },
  1030   { &kNS_SCRIPTSECURITYMANAGER_CID, false, nullptr, Construct_nsIScriptSecurityManager },
  1031   { &kNS_PRINCIPAL_CID, false, nullptr, nsPrincipalConstructor },
  1032   { &kNS_SYSTEMPRINCIPAL_CID, false, nullptr, nsSystemPrincipalConstructor },
  1033   { &kNS_NULLPRINCIPAL_CID, false, nullptr, nsNullPrincipalConstructor },
  1034   { &kNS_SECURITYNAMESET_CID, false, nullptr, nsSecurityNameSetConstructor },
  1035   { &kNS_DEVICE_SENSORS_CID, false, nullptr, nsDeviceSensorsConstructor },
  1036 #ifndef MOZ_WIDGET_GONK
  1037 #if defined(ANDROID)
  1038   { &kNS_HAPTICFEEDBACK_CID, false, nullptr, nsHapticFeedbackConstructor },
  1039 #endif
  1040 #endif
  1041   { &kTHIRDPARTYUTIL_CID, false, nullptr, ThirdPartyUtilConstructor },
  1042   { &kNS_STRUCTUREDCLONECONTAINER_CID, false, nullptr, nsStructuredCloneContainerConstructor },
  1043   { &kSMS_SERVICE_CID, false, nullptr, nsISmsServiceConstructor },
  1044   { &kMMS_SERVICE_CID, false, nullptr, nsIMmsServiceConstructor },
  1045   { &kMOBILE_MESSAGE_SERVICE_CID, false, nullptr, nsIMobileMessageServiceConstructor },
  1046   { &kMOBILE_MESSAGE_DATABASE_SERVICE_CID, false, nullptr, nsIMobileMessageDatabaseServiceConstructor },
  1047   { &kNS_POWERMANAGERSERVICE_CID, false, nullptr, nsIPowerManagerServiceConstructor },
  1048   { &kOSFILECONSTANTSSERVICE_CID, true, nullptr, OSFileConstantsServiceConstructor },
  1049   { &kNS_ALARMHALSERVICE_CID, false, nullptr, nsIAlarmHalServiceConstructor },
  1050   { &kTCPSOCKETCHILD_CID, false, nullptr, TCPSocketChildConstructor },
  1051   { &kTCPSOCKETPARENT_CID, false, nullptr, TCPSocketParentConstructor },
  1052   { &kTCPSERVERSOCKETCHILD_CID, false, nullptr, TCPServerSocketChildConstructor },
  1053   { &kUDPSOCKETCHILD_CID, false, nullptr, UDPSocketChildConstructor },
  1054   { &kNS_TIMESERVICE_CID, false, nullptr, nsITimeServiceConstructor },
  1055   { &kNS_MEDIASTREAMCONTROLLERSERVICE_CID, false, nullptr, nsIStreamingProtocolControllerServiceConstructor },
  1056 #ifdef MOZ_WIDGET_GONK
  1057   { &kGONK_GPS_GEOLOCATION_PROVIDER_CID, false, nullptr, nsIGeolocationProviderConstructor },
  1058 #endif
  1059   { &kNS_MEDIAMANAGERSERVICE_CID, false, nullptr, nsIMediaManagerServiceConstructor },
  1060 #ifdef MOZ_GAMEPAD
  1061   { &kNS_GAMEPAD_TEST_CID, false, nullptr, GamepadServiceTestConstructor },
  1062 #endif
  1063 #ifdef ACCESSIBILITY
  1064   { &kNS_ACCESSIBILITY_SERVICE_CID, false, nullptr, CreateA11yService },
  1065 #endif
  1066   { &kTELEPHONY_PROVIDER_CID, false, nullptr, nsITelephonyProviderConstructor },
  1067   { nullptr }
  1068 };
  1070 static const mozilla::Module::ContractIDEntry kLayoutContracts[] = {
  1071   XPCONNECT_CONTRACTS
  1072   { "@mozilla.org/layout/xul-boxobject;1", &kNS_BOXOBJECT_CID },
  1073 #ifdef MOZ_XUL
  1074   { "@mozilla.org/layout/xul-boxobject-listbox;1", &kNS_LISTBOXOBJECT_CID },
  1075   { "@mozilla.org/layout/xul-boxobject-menu;1", &kNS_MENUBOXOBJECT_CID },
  1076   { "@mozilla.org/layout/xul-boxobject-popup;1", &kNS_POPUPBOXOBJECT_CID },
  1077   { "@mozilla.org/layout/xul-boxobject-container;1", &kNS_CONTAINERBOXOBJECT_CID },
  1078   { "@mozilla.org/layout/xul-boxobject-scrollbox;1", &kNS_SCROLLBOXOBJECT_CID },
  1079   { "@mozilla.org/layout/xul-boxobject-tree;1", &kNS_TREEBOXOBJECT_CID },
  1080 #endif // MOZ_XUL
  1081 #ifdef MOZ_XUL
  1082   { "@mozilla.org/inspector/dom-view;1", &kIN_DOMVIEW_CID },
  1083 #endif
  1084   { "@mozilla.org/inspector/deep-tree-walker;1", &kIN_DEEPTREEWALKER_CID },
  1085   { "@mozilla.org/inspector/flasher;1", &kIN_FLASHER_CID },
  1086   { "@mozilla.org/inspector/search;1?type=cssvalue", &kIN_CSSVALUESEARCH_CID },
  1087   { IN_DOMUTILS_CONTRACTID, &kIN_DOMUTILS_CID },
  1088   { "@mozilla.org/xml/xml-document;1", &kNS_XMLDOCUMENT_CID },
  1089   { "@mozilla.org/svg/svg-document;1", &kNS_SVGDOCUMENT_CID },
  1090   { NS_DOMMULTIPARTBLOB_CONTRACTID, &kNS_DOMMULTIPARTBLOB_CID },
  1091   { NS_DOMMULTIPARTFILE_CONTRACTID, &kNS_DOMMULTIPARTFILE_CID },
  1092   { "@mozilla.org/content/dom-selection;1", &kNS_DOMSELECTION_CID },
  1093   { "@mozilla.org/content/post-content-iterator;1", &kNS_CONTENTITERATOR_CID },
  1094   { "@mozilla.org/content/pre-content-iterator;1", &kNS_PRECONTENTITERATOR_CID },
  1095   { "@mozilla.org/content/subtree-content-iterator;1", &kNS_SUBTREEITERATOR_CID },
  1096   { "@mozilla.org/content/canvas-rendering-context;1?id=experimental-webgl", &kNS_CANVASRENDERINGCONTEXTWEBGL_CID },
  1097 #ifdef MOZ_WEBGL_CONFORMANT
  1098   { "@mozilla.org/content/canvas-rendering-context;1?id=webgl", &kNS_CANVASRENDERINGCONTEXTWEBGL_CID },
  1099 #endif
  1100   { NS_DOC_ENCODER_CONTRACTID_BASE "text/xml", &kNS_TEXT_ENCODER_CID },
  1101   { NS_DOC_ENCODER_CONTRACTID_BASE "application/xml", &kNS_TEXT_ENCODER_CID },
  1102   { NS_DOC_ENCODER_CONTRACTID_BASE "application/xhtml+xml", &kNS_TEXT_ENCODER_CID },
  1103   { NS_DOC_ENCODER_CONTRACTID_BASE "image/svg+xml", &kNS_TEXT_ENCODER_CID },
  1104   { NS_DOC_ENCODER_CONTRACTID_BASE "text/html", &kNS_TEXT_ENCODER_CID },
  1105   { NS_DOC_ENCODER_CONTRACTID_BASE "text/plain", &kNS_TEXT_ENCODER_CID },
  1106   { NS_HTMLCOPY_ENCODER_CONTRACTID, &kNS_HTMLCOPY_TEXT_ENCODER_CID },
  1107   { NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "text/xml", &kNS_XMLCONTENTSERIALIZER_CID },
  1108   { NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "application/xml", &kNS_XMLCONTENTSERIALIZER_CID },
  1109   { NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "application/xhtml+xml", &kNS_XHTMLCONTENTSERIALIZER_CID },
  1110   { NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "image/svg+xml", &kNS_XMLCONTENTSERIALIZER_CID },
  1111   { NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "text/html", &kNS_HTMLCONTENTSERIALIZER_CID },
  1112   { NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "application/vnd.mozilla.xul+xml", &kNS_XMLCONTENTSERIALIZER_CID },
  1113   { NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "text/plain", &kNS_PLAINTEXTSERIALIZER_CID },
  1114   { NS_PARSERUTILS_CONTRACTID, &kNS_PARSERUTILS_CID },
  1115   { NS_SCRIPTABLEUNESCAPEHTML_CONTRACTID, &kNS_SCRIPTABLEUNESCAPEHTML_CID },
  1116   { NS_CONTENTPOLICY_CONTRACTID, &kNS_CONTENTPOLICY_CID },
  1117   { NS_DATADOCUMENTCONTENTPOLICY_CONTRACTID, &kNS_DATADOCUMENTCONTENTPOLICY_CID },
  1118   { NS_NODATAPROTOCOLCONTENTPOLICY_CONTRACTID, &kNS_NODATAPROTOCOLCONTENTPOLICY_CID },
  1119   { "@mozilla.org/xul/xul-controllers;1", &kNS_XULCONTROLLERS_CID },
  1120 #ifdef MOZ_XUL
  1121   { "@mozilla.org/xul/xul-sort-service;1", &kNS_XULSORTSERVICE_CID },
  1122   { "@mozilla.org/xul/xul-template-builder;1", &kNS_XULTEMPLATEBUILDER_CID },
  1123   { "@mozilla.org/xul/xul-tree-builder;1", &kNS_XULTREEBUILDER_CID },
  1124   { "@mozilla.org/xul/xul-document;1", &kNS_XULDOCUMENT_CID },
  1125 #endif
  1126   { CONTENT_DLF_CONTRACTID, &kNS_CONTENT_DOCUMENT_LOADER_FACTORY_CID },
  1127   { NS_JSPROTOCOLHANDLER_CONTRACTID, &kNS_JSPROTOCOLHANDLER_CID },
  1128   { NS_WINDOWCONTROLLER_CONTRACTID, &kNS_WINDOWCONTROLLER_CID },
  1129   { PLUGIN_DLF_CONTRACTID, &kNS_PLUGINDOCLOADERFACTORY_CID },
  1130   { NS_STYLESHEETSERVICE_CONTRACTID, &kNS_STYLESHEETSERVICE_CID },
  1131   { TRANSFORMIIX_XSLT_PROCESSOR_CONTRACTID, &kTRANSFORMIIX_XSLT_PROCESSOR_CID },
  1132   { NS_XPATH_EVALUATOR_CONTRACTID, &kTRANSFORMIIX_XPATH_EVALUATOR_CID },
  1133   { TRANSFORMIIX_NODESET_CONTRACTID, &kTRANSFORMIIX_NODESET_CID },
  1134   { NS_XMLSERIALIZER_CONTRACTID, &kNS_XMLSERIALIZER_CID },
  1135   { NS_FILEREADER_CONTRACTID, &kNS_FILEREADER_CID },
  1136   { NS_FORMDATA_CONTRACTID, &kNS_FORMDATA_CID },
  1137   { NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX BLOBURI_SCHEME, &kNS_BLOBPROTOCOLHANDLER_CID },
  1138   { NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX MEDIASTREAMURI_SCHEME, &kNS_MEDIASTREAMPROTOCOLHANDLER_CID },
  1139   { NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX MEDIASOURCEURI_SCHEME, &kNS_MEDIASOURCEPROTOCOLHANDLER_CID },
  1140   { NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX FONTTABLEURI_SCHEME, &kNS_FONTTABLEPROTOCOLHANDLER_CID },
  1141   { NS_XMLHTTPREQUEST_CONTRACTID, &kNS_XMLHTTPREQUEST_CID },
  1142   { NS_DOMPARSER_CONTRACTID, &kNS_DOMPARSER_CID },
  1143   { XPC_EXCEPTION_CONTRACTID, &kNS_XPCEXCEPTION_CID },
  1144   { "@mozilla.org/dom/localStorage-manager;1", &kNS_DOMLOCALSTORAGEMANAGER_CID },
  1145   // Keeping the old ContractID for backward compatibility
  1146   { "@mozilla.org/dom/storagemanager;1", &kNS_DOMLOCALSTORAGEMANAGER_CID },
  1147   { "@mozilla.org/dom/sessionStorage-manager;1", &kNS_DOMSESSIONSTORAGEMANAGER_CID },
  1148   { "@mozilla.org/dom/json;1", &kNS_DOMJSON_CID },
  1149   { "@mozilla.org/editor/texteditor;1", &kNS_TEXTEDITOR_CID },
  1150   { INDEXEDDB_MANAGER_CONTRACTID, &kINDEXEDDB_MANAGER_CID },
  1151   { DOMREQUEST_SERVICE_CONTRACTID, &kDOMREQUEST_SERVICE_CID },
  1152   { QUOTA_MANAGER_CONTRACTID, &kQUOTA_MANAGER_CID },
  1153 #ifdef MOZ_WIDGET_GONK
  1154   { SYSTEMWORKERMANAGER_CONTRACTID, &kSYSTEMWORKERMANAGER_CID },
  1155 #endif
  1156 #ifdef MOZ_B2G_BT
  1157   { BLUETOOTHSERVICE_CONTRACTID, &kBLUETOOTHSERVICE_CID },
  1158 #endif
  1159 #ifdef MOZ_WIDGET_GONK
  1160   { NS_AUDIOMANAGER_CONTRACTID, &kNS_AUDIOMANAGER_CID },
  1161   { NS_VOLUMESERVICE_CONTRACTID, &kNS_VOLUMESERVICE_CID },
  1162 #endif
  1163   { NS_AUDIOCHANNELAGENT_CONTRACTID, &kNS_AUDIOCHANNELAGENT_CID },
  1164   { "@mozilla.org/editor/htmleditor;1", &kNS_HTMLEDITOR_CID },
  1165   { "@mozilla.org/editor/editorcontroller;1", &kNS_EDITORCONTROLLER_CID },
  1166   { "@mozilla.org/editor/editingcontroller;1", &kNS_EDITINGCONTROLLER_CID },
  1167   { "@mozilla.org/textservices/textservicesdocument;1", &kNS_TEXTSERVICESDOCUMENT_CID },
  1168   { "@mozilla.org/geolocation/service;1", &kNS_GEOLOCATION_SERVICE_CID },
  1169   { "@mozilla.org/geolocation;1", &kNS_GEOLOCATION_CID },
  1170   { "@mozilla.org/audiochannel/service;1", &kNS_AUDIOCHANNEL_SERVICE_CID },
  1171   { "@mozilla.org/focus-manager;1", &kNS_FOCUSMANAGER_CID },
  1172 #ifdef MOZ_WEBSPEECH
  1173   { NS_SPEECH_RECOGNITION_SERVICE_CONTRACTID_PREFIX "fake", &kNS_FAKE_SPEECH_RECOGNITION_SERVICE_CID },
  1174   { NS_SYNTHVOICEREGISTRY_CONTRACTID, &kNS_SYNTHVOICEREGISTRY_CID },
  1175 #endif
  1176   { CSPSERVICE_CONTRACTID, &kCSPSERVICE_CID },
  1177   { NS_MIXEDCONTENTBLOCKER_CONTRACTID, &kNS_MIXEDCONTENTBLOCKER_CID },
  1178   { NS_EVENTLISTENERSERVICE_CONTRACTID, &kNS_EVENTLISTENERSERVICE_CID },
  1179   { NS_GLOBALMESSAGEMANAGER_CONTRACTID, &kNS_GLOBALMESSAGEMANAGER_CID },
  1180   { NS_PARENTPROCESSMESSAGEMANAGER_CONTRACTID, &kNS_PARENTPROCESSMESSAGEMANAGER_CID },
  1181   { NS_CHILDPROCESSMESSAGEMANAGER_CONTRACTID, &kNS_CHILDPROCESSMESSAGEMANAGER_CID },
  1182   { NSCHANNELPOLICY_CONTRACTID, &kNSCHANNELPOLICY_CID },
  1183   { NS_SCRIPTSECURITYMANAGER_CONTRACTID, &kNS_SCRIPTSECURITYMANAGER_CID },
  1184   { NS_GLOBAL_CHANNELEVENTSINK_CONTRACTID, &kNS_SCRIPTSECURITYMANAGER_CID },
  1185   { NS_PRINCIPAL_CONTRACTID, &kNS_PRINCIPAL_CID },
  1186   { NS_SYSTEMPRINCIPAL_CONTRACTID, &kNS_SYSTEMPRINCIPAL_CID },
  1187   { NS_NULLPRINCIPAL_CONTRACTID, &kNS_NULLPRINCIPAL_CID },
  1188   { NS_SECURITYNAMESET_CONTRACTID, &kNS_SECURITYNAMESET_CID },
  1189   { NS_DEVICE_SENSORS_CONTRACTID, &kNS_DEVICE_SENSORS_CID },
  1190 #ifndef MOZ_WIDGET_GONK
  1191 #if defined(ANDROID)
  1192   { "@mozilla.org/widget/hapticfeedback;1", &kNS_HAPTICFEEDBACK_CID },
  1193 #endif
  1194 #endif
  1195   { THIRDPARTYUTIL_CONTRACTID, &kTHIRDPARTYUTIL_CID },
  1196   { NS_STRUCTUREDCLONECONTAINER_CONTRACTID, &kNS_STRUCTUREDCLONECONTAINER_CID },
  1197   { SMS_SERVICE_CONTRACTID, &kSMS_SERVICE_CID },
  1198   { MMS_SERVICE_CONTRACTID, &kMMS_SERVICE_CID },
  1199   { MOBILE_MESSAGE_SERVICE_CONTRACTID, &kMOBILE_MESSAGE_SERVICE_CID },
  1200   { MOBILE_MESSAGE_DATABASE_SERVICE_CONTRACTID, &kMOBILE_MESSAGE_DATABASE_SERVICE_CID },
  1201   { POWERMANAGERSERVICE_CONTRACTID, &kNS_POWERMANAGERSERVICE_CID },
  1202   { OSFILECONSTANTSSERVICE_CONTRACTID, &kOSFILECONSTANTSSERVICE_CID },
  1203   { ALARMHALSERVICE_CONTRACTID, &kNS_ALARMHALSERVICE_CID },
  1204   { "@mozilla.org/tcp-socket-child;1", &kTCPSOCKETCHILD_CID },
  1205   { "@mozilla.org/tcp-socket-parent;1", &kTCPSOCKETPARENT_CID },
  1206   { "@mozilla.org/tcp-server-socket-child;1", &kTCPSERVERSOCKETCHILD_CID },
  1207   { "@mozilla.org/udp-socket-child;1", &kUDPSOCKETCHILD_CID },
  1208   { TIMESERVICE_CONTRACTID, &kNS_TIMESERVICE_CID },
  1209   { MEDIASTREAMCONTROLLERSERVICE_CONTRACTID, &kNS_MEDIASTREAMCONTROLLERSERVICE_CID },
  1210 #ifdef MOZ_WIDGET_GONK
  1211   { GONK_GPS_GEOLOCATION_PROVIDER_CONTRACTID, &kGONK_GPS_GEOLOCATION_PROVIDER_CID },
  1212 #endif
  1213 #ifdef MOZ_GAMEPAD
  1214   { NS_GAMEPAD_TEST_CONTRACTID, &kNS_GAMEPAD_TEST_CID },
  1215 #endif
  1216   { MEDIAMANAGERSERVICE_CONTRACTID, &kNS_MEDIAMANAGERSERVICE_CID },
  1217 #ifdef ACCESSIBILITY
  1218   { "@mozilla.org/accessibilityService;1", &kNS_ACCESSIBILITY_SERVICE_CID },
  1219   { "@mozilla.org/accessibleRetrieval;1", &kNS_ACCESSIBILITY_SERVICE_CID },
  1220 #endif
  1221   { TELEPHONY_PROVIDER_CONTRACTID, &kTELEPHONY_PROVIDER_CID },
  1222   { nullptr }
  1223 };
  1225 static const mozilla::Module::CategoryEntry kLayoutCategories[] = {
  1226   XPCONNECT_CATEGORIES
  1227   { "content-policy", NS_DATADOCUMENTCONTENTPOLICY_CONTRACTID, NS_DATADOCUMENTCONTENTPOLICY_CONTRACTID },
  1228   { "content-policy", NS_NODATAPROTOCOLCONTENTPOLICY_CONTRACTID, NS_NODATAPROTOCOLCONTENTPOLICY_CONTRACTID },
  1229   { "content-policy", "CSPService", CSPSERVICE_CONTRACTID },
  1230   { "content-policy", NS_MIXEDCONTENTBLOCKER_CONTRACTID, NS_MIXEDCONTENTBLOCKER_CONTRACTID },
  1231   { "net-channel-event-sinks", "CSPService", CSPSERVICE_CONTRACTID },
  1232   { JAVASCRIPT_GLOBAL_STATIC_NAMESET_CATEGORY, "PrivilegeManager", NS_SECURITYNAMESET_CONTRACTID },
  1233   { "app-startup", "Script Security Manager", "service," NS_SCRIPTSECURITYMANAGER_CONTRACTID },
  1234   { TOPIC_WEB_APP_CLEAR_DATA, "QuotaManager", "service," QUOTA_MANAGER_CONTRACTID },
  1235 #ifdef MOZ_WIDGET_GONK
  1236   { "app-startup", "Volume Service", "service," NS_VOLUMESERVICE_CONTRACTID },
  1237 #endif
  1238   CONTENTDLF_CATEGORIES
  1239 #ifdef MOZ_WIDGET_GONK
  1240   { "profile-after-change", "Gonk System Worker Manager", SYSTEMWORKERMANAGER_CONTRACTID },
  1241 #endif
  1242 #ifdef MOZ_B2G_BT
  1243   { "profile-after-change", "Bluetooth Service", BLUETOOTHSERVICE_CONTRACTID },
  1244 #endif
  1245   { nullptr }
  1246 };
  1248 static void
  1249 LayoutModuleDtor()
  1251   Shutdown();
  1252   nsContentUtils::XPCOMShutdown();
  1254   // Layout depends heavily on gfx and imagelib, so we want to make sure that
  1255   // these modules are shut down after all the layout cleanup runs.
  1256   mozilla::image::ShutdownModule();
  1257   gfxPlatform::Shutdown();
  1259   nsScriptSecurityManager::Shutdown();
  1260   xpcModuleDtor();
  1263 static const mozilla::Module kLayoutModule = {
  1264   mozilla::Module::kVersion,
  1265   kLayoutCIDs,
  1266   kLayoutContracts,
  1267   kLayoutCategories,
  1268   nullptr,
  1269   Initialize,
  1270   LayoutModuleDtor
  1271 };
  1273 NSMODULE_DEFN(nsLayoutModule) = &kLayoutModule;

mercurial