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