|
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- |
|
2 * |
|
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 |
|
9 #include "nsNSSComponent.h" |
|
10 #include "nsSSLSocketProvider.h" |
|
11 #include "nsTLSSocketProvider.h" |
|
12 #include "nsKeygenHandler.h" |
|
13 |
|
14 #include "nsSDR.h" |
|
15 |
|
16 #include "nsPK11TokenDB.h" |
|
17 #include "nsPKCS11Slot.h" |
|
18 #include "nsNSSCertificate.h" |
|
19 #include "nsNSSCertificateFakeTransport.h" |
|
20 #include "nsNSSCertificateDB.h" |
|
21 #include "nsNSSCertCache.h" |
|
22 #include "nsCMS.h" |
|
23 #ifdef MOZ_XUL |
|
24 #include "nsCertTree.h" |
|
25 #endif |
|
26 #include "nsCrypto.h" |
|
27 #include "nsCryptoHash.h" |
|
28 //For the NS_CRYPTO_CONTRACTID define |
|
29 #include "nsDOMCID.h" |
|
30 #include "nsNetCID.h" |
|
31 #include "nsCMSSecureMessage.h" |
|
32 #include "nsCertPicker.h" |
|
33 #include "nsCURILoader.h" |
|
34 #include "nsICategoryManager.h" |
|
35 #include "nsNTLMAuthModule.h" |
|
36 #include "nsStreamCipher.h" |
|
37 #include "nsKeyModule.h" |
|
38 #include "nsDataSignatureVerifier.h" |
|
39 #include "nsCertOverrideService.h" |
|
40 #include "nsRandomGenerator.h" |
|
41 #include "nsSSLStatus.h" |
|
42 #include "TransportSecurityInfo.h" |
|
43 #include "NSSErrorsService.h" |
|
44 #include "nsNSSVersion.h" |
|
45 |
|
46 #include "nsXULAppAPI.h" |
|
47 |
|
48 #include "PSMContentListener.h" |
|
49 |
|
50 #define NS_IS_PROCESS_DEFAULT \ |
|
51 (GeckoProcessType_Default == XRE_GetProcessType()) |
|
52 |
|
53 #define NS_NSS_INSTANTIATE(ensureOperator, _InstanceClass) \ |
|
54 PR_BEGIN_MACRO \ |
|
55 _InstanceClass * inst; \ |
|
56 inst = new _InstanceClass(); \ |
|
57 NS_ADDREF(inst); \ |
|
58 rv = inst->QueryInterface(aIID, aResult); \ |
|
59 NS_RELEASE(inst); \ |
|
60 PR_END_MACRO |
|
61 |
|
62 #define NS_NSS_INSTANTIATE_INIT(ensureOperator, _InstanceClass, _InitMethod) \ |
|
63 PR_BEGIN_MACRO \ |
|
64 _InstanceClass * inst; \ |
|
65 inst = new _InstanceClass(); \ |
|
66 NS_ADDREF(inst); \ |
|
67 rv = inst->_InitMethod(); \ |
|
68 if(NS_SUCCEEDED(rv)) { \ |
|
69 rv = inst->QueryInterface(aIID, aResult); \ |
|
70 } \ |
|
71 NS_RELEASE(inst); \ |
|
72 PR_END_MACRO |
|
73 |
|
74 |
|
75 #define NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(ensureOperator, \ |
|
76 _InstanceClass) \ |
|
77 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_BYPROCESS(ensureOperator, \ |
|
78 _InstanceClass, \ |
|
79 _InstanceClass) |
|
80 |
|
81 // These two macros are ripped off from nsIGenericFactory.h and slightly |
|
82 // modified. |
|
83 #define NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_BYPROCESS(ensureOperator, \ |
|
84 _InstanceClassChrome, \ |
|
85 _InstanceClassContent) \ |
|
86 static nsresult \ |
|
87 _InstanceClassChrome##Constructor(nsISupports *aOuter, REFNSIID aIID, \ |
|
88 void **aResult) \ |
|
89 { \ |
|
90 nsresult rv; \ |
|
91 \ |
|
92 *aResult = nullptr; \ |
|
93 if (nullptr != aOuter) { \ |
|
94 rv = NS_ERROR_NO_AGGREGATION; \ |
|
95 return rv; \ |
|
96 } \ |
|
97 \ |
|
98 if (!EnsureNSSInitialized(ensureOperator)) \ |
|
99 return NS_ERROR_FAILURE; \ |
|
100 \ |
|
101 if (NS_IS_PROCESS_DEFAULT) \ |
|
102 NS_NSS_INSTANTIATE(ensureOperator, _InstanceClassChrome); \ |
|
103 else \ |
|
104 NS_NSS_INSTANTIATE(ensureOperator, _InstanceClassContent); \ |
|
105 \ |
|
106 if (ensureOperator == nssLoadingComponent) \ |
|
107 { \ |
|
108 if (NS_SUCCEEDED(rv)) \ |
|
109 EnsureNSSInitialized(nssInitSucceeded); \ |
|
110 else \ |
|
111 EnsureNSSInitialized(nssInitFailed); \ |
|
112 } \ |
|
113 \ |
|
114 return rv; \ |
|
115 } |
|
116 |
|
117 |
|
118 #define NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_INIT(ensureOperator, \ |
|
119 _InstanceClass, \ |
|
120 _InitMethod) \ |
|
121 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_INIT_BYPROCESS(ensureOperator, \ |
|
122 _InstanceClass, \ |
|
123 _InstanceClass, \ |
|
124 _InitMethod) |
|
125 |
|
126 #define NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_INIT_BYPROCESS(ensureOperator, \ |
|
127 _InstanceClassChrome, \ |
|
128 _InstanceClassContent, \ |
|
129 _InitMethod) \ |
|
130 static nsresult \ |
|
131 _InstanceClassChrome##Constructor(nsISupports *aOuter, REFNSIID aIID, \ |
|
132 void **aResult) \ |
|
133 { \ |
|
134 nsresult rv; \ |
|
135 \ |
|
136 *aResult = nullptr; \ |
|
137 if (nullptr != aOuter) { \ |
|
138 rv = NS_ERROR_NO_AGGREGATION; \ |
|
139 return rv; \ |
|
140 } \ |
|
141 \ |
|
142 if (!EnsureNSSInitialized(ensureOperator)) \ |
|
143 return NS_ERROR_FAILURE; \ |
|
144 \ |
|
145 if (NS_IS_PROCESS_DEFAULT) \ |
|
146 NS_NSS_INSTANTIATE_INIT(ensureOperator, \ |
|
147 _InstanceClassChrome, \ |
|
148 _InitMethod); \ |
|
149 else \ |
|
150 NS_NSS_INSTANTIATE_INIT(ensureOperator, \ |
|
151 _InstanceClassContent, \ |
|
152 _InitMethod); \ |
|
153 \ |
|
154 if (ensureOperator == nssLoadingComponent) \ |
|
155 { \ |
|
156 if (NS_SUCCEEDED(rv)) \ |
|
157 EnsureNSSInitialized(nssInitSucceeded); \ |
|
158 else \ |
|
159 EnsureNSSInitialized(nssInitFailed); \ |
|
160 } \ |
|
161 \ |
|
162 return rv; \ |
|
163 } |
|
164 |
|
165 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nssLoadingComponent, nsNSSComponent, |
|
166 Init) |
|
167 |
|
168 using namespace mozilla::psm; |
|
169 |
|
170 namespace { |
|
171 |
|
172 // Use the special factory constructor for everything this module implements, |
|
173 // because all code could potentially require the NSS library. |
|
174 // Our factory constructor takes an additional boolean parameter. |
|
175 // Only for the nsNSSComponent, set this to true. |
|
176 // All other classes must have this set to false. |
|
177 |
|
178 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsSSLSocketProvider) |
|
179 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsTLSSocketProvider) |
|
180 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsSecretDecoderRing) |
|
181 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsPK11TokenDB) |
|
182 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsPKCS11ModuleDB) |
|
183 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nssEnsure, PSMContentListener, init) |
|
184 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_BYPROCESS(nssEnsureOnChromeOnly, |
|
185 nsNSSCertificate, |
|
186 nsNSSCertificateFakeTransport) |
|
187 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsNSSCertificateDB) |
|
188 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsNSSCertCache) |
|
189 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsNSSCertList) |
|
190 #ifdef MOZ_XUL |
|
191 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCertTree) |
|
192 #endif |
|
193 #ifndef MOZ_DISABLE_CRYPTOLEGACY |
|
194 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCrypto) |
|
195 #endif |
|
196 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsPkcs11) |
|
197 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCMSSecureMessage) |
|
198 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCMSDecoder) |
|
199 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCMSEncoder) |
|
200 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCMSMessage) |
|
201 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCertPicker) |
|
202 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nssEnsure, nsNTLMAuthModule, InitTest) |
|
203 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCryptoHash) |
|
204 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCryptoHMAC) |
|
205 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsStreamCipher) |
|
206 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsKeyObject) |
|
207 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsKeyObjectFactory) |
|
208 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsDataSignatureVerifier) |
|
209 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nssEnsure, nsCertOverrideService, Init) |
|
210 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsRandomGenerator) |
|
211 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsureOnChromeOnly, nsSSLStatus) |
|
212 NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsureOnChromeOnly, TransportSecurityInfo) |
|
213 |
|
214 typedef mozilla::psm::NSSErrorsService NSSErrorsService; |
|
215 NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(NSSErrorsService, Init) |
|
216 NS_GENERIC_FACTORY_CONSTRUCTOR(nsNSSVersion) |
|
217 |
|
218 NS_DEFINE_NAMED_CID(NS_NSSCOMPONENT_CID); |
|
219 NS_DEFINE_NAMED_CID(NS_SSLSOCKETPROVIDER_CID); |
|
220 NS_DEFINE_NAMED_CID(NS_STARTTLSSOCKETPROVIDER_CID); |
|
221 NS_DEFINE_NAMED_CID(NS_SDR_CID); |
|
222 NS_DEFINE_NAMED_CID(NS_PK11TOKENDB_CID); |
|
223 NS_DEFINE_NAMED_CID(NS_PKCS11MODULEDB_CID); |
|
224 NS_DEFINE_NAMED_CID(NS_PSMCONTENTLISTEN_CID); |
|
225 NS_DEFINE_NAMED_CID(NS_X509CERT_CID); |
|
226 NS_DEFINE_NAMED_CID(NS_X509CERTDB_CID); |
|
227 NS_DEFINE_NAMED_CID(NS_X509CERTLIST_CID); |
|
228 NS_DEFINE_NAMED_CID(NS_NSSCERTCACHE_CID); |
|
229 NS_DEFINE_NAMED_CID(NS_FORMPROCESSOR_CID); |
|
230 #ifdef MOZ_XUL |
|
231 NS_DEFINE_NAMED_CID(NS_CERTTREE_CID); |
|
232 #endif |
|
233 NS_DEFINE_NAMED_CID(NS_PKCS11_CID); |
|
234 #ifndef MOZ_DISABLE_CRYPTOLEGACY |
|
235 NS_DEFINE_NAMED_CID(NS_CRYPTO_CID); |
|
236 #endif |
|
237 NS_DEFINE_NAMED_CID(NS_CMSSECUREMESSAGE_CID); |
|
238 NS_DEFINE_NAMED_CID(NS_CMSDECODER_CID); |
|
239 NS_DEFINE_NAMED_CID(NS_CMSENCODER_CID); |
|
240 NS_DEFINE_NAMED_CID(NS_CMSMESSAGE_CID); |
|
241 NS_DEFINE_NAMED_CID(NS_CRYPTO_HASH_CID); |
|
242 NS_DEFINE_NAMED_CID(NS_CRYPTO_HMAC_CID); |
|
243 NS_DEFINE_NAMED_CID(NS_CERT_PICKER_CID); |
|
244 NS_DEFINE_NAMED_CID(NS_NTLMAUTHMODULE_CID); |
|
245 NS_DEFINE_NAMED_CID(NS_STREAMCIPHER_CID); |
|
246 NS_DEFINE_NAMED_CID(NS_KEYMODULEOBJECT_CID); |
|
247 NS_DEFINE_NAMED_CID(NS_KEYMODULEOBJECTFACTORY_CID); |
|
248 NS_DEFINE_NAMED_CID(NS_DATASIGNATUREVERIFIER_CID); |
|
249 NS_DEFINE_NAMED_CID(NS_CERTOVERRIDE_CID); |
|
250 NS_DEFINE_NAMED_CID(NS_RANDOMGENERATOR_CID); |
|
251 NS_DEFINE_NAMED_CID(NS_SSLSTATUS_CID); |
|
252 NS_DEFINE_NAMED_CID(TRANSPORTSECURITYINFO_CID); |
|
253 NS_DEFINE_NAMED_CID(NS_NSSERRORSSERVICE_CID); |
|
254 NS_DEFINE_NAMED_CID(NS_NSSVERSION_CID); |
|
255 |
|
256 static const mozilla::Module::CIDEntry kNSSCIDs[] = { |
|
257 { &kNS_NSSCOMPONENT_CID, false, nullptr, nsNSSComponentConstructor }, |
|
258 { &kNS_SSLSOCKETPROVIDER_CID, false, nullptr, nsSSLSocketProviderConstructor }, |
|
259 { &kNS_STARTTLSSOCKETPROVIDER_CID, false, nullptr, nsTLSSocketProviderConstructor }, |
|
260 { &kNS_SDR_CID, false, nullptr, nsSecretDecoderRingConstructor }, |
|
261 { &kNS_PK11TOKENDB_CID, false, nullptr, nsPK11TokenDBConstructor }, |
|
262 { &kNS_PKCS11MODULEDB_CID, false, nullptr, nsPKCS11ModuleDBConstructor }, |
|
263 { &kNS_PSMCONTENTLISTEN_CID, false, nullptr, PSMContentListenerConstructor }, |
|
264 { &kNS_X509CERT_CID, false, nullptr, nsNSSCertificateConstructor }, |
|
265 { &kNS_X509CERTDB_CID, false, nullptr, nsNSSCertificateDBConstructor }, |
|
266 { &kNS_X509CERTLIST_CID, false, nullptr, nsNSSCertListConstructor }, |
|
267 { &kNS_NSSCERTCACHE_CID, false, nullptr, nsNSSCertCacheConstructor }, |
|
268 { &kNS_FORMPROCESSOR_CID, false, nullptr, nsKeygenFormProcessor::Create }, |
|
269 #ifdef MOZ_XUL |
|
270 { &kNS_CERTTREE_CID, false, nullptr, nsCertTreeConstructor }, |
|
271 #endif |
|
272 { &kNS_PKCS11_CID, false, nullptr, nsPkcs11Constructor }, |
|
273 #ifndef MOZ_DISABLE_CRYPTOLEGACY |
|
274 { &kNS_CRYPTO_CID, false, nullptr, nsCryptoConstructor }, |
|
275 #endif |
|
276 { &kNS_CMSSECUREMESSAGE_CID, false, nullptr, nsCMSSecureMessageConstructor }, |
|
277 { &kNS_CMSDECODER_CID, false, nullptr, nsCMSDecoderConstructor }, |
|
278 { &kNS_CMSENCODER_CID, false, nullptr, nsCMSEncoderConstructor }, |
|
279 { &kNS_CMSMESSAGE_CID, false, nullptr, nsCMSMessageConstructor }, |
|
280 { &kNS_CRYPTO_HASH_CID, false, nullptr, nsCryptoHashConstructor }, |
|
281 { &kNS_CRYPTO_HMAC_CID, false, nullptr, nsCryptoHMACConstructor }, |
|
282 { &kNS_CERT_PICKER_CID, false, nullptr, nsCertPickerConstructor }, |
|
283 { &kNS_NTLMAUTHMODULE_CID, false, nullptr, nsNTLMAuthModuleConstructor }, |
|
284 { &kNS_STREAMCIPHER_CID, false, nullptr, nsStreamCipherConstructor }, |
|
285 { &kNS_KEYMODULEOBJECT_CID, false, nullptr, nsKeyObjectConstructor }, |
|
286 { &kNS_KEYMODULEOBJECTFACTORY_CID, false, nullptr, nsKeyObjectFactoryConstructor }, |
|
287 { &kNS_DATASIGNATUREVERIFIER_CID, false, nullptr, nsDataSignatureVerifierConstructor }, |
|
288 { &kNS_CERTOVERRIDE_CID, false, nullptr, nsCertOverrideServiceConstructor }, |
|
289 { &kNS_RANDOMGENERATOR_CID, false, nullptr, nsRandomGeneratorConstructor }, |
|
290 { &kNS_SSLSTATUS_CID, false, nullptr, nsSSLStatusConstructor }, |
|
291 { &kTRANSPORTSECURITYINFO_CID, false, nullptr, TransportSecurityInfoConstructor }, |
|
292 { &kNS_NSSERRORSSERVICE_CID, false, nullptr, NSSErrorsServiceConstructor }, |
|
293 { &kNS_NSSVERSION_CID, false, nullptr, nsNSSVersionConstructor }, |
|
294 { nullptr } |
|
295 }; |
|
296 |
|
297 static const mozilla::Module::ContractIDEntry kNSSContracts[] = { |
|
298 { PSM_COMPONENT_CONTRACTID, &kNS_NSSCOMPONENT_CID }, |
|
299 { NS_NSS_ERRORS_SERVICE_CONTRACTID, &kNS_NSSERRORSSERVICE_CID }, |
|
300 { NS_NSSVERSION_CONTRACTID, &kNS_NSSVERSION_CID }, |
|
301 { NS_SSLSOCKETPROVIDER_CONTRACTID, &kNS_SSLSOCKETPROVIDER_CID }, |
|
302 { NS_STARTTLSSOCKETPROVIDER_CONTRACTID, &kNS_STARTTLSSOCKETPROVIDER_CID }, |
|
303 { NS_SDR_CONTRACTID, &kNS_SDR_CID }, |
|
304 { NS_PK11TOKENDB_CONTRACTID, &kNS_PK11TOKENDB_CID }, |
|
305 { NS_PKCS11MODULEDB_CONTRACTID, &kNS_PKCS11MODULEDB_CID }, |
|
306 { NS_PSMCONTENTLISTEN_CONTRACTID, &kNS_PSMCONTENTLISTEN_CID }, |
|
307 { NS_X509CERTDB_CONTRACTID, &kNS_X509CERTDB_CID }, |
|
308 { NS_X509CERTLIST_CONTRACTID, &kNS_X509CERTLIST_CID }, |
|
309 { NS_NSSCERTCACHE_CONTRACTID, &kNS_NSSCERTCACHE_CID }, |
|
310 { NS_FORMPROCESSOR_CONTRACTID, &kNS_FORMPROCESSOR_CID }, |
|
311 #ifdef MOZ_XUL |
|
312 { NS_CERTTREE_CONTRACTID, &kNS_CERTTREE_CID }, |
|
313 #endif |
|
314 { NS_PKCS11_CONTRACTID, &kNS_PKCS11_CID }, |
|
315 #ifndef MOZ_DISABLE_CRYPTOLEGACY |
|
316 { NS_CRYPTO_CONTRACTID, &kNS_CRYPTO_CID }, |
|
317 #endif |
|
318 { NS_CMSSECUREMESSAGE_CONTRACTID, &kNS_CMSSECUREMESSAGE_CID }, |
|
319 { NS_CMSDECODER_CONTRACTID, &kNS_CMSDECODER_CID }, |
|
320 { NS_CMSENCODER_CONTRACTID, &kNS_CMSENCODER_CID }, |
|
321 { NS_CMSMESSAGE_CONTRACTID, &kNS_CMSMESSAGE_CID }, |
|
322 { NS_CRYPTO_HASH_CONTRACTID, &kNS_CRYPTO_HASH_CID }, |
|
323 { NS_CRYPTO_HMAC_CONTRACTID, &kNS_CRYPTO_HMAC_CID }, |
|
324 { NS_CERT_PICKER_CONTRACTID, &kNS_CERT_PICKER_CID }, |
|
325 { "@mozilla.org/uriloader/psm-external-content-listener;1", &kNS_PSMCONTENTLISTEN_CID }, |
|
326 { NS_CRYPTO_FIPSINFO_SERVICE_CONTRACTID, &kNS_PKCS11MODULEDB_CID }, |
|
327 { NS_NTLMAUTHMODULE_CONTRACTID, &kNS_NTLMAUTHMODULE_CID }, |
|
328 { NS_STREAMCIPHER_CONTRACTID, &kNS_STREAMCIPHER_CID }, |
|
329 { NS_KEYMODULEOBJECT_CONTRACTID, &kNS_KEYMODULEOBJECT_CID }, |
|
330 { NS_KEYMODULEOBJECTFACTORY_CONTRACTID, &kNS_KEYMODULEOBJECTFACTORY_CID }, |
|
331 { NS_DATASIGNATUREVERIFIER_CONTRACTID, &kNS_DATASIGNATUREVERIFIER_CID }, |
|
332 { NS_CERTOVERRIDE_CONTRACTID, &kNS_CERTOVERRIDE_CID }, |
|
333 { NS_RANDOMGENERATOR_CONTRACTID, &kNS_RANDOMGENERATOR_CID }, |
|
334 { nullptr } |
|
335 }; |
|
336 |
|
337 static const mozilla::Module::CategoryEntry kNSSCategories[] = { |
|
338 { NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY, "application/x-x509-ca-cert", "@mozilla.org/uriloader/psm-external-content-listener;1" }, |
|
339 { NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY, "application/x-x509-server-cert", "@mozilla.org/uriloader/psm-external-content-listener;1" }, |
|
340 { NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY, "application/x-x509-user-cert", "@mozilla.org/uriloader/psm-external-content-listener;1" }, |
|
341 { NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY, "application/x-x509-email-cert", "@mozilla.org/uriloader/psm-external-content-listener;1" }, |
|
342 { nullptr } |
|
343 }; |
|
344 |
|
345 static const mozilla::Module kNSSModule = { |
|
346 mozilla::Module::kVersion, |
|
347 kNSSCIDs, |
|
348 kNSSContracts, |
|
349 kNSSCategories |
|
350 }; |
|
351 |
|
352 } // unnamed namespace |
|
353 |
|
354 NSMODULE_DEFN(NSS) = &kNSSModule; |