| Index: chrome/browser/net/nss_context_linux.cc
|
| diff --git a/chrome/browser/net/nss_context_linux.cc b/chrome/browser/net/nss_context_linux.cc
|
| index 5aa18e6bb64f8196a01154eef396c0c84d7fe332..d70e689aaaba10a27b365166a0d8f155cd35e616 100644
|
| --- a/chrome/browser/net/nss_context_linux.cc
|
| +++ b/chrome/browser/net/nss_context_linux.cc
|
| @@ -8,6 +8,10 @@
|
| #include "crypto/nss_util_internal.h"
|
| #include "net/cert/nss_cert_database.h"
|
|
|
| +namespace {
|
| +net::NSSCertDatabase* g_nss_cert_database = NULL;
|
| +} // namespace
|
| +
|
| crypto::ScopedPK11Slot GetPublicNSSKeySlotForResourceContext(
|
| content::ResourceContext* context) {
|
| DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
|
| @@ -24,6 +28,12 @@ crypto::ScopedPK11Slot GetPrivateNSSKeySlotForResourceContext(
|
| net::NSSCertDatabase* GetNSSCertDatabaseForResourceContext(
|
| content::ResourceContext* context,
|
| const base::Callback<void(net::NSSCertDatabase*)>& callback) {
|
| - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
|
| - return net::NSSCertDatabase::GetInstance();
|
| + // This initialization is not thread safe. This CHECK ensures that this code
|
| + // is only run on a single thread.
|
| + CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
|
| + if (!g_nss_cert_database) {
|
| + g_nss_cert_database = new net::NSSCertDatabase(
|
| + crypto::ScopedPK11Slot(crypto::GetPersistentNSSKeySlot()));
|
| + }
|
| + return g_nss_cert_database;
|
| }
|
|
|