Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/security/manager/ssl/nsNSSModule.cpp
Line
Count
Source (jump to first uncovered line)
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 "CertBlocklist.h"
8
#include "ContentSignatureVerifier.h"
9
#include "NSSErrorsService.h"
10
#include "PKCS11ModuleDB.h"
11
#include "PSMContentListener.h"
12
#include "SecretDecoderRing.h"
13
#include "TransportSecurityInfo.h"
14
#include "mozilla/ModuleUtils.h"
15
#include "mozilla/SyncRunnable.h"
16
#include "nsCURILoader.h"
17
#include "nsCertOverrideService.h"
18
#include "nsCryptoHash.h"
19
#include "nsICategoryManager.h"
20
#include "nsKeyModule.h"
21
#include "nsKeygenHandler.h"
22
#include "nsNSSCertificate.h"
23
#include "nsNSSCertificateDB.h"
24
#include "nsNSSComponent.h"
25
#include "nsNSSVersion.h"
26
#include "nsNTLMAuthModule.h"
27
#include "nsNetCID.h"
28
#include "nsPK11TokenDB.h"
29
#include "nsPKCS11Slot.h"
30
#include "nsRandomGenerator.h"
31
#include "nsSSLSocketProvider.h"
32
#include "nsSecureBrowserUIImpl.h"
33
#include "nsSiteSecurityService.h"
34
#include "nsTLSSocketProvider.h"
35
#include "nsXULAppAPI.h"
36
#include "OSKeyStore.h"
37
38
#ifdef MOZ_XUL
39
#include "nsCertTree.h"
40
#endif
41
42
namespace mozilla { namespace psm {
43
44
// Many of the implementations in this module call NSS functions and as a result
45
// require that PSM has successfully initialized NSS before being used.
46
// Additionally, some of the implementations have various restrictions on which
47
// process and threads they can be used on (e.g. some can only be used in the
48
// parent process and some must be initialized only on the main thread).
49
// The following initialization framework allows these requirements to be
50
// succinctly expressed and implemented.
51
52
template<class InstanceClass, nsresult (InstanceClass::*InitMethod)()>
53
MOZ_ALWAYS_INLINE static nsresult
54
Instantiate(REFNSIID aIID, void** aResult)
55
0
{
56
0
  InstanceClass* inst = new InstanceClass();
57
0
  NS_ADDREF(inst);
58
0
  nsresult rv = InitMethod != nullptr ? (inst->*InitMethod)() : NS_OK;
59
0
  if (NS_SUCCEEDED(rv)) {
60
0
    rv = inst->QueryInterface(aIID, aResult);
61
0
  }
62
0
  NS_RELEASE(inst);
63
0
  return rv;
64
0
}
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<nsSSLSocketProvider, (nsresult (nsSSLSocketProvider::*)())0>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<nsTLSSocketProvider, (nsresult (nsTLSSocketProvider::*)())0>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<SecretDecoderRing, (nsresult (SecretDecoderRing::*)())0>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<nsPK11TokenDB, (nsresult (nsPK11TokenDB::*)())0>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<mozilla::psm::PKCS11ModuleDB, (nsresult (mozilla::psm::PKCS11ModuleDB::*)())0>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<nsNSSCertificate, (nsresult (nsNSSCertificate::*)())0>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<nsNSSCertificateDB, (nsresult (nsNSSCertificateDB::*)())0>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<nsNSSCertList, (nsresult (nsNSSCertList::*)())0>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<nsCertTree, (nsresult (nsCertTree::*)())0>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<nsCryptoHash, (nsresult (nsCryptoHash::*)())0>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<nsCryptoHMAC, (nsresult (nsCryptoHMAC::*)())0>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<nsNTLMAuthModule, &nsNTLMAuthModule::InitTest>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<nsKeyObject, (nsresult (nsKeyObject::*)())0>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<nsKeyObjectFactory, (nsresult (nsKeyObjectFactory::*)())0>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<ContentSignatureVerifier, (nsresult (ContentSignatureVerifier::*)())0>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<nsCertOverrideService, &nsCertOverrideService::Init>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<nsRandomGenerator, (nsresult (nsRandomGenerator::*)())0>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<mozilla::psm::TransportSecurityInfo, (nsresult (mozilla::psm::TransportSecurityInfo::*)())0>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<nsSiteSecurityService, &nsSiteSecurityService::Init>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<CertBlocklist, &CertBlocklist::Init>(nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Instantiate<OSKeyStore, (nsresult (OSKeyStore::*)())0>(nsID const&, void**)
65
66
enum class ThreadRestriction {
67
  // must be initialized on the main thread (but can be used on any thread)
68
  MainThreadOnly,
69
  // can be initialized and used on any thread
70
  AnyThread,
71
};
72
73
enum class ProcessRestriction {
74
  ParentProcessOnly,
75
  AnyProcess,
76
};
77
78
template<class InstanceClass, nsresult (InstanceClass::*InitMethod)() = nullptr,
79
         ProcessRestriction processRestriction = ProcessRestriction::ParentProcessOnly,
80
         ThreadRestriction threadRestriction = ThreadRestriction::AnyThread>
81
static nsresult
82
Constructor(nsISupports* aOuter, REFNSIID aIID, void** aResult)
83
0
{
84
0
  *aResult = nullptr;
85
0
  if (aOuter != nullptr) {
86
0
    return NS_ERROR_NO_AGGREGATION;
87
0
  }
88
0
89
0
  if (processRestriction == ProcessRestriction::ParentProcessOnly &&
90
0
      !XRE_IsParentProcess()) {
91
0
    return NS_ERROR_NOT_AVAILABLE;
92
0
  }
93
0
94
0
  if (!EnsureNSSInitializedChromeOrContent()) {
95
0
    return NS_ERROR_FAILURE;
96
0
  }
97
0
98
0
  if (threadRestriction == ThreadRestriction::MainThreadOnly &&
99
0
      !NS_IsMainThread()) {
100
0
101
0
    nsCOMPtr<nsIThread> mainThread;
102
0
    nsresult rv = NS_GetMainThread(getter_AddRefs(mainThread));
103
0
    if (NS_FAILED(rv)) {
104
0
      return rv;
105
0
    }
106
0
107
0
    // Forward to the main thread synchronously.
108
0
    mozilla::SyncRunnable::DispatchToThread(
109
0
      mainThread,
110
0
      new SyncRunnable(NS_NewRunnableFunction("psm::Constructor", [&]() {
111
0
        rv = Instantiate<InstanceClass, InitMethod>(aIID, aResult);
112
0
      })));
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<nsCertOverrideService, &nsCertOverrideService::Init, (mozilla::psm::ProcessRestriction)0, (mozilla::psm::ThreadRestriction)0>(nsISupports*, nsID const&, void**)::{lambda()#1}::operator()() const
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<nsSiteSecurityService, &nsSiteSecurityService::Init, (mozilla::psm::ProcessRestriction)1, (mozilla::psm::ThreadRestriction)0>(nsISupports*, nsID const&, void**)::{lambda()#1}::operator()() const
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<CertBlocklist, &CertBlocklist::Init, (mozilla::psm::ProcessRestriction)0, (mozilla::psm::ThreadRestriction)0>(nsISupports*, nsID const&, void**)::{lambda()#1}::operator()() const
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<OSKeyStore, (nsresult (OSKeyStore::*)())0, (mozilla::psm::ProcessRestriction)0, (mozilla::psm::ThreadRestriction)0>(nsISupports*, nsID const&, void**)::{lambda()#1}::operator()() const
113
0
114
0
    return rv;
115
0
  }
116
0
117
0
  return Instantiate<InstanceClass, InitMethod>(aIID, aResult);
118
0
}
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<nsSSLSocketProvider, (nsresult (nsSSLSocketProvider::*)())0, (mozilla::psm::ProcessRestriction)0, (mozilla::psm::ThreadRestriction)1>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<nsTLSSocketProvider, (nsresult (nsTLSSocketProvider::*)())0, (mozilla::psm::ProcessRestriction)0, (mozilla::psm::ThreadRestriction)1>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<SecretDecoderRing, (nsresult (SecretDecoderRing::*)())0, (mozilla::psm::ProcessRestriction)0, (mozilla::psm::ThreadRestriction)1>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<nsPK11TokenDB, (nsresult (nsPK11TokenDB::*)())0, (mozilla::psm::ProcessRestriction)0, (mozilla::psm::ThreadRestriction)1>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<mozilla::psm::PKCS11ModuleDB, (nsresult (mozilla::psm::PKCS11ModuleDB::*)())0, (mozilla::psm::ProcessRestriction)0, (mozilla::psm::ThreadRestriction)1>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<nsNSSCertificate, (nsresult (nsNSSCertificate::*)())0, (mozilla::psm::ProcessRestriction)1, (mozilla::psm::ThreadRestriction)1>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<nsNSSCertificateDB, (nsresult (nsNSSCertificateDB::*)())0, (mozilla::psm::ProcessRestriction)0, (mozilla::psm::ThreadRestriction)1>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<nsNSSCertList, (nsresult (nsNSSCertList::*)())0, (mozilla::psm::ProcessRestriction)1, (mozilla::psm::ThreadRestriction)1>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<nsCertTree, (nsresult (nsCertTree::*)())0, (mozilla::psm::ProcessRestriction)0, (mozilla::psm::ThreadRestriction)1>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<nsCryptoHash, (nsresult (nsCryptoHash::*)())0, (mozilla::psm::ProcessRestriction)1, (mozilla::psm::ThreadRestriction)1>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<nsCryptoHMAC, (nsresult (nsCryptoHMAC::*)())0, (mozilla::psm::ProcessRestriction)1, (mozilla::psm::ThreadRestriction)1>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<nsNTLMAuthModule, &nsNTLMAuthModule::InitTest, (mozilla::psm::ProcessRestriction)0, (mozilla::psm::ThreadRestriction)1>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<nsKeyObject, (nsresult (nsKeyObject::*)())0, (mozilla::psm::ProcessRestriction)1, (mozilla::psm::ThreadRestriction)1>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<nsKeyObjectFactory, (nsresult (nsKeyObjectFactory::*)())0, (mozilla::psm::ProcessRestriction)1, (mozilla::psm::ThreadRestriction)1>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<ContentSignatureVerifier, (nsresult (ContentSignatureVerifier::*)())0, (mozilla::psm::ProcessRestriction)0, (mozilla::psm::ThreadRestriction)1>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<nsCertOverrideService, &nsCertOverrideService::Init, (mozilla::psm::ProcessRestriction)0, (mozilla::psm::ThreadRestriction)0>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<nsRandomGenerator, (nsresult (nsRandomGenerator::*)())0, (mozilla::psm::ProcessRestriction)1, (mozilla::psm::ThreadRestriction)1>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<mozilla::psm::TransportSecurityInfo, (nsresult (mozilla::psm::TransportSecurityInfo::*)())0, (mozilla::psm::ProcessRestriction)1, (mozilla::psm::ThreadRestriction)1>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<nsSiteSecurityService, &nsSiteSecurityService::Init, (mozilla::psm::ProcessRestriction)1, (mozilla::psm::ThreadRestriction)0>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<CertBlocklist, &CertBlocklist::Init, (mozilla::psm::ProcessRestriction)0, (mozilla::psm::ThreadRestriction)0>(nsISupports*, nsID const&, void**)
Unexecuted instantiation: Unified_cpp_security_manager_ssl2.cpp:nsresult mozilla::psm::Constructor<OSKeyStore, (nsresult (OSKeyStore::*)())0, (mozilla::psm::ProcessRestriction)0, (mozilla::psm::ThreadRestriction)0>(nsISupports*, nsID const&, void**)
119
120
} } // namespace mozilla::psm
121
122
using namespace mozilla::psm;
123
124
namespace {
125
126
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(PSMContentListener, init)
127
128
typedef mozilla::psm::NSSErrorsService NSSErrorsService;
129
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(NSSErrorsService, Init)
130
NS_GENERIC_FACTORY_CONSTRUCTOR(nsNSSVersion)
131
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSecureBrowserUIImpl)
132
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsNSSComponent, Init)
133
134
NS_DEFINE_NAMED_CID(NS_NSSCOMPONENT_CID);
135
NS_DEFINE_NAMED_CID(NS_SSLSOCKETPROVIDER_CID);
136
NS_DEFINE_NAMED_CID(NS_STARTTLSSOCKETPROVIDER_CID);
137
NS_DEFINE_NAMED_CID(NS_SECRETDECODERRING_CID);
138
NS_DEFINE_NAMED_CID(NS_PK11TOKENDB_CID);
139
NS_DEFINE_NAMED_CID(NS_PKCS11MODULEDB_CID);
140
NS_DEFINE_NAMED_CID(NS_PSMCONTENTLISTEN_CID);
141
NS_DEFINE_NAMED_CID(NS_X509CERT_CID);
142
NS_DEFINE_NAMED_CID(NS_X509CERTDB_CID);
143
NS_DEFINE_NAMED_CID(NS_X509CERTLIST_CID);
144
NS_DEFINE_NAMED_CID(NS_FORMPROCESSOR_CID);
145
#ifdef MOZ_XUL
146
NS_DEFINE_NAMED_CID(NS_CERTTREE_CID);
147
#endif
148
NS_DEFINE_NAMED_CID(NS_CRYPTO_HASH_CID);
149
NS_DEFINE_NAMED_CID(NS_CRYPTO_HMAC_CID);
150
NS_DEFINE_NAMED_CID(NS_NTLMAUTHMODULE_CID);
151
NS_DEFINE_NAMED_CID(NS_KEYMODULEOBJECT_CID);
152
NS_DEFINE_NAMED_CID(NS_KEYMODULEOBJECTFACTORY_CID);
153
NS_DEFINE_NAMED_CID(NS_CONTENTSIGNATUREVERIFIER_CID);
154
NS_DEFINE_NAMED_CID(NS_CERTOVERRIDE_CID);
155
NS_DEFINE_NAMED_CID(NS_RANDOMGENERATOR_CID);
156
NS_DEFINE_NAMED_CID(TRANSPORTSECURITYINFO_CID);
157
NS_DEFINE_NAMED_CID(NS_NSSERRORSSERVICE_CID);
158
NS_DEFINE_NAMED_CID(NS_NSSVERSION_CID);
159
NS_DEFINE_NAMED_CID(NS_SECURE_BROWSER_UI_CID);
160
NS_DEFINE_NAMED_CID(NS_SITE_SECURITY_SERVICE_CID);
161
NS_DEFINE_NAMED_CID(NS_CERT_BLOCKLIST_CID);
162
NS_DEFINE_NAMED_CID(NS_OSKEYSTORE_CID);
163
164
// Components that require main thread initialization could cause a deadlock
165
// in necko code (bug 1418752). To prevent it we initialize all such components
166
// on main thread in advance in net_EnsurePSMInit(). Update that function when
167
// new component with ThreadRestriction::MainThreadOnly is added.
168
static const mozilla::Module::CIDEntry kNSSCIDs[] = {
169
  { &kNS_NSSCOMPONENT_CID, false, nullptr, nsNSSComponentConstructor },
170
  { &kNS_SSLSOCKETPROVIDER_CID, false, nullptr,
171
    Constructor<nsSSLSocketProvider> },
172
  { &kNS_STARTTLSSOCKETPROVIDER_CID, false, nullptr,
173
    Constructor<nsTLSSocketProvider> },
174
  { &kNS_SECRETDECODERRING_CID, false, nullptr,
175
    Constructor<SecretDecoderRing> },
176
  { &kNS_PK11TOKENDB_CID, false, nullptr, Constructor<nsPK11TokenDB> },
177
  { &kNS_PKCS11MODULEDB_CID, false, nullptr, Constructor<PKCS11ModuleDB> },
178
  { &kNS_PSMCONTENTLISTEN_CID, false, nullptr, PSMContentListenerConstructor },
179
  { &kNS_X509CERT_CID, false, nullptr,
180
    Constructor<nsNSSCertificate, nullptr, ProcessRestriction::AnyProcess> },
181
  { &kNS_X509CERTDB_CID, false, nullptr, Constructor<nsNSSCertificateDB> },
182
  { &kNS_X509CERTLIST_CID, false, nullptr,
183
    Constructor<nsNSSCertList, nullptr, ProcessRestriction::AnyProcess> },
184
  { &kNS_FORMPROCESSOR_CID, false, nullptr, nsKeygenFormProcessor::Create },
185
#ifdef MOZ_XUL
186
  { &kNS_CERTTREE_CID, false, nullptr, Constructor<nsCertTree> },
187
#endif
188
  { &kNS_CRYPTO_HASH_CID, false, nullptr,
189
    Constructor<nsCryptoHash, nullptr, ProcessRestriction::AnyProcess> },
190
  { &kNS_CRYPTO_HMAC_CID, false, nullptr,
191
    Constructor<nsCryptoHMAC, nullptr, ProcessRestriction::AnyProcess> },
192
  { &kNS_NTLMAUTHMODULE_CID, false, nullptr,
193
    Constructor<nsNTLMAuthModule, &nsNTLMAuthModule::InitTest> },
194
  { &kNS_KEYMODULEOBJECT_CID, false, nullptr,
195
    Constructor<nsKeyObject, nullptr, ProcessRestriction::AnyProcess> },
196
  { &kNS_KEYMODULEOBJECTFACTORY_CID, false, nullptr,
197
    Constructor<nsKeyObjectFactory, nullptr, ProcessRestriction::AnyProcess> },
198
  { &kNS_CONTENTSIGNATUREVERIFIER_CID, false, nullptr,
199
    Constructor<ContentSignatureVerifier> },
200
  { &kNS_CERTOVERRIDE_CID, false, nullptr,
201
    Constructor<nsCertOverrideService, &nsCertOverrideService::Init,
202
                ProcessRestriction::ParentProcessOnly,
203
                ThreadRestriction::MainThreadOnly> },
204
  { &kNS_RANDOMGENERATOR_CID, false, nullptr,
205
    Constructor<nsRandomGenerator, nullptr, ProcessRestriction::AnyProcess> },
206
  { &kTRANSPORTSECURITYINFO_CID, false, nullptr,
207
    Constructor<TransportSecurityInfo, nullptr,
208
                ProcessRestriction::AnyProcess> },
209
  { &kNS_NSSERRORSSERVICE_CID, false, nullptr, NSSErrorsServiceConstructor },
210
  { &kNS_NSSVERSION_CID, false, nullptr, nsNSSVersionConstructor },
211
  { &kNS_SECURE_BROWSER_UI_CID, false, nullptr, nsSecureBrowserUIImplConstructor },
212
  { &kNS_SITE_SECURITY_SERVICE_CID, false, nullptr,
213
    Constructor<nsSiteSecurityService, &nsSiteSecurityService::Init,
214
                ProcessRestriction::AnyProcess,
215
                ThreadRestriction::MainThreadOnly> },
216
  { &kNS_CERT_BLOCKLIST_CID, false, nullptr,
217
    Constructor<CertBlocklist, &CertBlocklist::Init,
218
                ProcessRestriction::ParentProcessOnly,
219
                ThreadRestriction::MainThreadOnly> },
220
  { &kNS_OSKEYSTORE_CID, false, nullptr, Constructor<OSKeyStore,
221
                nullptr,
222
                ProcessRestriction::ParentProcessOnly,
223
                ThreadRestriction::MainThreadOnly> },
224
  { nullptr }
225
};
226
227
static const mozilla::Module::ContractIDEntry kNSSContracts[] = {
228
  { PSM_COMPONENT_CONTRACTID, &kNS_NSSCOMPONENT_CID },
229
  { NS_NSS_ERRORS_SERVICE_CONTRACTID, &kNS_NSSERRORSSERVICE_CID },
230
  { NS_NSSVERSION_CONTRACTID, &kNS_NSSVERSION_CID },
231
  { NS_SSLSOCKETPROVIDER_CONTRACTID, &kNS_SSLSOCKETPROVIDER_CID },
232
  { NS_STARTTLSSOCKETPROVIDER_CONTRACTID, &kNS_STARTTLSSOCKETPROVIDER_CID },
233
  { NS_SECRETDECODERRING_CONTRACTID, &kNS_SECRETDECODERRING_CID },
234
  { NS_PK11TOKENDB_CONTRACTID, &kNS_PK11TOKENDB_CID },
235
  { NS_PKCS11MODULEDB_CONTRACTID, &kNS_PKCS11MODULEDB_CID },
236
  { NS_PSMCONTENTLISTEN_CONTRACTID, &kNS_PSMCONTENTLISTEN_CID },
237
  { NS_X509CERTDB_CONTRACTID, &kNS_X509CERTDB_CID },
238
  { NS_X509CERTLIST_CONTRACTID, &kNS_X509CERTLIST_CID },
239
  { NS_FORMPROCESSOR_CONTRACTID, &kNS_FORMPROCESSOR_CID },
240
#ifdef MOZ_XUL
241
  { NS_CERTTREE_CONTRACTID, &kNS_CERTTREE_CID },
242
#endif
243
  { NS_CRYPTO_HASH_CONTRACTID, &kNS_CRYPTO_HASH_CID },
244
  { NS_CRYPTO_HMAC_CONTRACTID, &kNS_CRYPTO_HMAC_CID },
245
  { "@mozilla.org/uriloader/psm-external-content-listener;1", &kNS_PSMCONTENTLISTEN_CID },
246
  { NS_NTLMAUTHMODULE_CONTRACTID, &kNS_NTLMAUTHMODULE_CID },
247
  { NS_KEYMODULEOBJECT_CONTRACTID, &kNS_KEYMODULEOBJECT_CID },
248
  { NS_KEYMODULEOBJECTFACTORY_CONTRACTID, &kNS_KEYMODULEOBJECTFACTORY_CID },
249
  { NS_CONTENTSIGNATUREVERIFIER_CONTRACTID, &kNS_CONTENTSIGNATUREVERIFIER_CID },
250
  { NS_CERTOVERRIDE_CONTRACTID, &kNS_CERTOVERRIDE_CID },
251
  { NS_RANDOMGENERATOR_CONTRACTID, &kNS_RANDOMGENERATOR_CID },
252
  { NS_SECURE_BROWSER_UI_CONTRACTID, &kNS_SECURE_BROWSER_UI_CID },
253
  { NS_SSSERVICE_CONTRACTID, &kNS_SITE_SECURITY_SERVICE_CID },
254
  { NS_CERTBLOCKLIST_CONTRACTID, &kNS_CERT_BLOCKLIST_CID },
255
  { NS_OSKEYSTORE_CONTRACTID, &kNS_OSKEYSTORE_CID},
256
  { nullptr }
257
};
258
259
static const mozilla::Module::CategoryEntry kNSSCategories[] = {
260
  { NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY, "application/x-x509-ca-cert", "@mozilla.org/uriloader/psm-external-content-listener;1" },
261
  { NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY, "application/x-x509-server-cert", "@mozilla.org/uriloader/psm-external-content-listener;1" },
262
  { NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY, "application/x-x509-user-cert", "@mozilla.org/uriloader/psm-external-content-listener;1" },
263
  { NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY, "application/x-x509-email-cert", "@mozilla.org/uriloader/psm-external-content-listener;1" },
264
  { nullptr }
265
};
266
267
static const mozilla::Module kNSSModule = {
268
  mozilla::Module::kVersion,
269
  kNSSCIDs,
270
  kNSSContracts,
271
  kNSSCategories
272
};
273
274
} // unnamed namespace
275
276
NSMODULE_DEFN(NSS) = &kNSSModule;