| 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); | 
| +  } | 
| } | 
|  |