Index: chrome/browser/certificate_manager_model.cc |
diff --git a/chrome/browser/certificate_manager_model.cc b/chrome/browser/certificate_manager_model.cc |
index e932883638c538e2f7b5fbd667894bb568b770e5..fb3422401b34c80075e049771192128eef1ca885 100644 |
--- a/chrome/browser/certificate_manager_model.cc |
+++ b/chrome/browser/certificate_manager_model.cc |
@@ -8,10 +8,12 @@ |
#include "base/i18n/time_formatting.h" |
#include "base/logging.h" |
#include "base/strings/utf_string_conversions.h" |
-#include "chrome/browser/net/nss_context.h" |
+#include "chrome/browser/net/cert_database_service_factory.h" |
#include "chrome/browser/ui/crypto_module_password_dialog_nss.h" |
#include "chrome/common/net/x509_certificate_model.h" |
#include "chrome/grit/generated_resources.h" |
+#include "components/cert_database/cert_database_service.h" |
+#include "components/cert_database/cert_database_service_io_part.h" |
#include "content/public/browser/browser_context.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/resource_context.h" |
@@ -32,10 +34,12 @@ using content::BrowserThread; |
// UI thread IO Thread |
// |
// CertificateManagerModel::Create |
+// | |
+// CertDatabaseService::GetIOPart |
// \--------------------------------------v |
// CertificateManagerModel::GetCertDBOnIOThread |
// | |
-// GetNSSCertDatabaseForResourceContext |
+// CertDatabaseServiceIOPart::GetNSSCertDatabase |
// | |
// CertificateManagerModel::DidGetCertDBOnIOThread |
// | |
@@ -53,11 +57,17 @@ void CertificateManagerModel::Create( |
CertificateManagerModel::Observer* observer, |
const CreationCallback& callback) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ cert_database::CertDatabaseService* cert_db_service = |
+ cert_database::CertDatabaseServiceFactory::GetForBrowserContext( |
+ browser_context); |
+ base::WeakPtr<cert_database::CertDatabaseServiceIOPart> cert_db_service_io; |
+ if (cert_db_service) |
+ cert_db_service_io = cert_db_service->GetIOPart(); |
BrowserThread::PostTask( |
BrowserThread::IO, |
FROM_HERE, |
base::Bind(&CertificateManagerModel::GetCertDBOnIOThread, |
- browser_context->GetResourceContext(), |
+ cert_db_service_io, |
observer, |
callback)); |
} |
@@ -227,7 +237,7 @@ void CertificateManagerModel::DidGetCertDBOnIOThread( |
net::NSSCertDatabase* cert_db) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- bool is_user_db_available = cert_db->GetPublicSlot(); |
+ bool is_user_db_available = cert_db && cert_db->GetPublicSlot(); |
bool is_tpm_available = false; |
#if defined(OS_CHROMEOS) |
is_tpm_available = crypto::IsTPMTokenEnabledForNSS(); |
@@ -245,15 +255,20 @@ void CertificateManagerModel::DidGetCertDBOnIOThread( |
// static |
void CertificateManagerModel::GetCertDBOnIOThread( |
- content::ResourceContext* context, |
+ base::WeakPtr<cert_database::CertDatabaseServiceIOPart> cert_db_service_io, |
CertificateManagerModel::Observer* observer, |
const CreationCallback& callback) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- net::NSSCertDatabase* cert_db = GetNSSCertDatabaseForResourceContext( |
- context, |
- base::Bind(&CertificateManagerModel::DidGetCertDBOnIOThread, |
- observer, |
- callback)); |
- if (cert_db) |
- DidGetCertDBOnIOThread(observer, callback, cert_db); |
+ base::Callback<void(net::NSSCertDatabase*)> get_db_callback = base::Bind( |
+ &CertificateManagerModel::DidGetCertDBOnIOThread, observer, callback); |
+ if (cert_db_service_io) { |
+ net::NSSCertDatabase* cert_db = |
+ cert_db_service_io->GetNSSCertDatabase(get_db_callback); |
+ if (cert_db) |
+ get_db_callback.Run(cert_db); |
+ } else { |
+ // Either the process in shutting down or the database was not available at |
+ // all. Continue, without cert database. |
+ get_db_callback.Run(nullptr); |
+ } |
} |