1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/security/manager/ssl/src/nsNSSModule.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,354 @@ 1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- 1.5 + * 1.6 + * This Source Code Form is subject to the terms of the Mozilla Public 1.7 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.8 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.9 + 1.10 +#include "mozilla/ModuleUtils.h" 1.11 + 1.12 +#include "nsNSSComponent.h" 1.13 +#include "nsSSLSocketProvider.h" 1.14 +#include "nsTLSSocketProvider.h" 1.15 +#include "nsKeygenHandler.h" 1.16 + 1.17 +#include "nsSDR.h" 1.18 + 1.19 +#include "nsPK11TokenDB.h" 1.20 +#include "nsPKCS11Slot.h" 1.21 +#include "nsNSSCertificate.h" 1.22 +#include "nsNSSCertificateFakeTransport.h" 1.23 +#include "nsNSSCertificateDB.h" 1.24 +#include "nsNSSCertCache.h" 1.25 +#include "nsCMS.h" 1.26 +#ifdef MOZ_XUL 1.27 +#include "nsCertTree.h" 1.28 +#endif 1.29 +#include "nsCrypto.h" 1.30 +#include "nsCryptoHash.h" 1.31 +//For the NS_CRYPTO_CONTRACTID define 1.32 +#include "nsDOMCID.h" 1.33 +#include "nsNetCID.h" 1.34 +#include "nsCMSSecureMessage.h" 1.35 +#include "nsCertPicker.h" 1.36 +#include "nsCURILoader.h" 1.37 +#include "nsICategoryManager.h" 1.38 +#include "nsNTLMAuthModule.h" 1.39 +#include "nsStreamCipher.h" 1.40 +#include "nsKeyModule.h" 1.41 +#include "nsDataSignatureVerifier.h" 1.42 +#include "nsCertOverrideService.h" 1.43 +#include "nsRandomGenerator.h" 1.44 +#include "nsSSLStatus.h" 1.45 +#include "TransportSecurityInfo.h" 1.46 +#include "NSSErrorsService.h" 1.47 +#include "nsNSSVersion.h" 1.48 + 1.49 +#include "nsXULAppAPI.h" 1.50 + 1.51 +#include "PSMContentListener.h" 1.52 + 1.53 +#define NS_IS_PROCESS_DEFAULT \ 1.54 + (GeckoProcessType_Default == XRE_GetProcessType()) 1.55 + 1.56 +#define NS_NSS_INSTANTIATE(ensureOperator, _InstanceClass) \ 1.57 + PR_BEGIN_MACRO \ 1.58 + _InstanceClass * inst; \ 1.59 + inst = new _InstanceClass(); \ 1.60 + NS_ADDREF(inst); \ 1.61 + rv = inst->QueryInterface(aIID, aResult); \ 1.62 + NS_RELEASE(inst); \ 1.63 + PR_END_MACRO 1.64 + 1.65 +#define NS_NSS_INSTANTIATE_INIT(ensureOperator, _InstanceClass, _InitMethod) \ 1.66 + PR_BEGIN_MACRO \ 1.67 + _InstanceClass * inst; \ 1.68 + inst = new _InstanceClass(); \ 1.69 + NS_ADDREF(inst); \ 1.70 + rv = inst->_InitMethod(); \ 1.71 + if(NS_SUCCEEDED(rv)) { \ 1.72 + rv = inst->QueryInterface(aIID, aResult); \ 1.73 + } \ 1.74 + NS_RELEASE(inst); \ 1.75 + PR_END_MACRO 1.76 + 1.77 + 1.78 +#define NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(ensureOperator, \ 1.79 + _InstanceClass) \ 1.80 + NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_BYPROCESS(ensureOperator, \ 1.81 + _InstanceClass, \ 1.82 + _InstanceClass) 1.83 + 1.84 +// These two macros are ripped off from nsIGenericFactory.h and slightly 1.85 +// modified. 1.86 +#define NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_BYPROCESS(ensureOperator, \ 1.87 + _InstanceClassChrome, \ 1.88 + _InstanceClassContent) \ 1.89 +static nsresult \ 1.90 +_InstanceClassChrome##Constructor(nsISupports *aOuter, REFNSIID aIID, \ 1.91 + void **aResult) \ 1.92 +{ \ 1.93 + nsresult rv; \ 1.94 + \ 1.95 + *aResult = nullptr; \ 1.96 + if (nullptr != aOuter) { \ 1.97 + rv = NS_ERROR_NO_AGGREGATION; \ 1.98 + return rv; \ 1.99 + } \ 1.100 + \ 1.101 + if (!EnsureNSSInitialized(ensureOperator)) \ 1.102 + return NS_ERROR_FAILURE; \ 1.103 + \ 1.104 + if (NS_IS_PROCESS_DEFAULT) \ 1.105 + NS_NSS_INSTANTIATE(ensureOperator, _InstanceClassChrome); \ 1.106 + else \ 1.107 + NS_NSS_INSTANTIATE(ensureOperator, _InstanceClassContent); \ 1.108 + \ 1.109 + if (ensureOperator == nssLoadingComponent) \ 1.110 + { \ 1.111 + if (NS_SUCCEEDED(rv)) \ 1.112 + EnsureNSSInitialized(nssInitSucceeded); \ 1.113 + else \ 1.114 + EnsureNSSInitialized(nssInitFailed); \ 1.115 + } \ 1.116 + \ 1.117 + return rv; \ 1.118 +} 1.119 + 1.120 + 1.121 +#define NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_INIT(ensureOperator, \ 1.122 + _InstanceClass, \ 1.123 + _InitMethod) \ 1.124 + NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_INIT_BYPROCESS(ensureOperator, \ 1.125 + _InstanceClass, \ 1.126 + _InstanceClass, \ 1.127 + _InitMethod) 1.128 + 1.129 +#define NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_INIT_BYPROCESS(ensureOperator, \ 1.130 + _InstanceClassChrome, \ 1.131 + _InstanceClassContent, \ 1.132 + _InitMethod) \ 1.133 +static nsresult \ 1.134 +_InstanceClassChrome##Constructor(nsISupports *aOuter, REFNSIID aIID, \ 1.135 + void **aResult) \ 1.136 +{ \ 1.137 + nsresult rv; \ 1.138 + \ 1.139 + *aResult = nullptr; \ 1.140 + if (nullptr != aOuter) { \ 1.141 + rv = NS_ERROR_NO_AGGREGATION; \ 1.142 + return rv; \ 1.143 + } \ 1.144 + \ 1.145 + if (!EnsureNSSInitialized(ensureOperator)) \ 1.146 + return NS_ERROR_FAILURE; \ 1.147 + \ 1.148 + if (NS_IS_PROCESS_DEFAULT) \ 1.149 + NS_NSS_INSTANTIATE_INIT(ensureOperator, \ 1.150 + _InstanceClassChrome, \ 1.151 + _InitMethod); \ 1.152 + else \ 1.153 + NS_NSS_INSTANTIATE_INIT(ensureOperator, \ 1.154 + _InstanceClassContent, \ 1.155 + _InitMethod); \ 1.156 + \ 1.157 + if (ensureOperator == nssLoadingComponent) \ 1.158 + { \ 1.159 + if (NS_SUCCEEDED(rv)) \ 1.160 + EnsureNSSInitialized(nssInitSucceeded); \ 1.161 + else \ 1.162 + EnsureNSSInitialized(nssInitFailed); \ 1.163 + } \ 1.164 + \ 1.165 + return rv; \ 1.166 +} 1.167 + 1.168 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nssLoadingComponent, nsNSSComponent, 1.169 + Init) 1.170 + 1.171 +using namespace mozilla::psm; 1.172 + 1.173 +namespace { 1.174 + 1.175 +// Use the special factory constructor for everything this module implements, 1.176 +// because all code could potentially require the NSS library. 1.177 +// Our factory constructor takes an additional boolean parameter. 1.178 +// Only for the nsNSSComponent, set this to true. 1.179 +// All other classes must have this set to false. 1.180 + 1.181 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsSSLSocketProvider) 1.182 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsTLSSocketProvider) 1.183 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsSecretDecoderRing) 1.184 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsPK11TokenDB) 1.185 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsPKCS11ModuleDB) 1.186 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nssEnsure, PSMContentListener, init) 1.187 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_BYPROCESS(nssEnsureOnChromeOnly, 1.188 + nsNSSCertificate, 1.189 + nsNSSCertificateFakeTransport) 1.190 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsNSSCertificateDB) 1.191 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsNSSCertCache) 1.192 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsNSSCertList) 1.193 +#ifdef MOZ_XUL 1.194 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCertTree) 1.195 +#endif 1.196 +#ifndef MOZ_DISABLE_CRYPTOLEGACY 1.197 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCrypto) 1.198 +#endif 1.199 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsPkcs11) 1.200 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCMSSecureMessage) 1.201 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCMSDecoder) 1.202 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCMSEncoder) 1.203 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCMSMessage) 1.204 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCertPicker) 1.205 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nssEnsure, nsNTLMAuthModule, InitTest) 1.206 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCryptoHash) 1.207 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsCryptoHMAC) 1.208 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsStreamCipher) 1.209 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsKeyObject) 1.210 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsKeyObjectFactory) 1.211 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsDataSignatureVerifier) 1.212 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nssEnsure, nsCertOverrideService, Init) 1.213 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsure, nsRandomGenerator) 1.214 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsureOnChromeOnly, nsSSLStatus) 1.215 +NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(nssEnsureOnChromeOnly, TransportSecurityInfo) 1.216 + 1.217 +typedef mozilla::psm::NSSErrorsService NSSErrorsService; 1.218 +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(NSSErrorsService, Init) 1.219 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsNSSVersion) 1.220 + 1.221 +NS_DEFINE_NAMED_CID(NS_NSSCOMPONENT_CID); 1.222 +NS_DEFINE_NAMED_CID(NS_SSLSOCKETPROVIDER_CID); 1.223 +NS_DEFINE_NAMED_CID(NS_STARTTLSSOCKETPROVIDER_CID); 1.224 +NS_DEFINE_NAMED_CID(NS_SDR_CID); 1.225 +NS_DEFINE_NAMED_CID(NS_PK11TOKENDB_CID); 1.226 +NS_DEFINE_NAMED_CID(NS_PKCS11MODULEDB_CID); 1.227 +NS_DEFINE_NAMED_CID(NS_PSMCONTENTLISTEN_CID); 1.228 +NS_DEFINE_NAMED_CID(NS_X509CERT_CID); 1.229 +NS_DEFINE_NAMED_CID(NS_X509CERTDB_CID); 1.230 +NS_DEFINE_NAMED_CID(NS_X509CERTLIST_CID); 1.231 +NS_DEFINE_NAMED_CID(NS_NSSCERTCACHE_CID); 1.232 +NS_DEFINE_NAMED_CID(NS_FORMPROCESSOR_CID); 1.233 +#ifdef MOZ_XUL 1.234 +NS_DEFINE_NAMED_CID(NS_CERTTREE_CID); 1.235 +#endif 1.236 +NS_DEFINE_NAMED_CID(NS_PKCS11_CID); 1.237 +#ifndef MOZ_DISABLE_CRYPTOLEGACY 1.238 +NS_DEFINE_NAMED_CID(NS_CRYPTO_CID); 1.239 +#endif 1.240 +NS_DEFINE_NAMED_CID(NS_CMSSECUREMESSAGE_CID); 1.241 +NS_DEFINE_NAMED_CID(NS_CMSDECODER_CID); 1.242 +NS_DEFINE_NAMED_CID(NS_CMSENCODER_CID); 1.243 +NS_DEFINE_NAMED_CID(NS_CMSMESSAGE_CID); 1.244 +NS_DEFINE_NAMED_CID(NS_CRYPTO_HASH_CID); 1.245 +NS_DEFINE_NAMED_CID(NS_CRYPTO_HMAC_CID); 1.246 +NS_DEFINE_NAMED_CID(NS_CERT_PICKER_CID); 1.247 +NS_DEFINE_NAMED_CID(NS_NTLMAUTHMODULE_CID); 1.248 +NS_DEFINE_NAMED_CID(NS_STREAMCIPHER_CID); 1.249 +NS_DEFINE_NAMED_CID(NS_KEYMODULEOBJECT_CID); 1.250 +NS_DEFINE_NAMED_CID(NS_KEYMODULEOBJECTFACTORY_CID); 1.251 +NS_DEFINE_NAMED_CID(NS_DATASIGNATUREVERIFIER_CID); 1.252 +NS_DEFINE_NAMED_CID(NS_CERTOVERRIDE_CID); 1.253 +NS_DEFINE_NAMED_CID(NS_RANDOMGENERATOR_CID); 1.254 +NS_DEFINE_NAMED_CID(NS_SSLSTATUS_CID); 1.255 +NS_DEFINE_NAMED_CID(TRANSPORTSECURITYINFO_CID); 1.256 +NS_DEFINE_NAMED_CID(NS_NSSERRORSSERVICE_CID); 1.257 +NS_DEFINE_NAMED_CID(NS_NSSVERSION_CID); 1.258 + 1.259 +static const mozilla::Module::CIDEntry kNSSCIDs[] = { 1.260 + { &kNS_NSSCOMPONENT_CID, false, nullptr, nsNSSComponentConstructor }, 1.261 + { &kNS_SSLSOCKETPROVIDER_CID, false, nullptr, nsSSLSocketProviderConstructor }, 1.262 + { &kNS_STARTTLSSOCKETPROVIDER_CID, false, nullptr, nsTLSSocketProviderConstructor }, 1.263 + { &kNS_SDR_CID, false, nullptr, nsSecretDecoderRingConstructor }, 1.264 + { &kNS_PK11TOKENDB_CID, false, nullptr, nsPK11TokenDBConstructor }, 1.265 + { &kNS_PKCS11MODULEDB_CID, false, nullptr, nsPKCS11ModuleDBConstructor }, 1.266 + { &kNS_PSMCONTENTLISTEN_CID, false, nullptr, PSMContentListenerConstructor }, 1.267 + { &kNS_X509CERT_CID, false, nullptr, nsNSSCertificateConstructor }, 1.268 + { &kNS_X509CERTDB_CID, false, nullptr, nsNSSCertificateDBConstructor }, 1.269 + { &kNS_X509CERTLIST_CID, false, nullptr, nsNSSCertListConstructor }, 1.270 + { &kNS_NSSCERTCACHE_CID, false, nullptr, nsNSSCertCacheConstructor }, 1.271 + { &kNS_FORMPROCESSOR_CID, false, nullptr, nsKeygenFormProcessor::Create }, 1.272 +#ifdef MOZ_XUL 1.273 + { &kNS_CERTTREE_CID, false, nullptr, nsCertTreeConstructor }, 1.274 +#endif 1.275 + { &kNS_PKCS11_CID, false, nullptr, nsPkcs11Constructor }, 1.276 +#ifndef MOZ_DISABLE_CRYPTOLEGACY 1.277 + { &kNS_CRYPTO_CID, false, nullptr, nsCryptoConstructor }, 1.278 +#endif 1.279 + { &kNS_CMSSECUREMESSAGE_CID, false, nullptr, nsCMSSecureMessageConstructor }, 1.280 + { &kNS_CMSDECODER_CID, false, nullptr, nsCMSDecoderConstructor }, 1.281 + { &kNS_CMSENCODER_CID, false, nullptr, nsCMSEncoderConstructor }, 1.282 + { &kNS_CMSMESSAGE_CID, false, nullptr, nsCMSMessageConstructor }, 1.283 + { &kNS_CRYPTO_HASH_CID, false, nullptr, nsCryptoHashConstructor }, 1.284 + { &kNS_CRYPTO_HMAC_CID, false, nullptr, nsCryptoHMACConstructor }, 1.285 + { &kNS_CERT_PICKER_CID, false, nullptr, nsCertPickerConstructor }, 1.286 + { &kNS_NTLMAUTHMODULE_CID, false, nullptr, nsNTLMAuthModuleConstructor }, 1.287 + { &kNS_STREAMCIPHER_CID, false, nullptr, nsStreamCipherConstructor }, 1.288 + { &kNS_KEYMODULEOBJECT_CID, false, nullptr, nsKeyObjectConstructor }, 1.289 + { &kNS_KEYMODULEOBJECTFACTORY_CID, false, nullptr, nsKeyObjectFactoryConstructor }, 1.290 + { &kNS_DATASIGNATUREVERIFIER_CID, false, nullptr, nsDataSignatureVerifierConstructor }, 1.291 + { &kNS_CERTOVERRIDE_CID, false, nullptr, nsCertOverrideServiceConstructor }, 1.292 + { &kNS_RANDOMGENERATOR_CID, false, nullptr, nsRandomGeneratorConstructor }, 1.293 + { &kNS_SSLSTATUS_CID, false, nullptr, nsSSLStatusConstructor }, 1.294 + { &kTRANSPORTSECURITYINFO_CID, false, nullptr, TransportSecurityInfoConstructor }, 1.295 + { &kNS_NSSERRORSSERVICE_CID, false, nullptr, NSSErrorsServiceConstructor }, 1.296 + { &kNS_NSSVERSION_CID, false, nullptr, nsNSSVersionConstructor }, 1.297 + { nullptr } 1.298 +}; 1.299 + 1.300 +static const mozilla::Module::ContractIDEntry kNSSContracts[] = { 1.301 + { PSM_COMPONENT_CONTRACTID, &kNS_NSSCOMPONENT_CID }, 1.302 + { NS_NSS_ERRORS_SERVICE_CONTRACTID, &kNS_NSSERRORSSERVICE_CID }, 1.303 + { NS_NSSVERSION_CONTRACTID, &kNS_NSSVERSION_CID }, 1.304 + { NS_SSLSOCKETPROVIDER_CONTRACTID, &kNS_SSLSOCKETPROVIDER_CID }, 1.305 + { NS_STARTTLSSOCKETPROVIDER_CONTRACTID, &kNS_STARTTLSSOCKETPROVIDER_CID }, 1.306 + { NS_SDR_CONTRACTID, &kNS_SDR_CID }, 1.307 + { NS_PK11TOKENDB_CONTRACTID, &kNS_PK11TOKENDB_CID }, 1.308 + { NS_PKCS11MODULEDB_CONTRACTID, &kNS_PKCS11MODULEDB_CID }, 1.309 + { NS_PSMCONTENTLISTEN_CONTRACTID, &kNS_PSMCONTENTLISTEN_CID }, 1.310 + { NS_X509CERTDB_CONTRACTID, &kNS_X509CERTDB_CID }, 1.311 + { NS_X509CERTLIST_CONTRACTID, &kNS_X509CERTLIST_CID }, 1.312 + { NS_NSSCERTCACHE_CONTRACTID, &kNS_NSSCERTCACHE_CID }, 1.313 + { NS_FORMPROCESSOR_CONTRACTID, &kNS_FORMPROCESSOR_CID }, 1.314 +#ifdef MOZ_XUL 1.315 + { NS_CERTTREE_CONTRACTID, &kNS_CERTTREE_CID }, 1.316 +#endif 1.317 + { NS_PKCS11_CONTRACTID, &kNS_PKCS11_CID }, 1.318 +#ifndef MOZ_DISABLE_CRYPTOLEGACY 1.319 + { NS_CRYPTO_CONTRACTID, &kNS_CRYPTO_CID }, 1.320 +#endif 1.321 + { NS_CMSSECUREMESSAGE_CONTRACTID, &kNS_CMSSECUREMESSAGE_CID }, 1.322 + { NS_CMSDECODER_CONTRACTID, &kNS_CMSDECODER_CID }, 1.323 + { NS_CMSENCODER_CONTRACTID, &kNS_CMSENCODER_CID }, 1.324 + { NS_CMSMESSAGE_CONTRACTID, &kNS_CMSMESSAGE_CID }, 1.325 + { NS_CRYPTO_HASH_CONTRACTID, &kNS_CRYPTO_HASH_CID }, 1.326 + { NS_CRYPTO_HMAC_CONTRACTID, &kNS_CRYPTO_HMAC_CID }, 1.327 + { NS_CERT_PICKER_CONTRACTID, &kNS_CERT_PICKER_CID }, 1.328 + { "@mozilla.org/uriloader/psm-external-content-listener;1", &kNS_PSMCONTENTLISTEN_CID }, 1.329 + { NS_CRYPTO_FIPSINFO_SERVICE_CONTRACTID, &kNS_PKCS11MODULEDB_CID }, 1.330 + { NS_NTLMAUTHMODULE_CONTRACTID, &kNS_NTLMAUTHMODULE_CID }, 1.331 + { NS_STREAMCIPHER_CONTRACTID, &kNS_STREAMCIPHER_CID }, 1.332 + { NS_KEYMODULEOBJECT_CONTRACTID, &kNS_KEYMODULEOBJECT_CID }, 1.333 + { NS_KEYMODULEOBJECTFACTORY_CONTRACTID, &kNS_KEYMODULEOBJECTFACTORY_CID }, 1.334 + { NS_DATASIGNATUREVERIFIER_CONTRACTID, &kNS_DATASIGNATUREVERIFIER_CID }, 1.335 + { NS_CERTOVERRIDE_CONTRACTID, &kNS_CERTOVERRIDE_CID }, 1.336 + { NS_RANDOMGENERATOR_CONTRACTID, &kNS_RANDOMGENERATOR_CID }, 1.337 + { nullptr } 1.338 +}; 1.339 + 1.340 +static const mozilla::Module::CategoryEntry kNSSCategories[] = { 1.341 + { NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY, "application/x-x509-ca-cert", "@mozilla.org/uriloader/psm-external-content-listener;1" }, 1.342 + { NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY, "application/x-x509-server-cert", "@mozilla.org/uriloader/psm-external-content-listener;1" }, 1.343 + { NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY, "application/x-x509-user-cert", "@mozilla.org/uriloader/psm-external-content-listener;1" }, 1.344 + { NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY, "application/x-x509-email-cert", "@mozilla.org/uriloader/psm-external-content-listener;1" }, 1.345 + { nullptr } 1.346 +}; 1.347 + 1.348 +static const mozilla::Module kNSSModule = { 1.349 + mozilla::Module::kVersion, 1.350 + kNSSCIDs, 1.351 + kNSSContracts, 1.352 + kNSSCategories 1.353 +}; 1.354 + 1.355 +} // unnamed namespace 1.356 + 1.357 +NSMODULE_DEFN(NSS) = &kNSSModule;