Line data Source code
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 "mozilla/ModuleUtils.h"
8 : #include "nsDocShellCID.h"
9 :
10 : #include "nsDocShell.h"
11 : #include "nsDefaultURIFixup.h"
12 : #include "nsWebNavigationInfo.h"
13 : #include "nsAboutRedirector.h"
14 : #include "nsCDefaultURIFixup.h"
15 :
16 : // uriloader
17 : #include "nsURILoader.h"
18 : #include "nsDocLoader.h"
19 : #include "nsOSHelperAppService.h"
20 : #include "nsExternalProtocolHandler.h"
21 : #include "nsPrefetchService.h"
22 : #include "nsOfflineCacheUpdate.h"
23 : #include "nsLocalHandlerApp.h"
24 : #include "ContentHandlerService.h"
25 : #ifdef MOZ_ENABLE_DBUS
26 : #include "nsDBusHandlerApp.h"
27 : #endif
28 : #if defined(MOZ_WIDGET_ANDROID)
29 : #include "nsExternalSharingAppService.h"
30 : #include "nsExternalURLHandlerService.h"
31 : #endif
32 :
33 : // session history
34 : #include "nsSHEntry.h"
35 : #include "nsSHEntryShared.h"
36 : #include "nsSHistory.h"
37 : #include "nsSHTransaction.h"
38 :
39 : // download history
40 : #include "nsDownloadHistory.h"
41 :
42 :
43 : // LoadContexts (used for testing)
44 : #include "LoadContext.h"
45 :
46 : using mozilla::dom::ContentHandlerService;
47 :
48 : static bool gInitialized = false;
49 :
50 : // The one time initialization for this module
51 : static nsresult
52 3 : Initialize()
53 : {
54 3 : NS_PRECONDITION(!gInitialized, "docshell module already initialized");
55 3 : if (gInitialized) {
56 0 : return NS_OK;
57 : }
58 3 : gInitialized = true;
59 :
60 3 : nsresult rv = nsSHistory::Startup();
61 3 : NS_ENSURE_SUCCESS(rv, rv);
62 :
63 3 : return NS_OK;
64 : }
65 :
66 : static void
67 0 : Shutdown()
68 : {
69 0 : nsSHistory::Shutdown();
70 0 : nsSHEntryShared::Shutdown();
71 0 : gInitialized = false;
72 0 : }
73 :
74 : // docshell
75 10 : NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsDocShell, Init)
76 4 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsDefaultURIFixup)
77 4 : NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsWebNavigationInfo, Init)
78 :
79 : // uriloader
80 4 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsURILoader)
81 6 : NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsDocLoader, Init)
82 6 : NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsOSHelperAppService, Init)
83 4 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsExternalProtocolHandler)
84 0 : NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrefetchService, Init)
85 1 : NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsOfflineCacheUpdateService,
86 : nsOfflineCacheUpdateService::GetInstance)
87 0 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsOfflineCacheUpdate)
88 0 : NS_GENERIC_FACTORY_CONSTRUCTOR(PlatformLocalHandlerApp_t)
89 : #ifdef MOZ_ENABLE_DBUS
90 0 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsDBusHandlerApp)
91 : #endif
92 : #if defined(MOZ_WIDGET_ANDROID)
93 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsExternalSharingAppService)
94 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsExternalURLHandlerService)
95 : #endif
96 0 : NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(ContentHandlerService, Init)
97 :
98 : // session history
99 2 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsSHEntry)
100 2 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsSHTransaction)
101 4 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsSHistory)
102 :
103 : // download history
104 0 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsDownloadHistory)
105 :
106 : NS_DEFINE_NAMED_CID(NS_DOCSHELL_CID);
107 : NS_DEFINE_NAMED_CID(NS_DEFAULTURIFIXUP_CID);
108 : NS_DEFINE_NAMED_CID(NS_WEBNAVIGATION_INFO_CID);
109 : NS_DEFINE_NAMED_CID(NS_ABOUT_REDIRECTOR_MODULE_CID);
110 : NS_DEFINE_NAMED_CID(NS_URI_LOADER_CID);
111 : NS_DEFINE_NAMED_CID(NS_DOCUMENTLOADER_SERVICE_CID);
112 : NS_DEFINE_NAMED_CID(NS_EXTERNALHELPERAPPSERVICE_CID);
113 : NS_DEFINE_NAMED_CID(NS_EXTERNALPROTOCOLHANDLER_CID);
114 : NS_DEFINE_NAMED_CID(NS_PREFETCHSERVICE_CID);
115 : NS_DEFINE_NAMED_CID(NS_OFFLINECACHEUPDATESERVICE_CID);
116 : NS_DEFINE_NAMED_CID(NS_OFFLINECACHEUPDATE_CID);
117 : NS_DEFINE_NAMED_CID(NS_LOCALHANDLERAPP_CID);
118 : #ifdef MOZ_ENABLE_DBUS
119 : NS_DEFINE_NAMED_CID(NS_DBUSHANDLERAPP_CID);
120 : #endif
121 : #if defined(MOZ_WIDGET_ANDROID)
122 : NS_DEFINE_NAMED_CID(NS_EXTERNALSHARINGAPPSERVICE_CID);
123 : NS_DEFINE_NAMED_CID(NS_EXTERNALURLHANDLERSERVICE_CID);
124 : #endif
125 : NS_DEFINE_NAMED_CID(NS_SHENTRY_CID);
126 : NS_DEFINE_NAMED_CID(NS_SHTRANSACTION_CID);
127 : NS_DEFINE_NAMED_CID(NS_SHISTORY_CID);
128 : NS_DEFINE_NAMED_CID(NS_SHISTORY_INTERNAL_CID);
129 : NS_DEFINE_NAMED_CID(NS_DOWNLOADHISTORY_CID);
130 : NS_DEFINE_NAMED_CID(NS_CONTENTHANDLERSERVICE_CID);
131 : NS_DEFINE_NAMED_CID(NS_LOADCONTEXT_CID);
132 : NS_DEFINE_NAMED_CID(NS_PRIVATELOADCONTEXT_CID);
133 :
134 : const mozilla::Module::CIDEntry kDocShellCIDs[] = {
135 : { &kNS_DOCSHELL_CID, false, nullptr, nsDocShellConstructor },
136 : { &kNS_DEFAULTURIFIXUP_CID, false, nullptr, nsDefaultURIFixupConstructor },
137 : { &kNS_WEBNAVIGATION_INFO_CID, false, nullptr, nsWebNavigationInfoConstructor },
138 : { &kNS_ABOUT_REDIRECTOR_MODULE_CID, false, nullptr, nsAboutRedirector::Create },
139 : { &kNS_URI_LOADER_CID, false, nullptr, nsURILoaderConstructor },
140 : { &kNS_DOCUMENTLOADER_SERVICE_CID, false, nullptr, nsDocLoaderConstructor },
141 : { &kNS_EXTERNALHELPERAPPSERVICE_CID, false, nullptr, nsOSHelperAppServiceConstructor },
142 : { &kNS_CONTENTHANDLERSERVICE_CID, false, nullptr, ContentHandlerServiceConstructor,
143 : mozilla::Module::CONTENT_PROCESS_ONLY },
144 : { &kNS_EXTERNALPROTOCOLHANDLER_CID, false, nullptr, nsExternalProtocolHandlerConstructor },
145 : { &kNS_PREFETCHSERVICE_CID, false, nullptr, nsPrefetchServiceConstructor },
146 : { &kNS_OFFLINECACHEUPDATESERVICE_CID, false, nullptr, nsOfflineCacheUpdateServiceConstructor },
147 : { &kNS_OFFLINECACHEUPDATE_CID, false, nullptr, nsOfflineCacheUpdateConstructor },
148 : { &kNS_LOCALHANDLERAPP_CID, false, nullptr, PlatformLocalHandlerApp_tConstructor },
149 : #ifdef MOZ_ENABLE_DBUS
150 : { &kNS_DBUSHANDLERAPP_CID, false, nullptr, nsDBusHandlerAppConstructor },
151 : #endif
152 : #if defined(MOZ_WIDGET_ANDROID)
153 : { &kNS_EXTERNALSHARINGAPPSERVICE_CID, false, nullptr, nsExternalSharingAppServiceConstructor },
154 : { &kNS_EXTERNALURLHANDLERSERVICE_CID, false, nullptr, nsExternalURLHandlerServiceConstructor },
155 : #endif
156 : { &kNS_SHENTRY_CID, false, nullptr, nsSHEntryConstructor },
157 : { &kNS_SHTRANSACTION_CID, false, nullptr, nsSHTransactionConstructor },
158 : { &kNS_SHISTORY_CID, false, nullptr, nsSHistoryConstructor },
159 : { &kNS_SHISTORY_INTERNAL_CID, false, nullptr, nsSHistoryConstructor },
160 : { &kNS_DOWNLOADHISTORY_CID, false, nullptr, nsDownloadHistoryConstructor },
161 : { &kNS_LOADCONTEXT_CID, false, nullptr, mozilla::CreateTestLoadContext },
162 : { &kNS_PRIVATELOADCONTEXT_CID, false, nullptr, mozilla::CreatePrivateTestLoadContext },
163 : { nullptr }
164 : };
165 :
166 : const mozilla::Module::ContractIDEntry kDocShellContracts[] = {
167 : { "@mozilla.org/docshell;1", &kNS_DOCSHELL_CID },
168 : { NS_URIFIXUP_CONTRACTID, &kNS_DEFAULTURIFIXUP_CID },
169 : { NS_WEBNAVIGATION_INFO_CONTRACTID, &kNS_WEBNAVIGATION_INFO_CID },
170 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
171 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "about", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
172 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "addons", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
173 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "buildconfig", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
174 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "checkerboard", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
175 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "config", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
176 : #ifdef MOZ_CRASHREPORTER
177 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "crashes", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
178 : #endif
179 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "credits", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
180 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "license", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
181 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "logo", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
182 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "memory", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
183 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "mozilla", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
184 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "neterror", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
185 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "networking", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
186 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "newaddon", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
187 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "performance", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
188 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "plugins", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
189 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "serviceworkers", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
190 : #ifndef ANDROID
191 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "profiles", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
192 : #endif
193 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "srcdoc", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
194 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "support", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
195 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "telemetry", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
196 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "webrtc", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
197 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "printpreview", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
198 : { NS_ABOUT_MODULE_CONTRACTID_PREFIX "url-classifier", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
199 : { NS_URI_LOADER_CONTRACTID, &kNS_URI_LOADER_CID },
200 : { NS_DOCUMENTLOADER_SERVICE_CONTRACTID, &kNS_DOCUMENTLOADER_SERVICE_CID },
201 : { NS_HANDLERSERVICE_CONTRACTID, &kNS_CONTENTHANDLERSERVICE_CID, mozilla::Module::CONTENT_PROCESS_ONLY },
202 : { NS_EXTERNALHELPERAPPSERVICE_CONTRACTID, &kNS_EXTERNALHELPERAPPSERVICE_CID },
203 : { NS_EXTERNALPROTOCOLSERVICE_CONTRACTID, &kNS_EXTERNALHELPERAPPSERVICE_CID },
204 : { NS_MIMESERVICE_CONTRACTID, &kNS_EXTERNALHELPERAPPSERVICE_CID },
205 : { NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX"default", &kNS_EXTERNALPROTOCOLHANDLER_CID },
206 : { NS_PREFETCHSERVICE_CONTRACTID, &kNS_PREFETCHSERVICE_CID },
207 : { NS_OFFLINECACHEUPDATESERVICE_CONTRACTID, &kNS_OFFLINECACHEUPDATESERVICE_CID },
208 : { NS_OFFLINECACHEUPDATE_CONTRACTID, &kNS_OFFLINECACHEUPDATE_CID },
209 : { NS_LOCALHANDLERAPP_CONTRACTID, &kNS_LOCALHANDLERAPP_CID },
210 : #ifdef MOZ_ENABLE_DBUS
211 : { NS_DBUSHANDLERAPP_CONTRACTID, &kNS_DBUSHANDLERAPP_CID },
212 : #endif
213 : #if defined(MOZ_WIDGET_ANDROID)
214 : { NS_EXTERNALSHARINGAPPSERVICE_CONTRACTID, &kNS_EXTERNALSHARINGAPPSERVICE_CID },
215 : { NS_EXTERNALURLHANDLERSERVICE_CONTRACTID, &kNS_EXTERNALURLHANDLERSERVICE_CID },
216 : #endif
217 : { NS_SHENTRY_CONTRACTID, &kNS_SHENTRY_CID },
218 : { NS_SHTRANSACTION_CONTRACTID, &kNS_SHTRANSACTION_CID },
219 : { NS_SHISTORY_CONTRACTID, &kNS_SHISTORY_CID },
220 : { NS_SHISTORY_INTERNAL_CONTRACTID, &kNS_SHISTORY_INTERNAL_CID },
221 : { NS_DOWNLOADHISTORY_CONTRACTID, &kNS_DOWNLOADHISTORY_CID },
222 : { NS_LOADCONTEXT_CONTRACTID, &kNS_LOADCONTEXT_CID },
223 : { NS_PRIVATELOADCONTEXT_CONTRACTID, &kNS_PRIVATELOADCONTEXT_CID },
224 : { nullptr }
225 : };
226 :
227 : static const mozilla::Module kDocShellModule = {
228 : mozilla::Module::kVersion,
229 : kDocShellCIDs,
230 : kDocShellContracts,
231 : nullptr,
232 : nullptr,
233 : Initialize,
234 : Shutdown
235 : };
236 :
237 : NSMODULE_DEFN(docshell_provider) = &kDocShellModule;
|