Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3771)

Unified Diff: chrome/browser/certificate_manager_model.cc

Issue 18121007: *WIP* Store NSS slots per profile. Move keygen to chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more refactoring Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/certificate_manager_model.h ('k') | chrome/browser/net/nss_context.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_);
« no previous file with comments | « chrome/browser/certificate_manager_model.h ('k') | chrome/browser/net/nss_context.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698