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