| Index: chrome/browser/certificate_manager_model.cc
|
| diff --git a/chrome/browser/certificate_manager_model.cc b/chrome/browser/certificate_manager_model.cc
|
| index 826a29aa65493e0c6754fbf49a215cbae85b4317..3287662cdba094419048c18362fe36d7896bd459 100644
|
| --- a/chrome/browser/certificate_manager_model.cc
|
| +++ b/chrome/browser/certificate_manager_model.cc
|
| @@ -8,23 +8,64 @@
|
| #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/ui/crypto_module_password_dialog_nss.h"
|
| #include "chrome/common/net/x509_certificate_model.h"
|
| +#include "content/public/browser/browser_context.h"
|
| +#include "content/public/browser/browser_thread.h"
|
| +#include "content/public/browser/resource_context.h"
|
| #include "grit/generated_resources.h"
|
| #include "net/base/crypto_module.h"
|
| #include "net/base/net_errors.h"
|
| #include "net/cert/x509_certificate.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
|
|
| -CertificateManagerModel::CertificateManagerModel(Observer* observer)
|
| - : cert_db_(net::NSSCertDatabase::GetInstance()),
|
| - observer_(observer) {
|
| +using content::BrowserThread;
|
| +
|
| +namespace {
|
| +
|
| +void DidGetCertDBOnIOThread(
|
| + const base::Callback<void(net::NSSCertDatabase*)>& callback,
|
| + net::NSSCertDatabase* cert_db) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| +
|
| + BrowserThread::PostTask(
|
| + BrowserThread::UI, FROM_HERE, base::Bind(callback, cert_db));
|
| +}
|
| +
|
| +void GetCertDBOnIOThread(
|
| + content::ResourceContext* context,
|
| + const base::Callback<void(net::NSSCertDatabase*)>& callback) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| + net::NSSCertDatabase* cert_db = GetNSSCertDatabaseForResourceContext(
|
| + context, base::Bind(&DidGetCertDBOnIOThread, callback));
|
| + if (cert_db)
|
| + DidGetCertDBOnIOThread(callback, cert_db);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +CertificateManagerModel::CertificateManagerModel(
|
| + content::BrowserContext* browser_context,
|
| + Observer* observer)
|
| + : observer_(observer),
|
| + weak_ptr_factory_(this) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + DVLOG(1) << "Getting cert_db for profile...";
|
| + BrowserThread::PostTask(
|
| + BrowserThread::IO,
|
| + FROM_HERE,
|
| + base::Bind(&GetCertDBOnIOThread,
|
| + browser_context->GetResourceContext(),
|
| + base::Bind(&CertificateManagerModel::DidGetCertDB,
|
| + weak_ptr_factory_.GetWeakPtr())));
|
| }
|
|
|
| CertificateManagerModel::~CertificateManagerModel() {
|
| }
|
|
|
| void CertificateManagerModel::Refresh() {
|
| + // TODO(mattm): XXX move the NSS operations stuff onto a worker thread?
|
| DVLOG(1) << "refresh started";
|
| net::CryptoModuleList modules;
|
| cert_db_->ListModules(&modules, false);
|
| @@ -38,6 +79,14 @@ void CertificateManagerModel::Refresh() {
|
| base::Unretained(this)));
|
| }
|
|
|
| +void CertificateManagerModel::DidGetCertDB(net::NSSCertDatabase* cert_db) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + DCHECK(cert_db);
|
| + DVLOG(1) << "Got cert_db";
|
| + cert_db_ = cert_db;
|
| + observer_->CertificateManagerModelReady();
|
| +}
|
| +
|
| void CertificateManagerModel::RefreshSlotsUnlocked() {
|
| DVLOG(1) << "refresh listing certs...";
|
| cert_db_->ListCerts(&cert_list_);
|
|
|