OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/certificate_manager_model.h" | 5 #include "chrome/browser/certificate_manager_model.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/i18n/time_formatting.h" | 8 #include "base/i18n/time_formatting.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| 11 #include "chrome/browser/net/nss_context.h" |
11 #include "chrome/browser/ui/crypto_module_password_dialog_nss.h" | 12 #include "chrome/browser/ui/crypto_module_password_dialog_nss.h" |
12 #include "chrome/common/net/x509_certificate_model.h" | 13 #include "chrome/common/net/x509_certificate_model.h" |
| 14 #include "content/public/browser/browser_context.h" |
| 15 #include "content/public/browser/browser_thread.h" |
| 16 #include "content/public/browser/resource_context.h" |
13 #include "grit/generated_resources.h" | 17 #include "grit/generated_resources.h" |
14 #include "net/base/crypto_module.h" | 18 #include "net/base/crypto_module.h" |
15 #include "net/base/net_errors.h" | 19 #include "net/base/net_errors.h" |
16 #include "net/cert/x509_certificate.h" | 20 #include "net/cert/x509_certificate.h" |
17 #include "ui/base/l10n/l10n_util.h" | 21 #include "ui/base/l10n/l10n_util.h" |
18 | 22 |
19 CertificateManagerModel::CertificateManagerModel(Observer* observer) | 23 using content::BrowserThread; |
20 : cert_db_(net::NSSCertDatabase::GetInstance()), | 24 |
21 observer_(observer) { | 25 namespace { |
| 26 |
| 27 void DidGetCertDBOnIOThread( |
| 28 const base::Callback<void(net::NSSCertDatabase*)>& callback, |
| 29 net::NSSCertDatabase* cert_db) { |
| 30 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 31 |
| 32 BrowserThread::PostTask( |
| 33 BrowserThread::UI, FROM_HERE, base::Bind(callback, cert_db)); |
| 34 } |
| 35 |
| 36 void GetCertDBOnIOThread( |
| 37 content::ResourceContext* context, |
| 38 const base::Callback<void(net::NSSCertDatabase*)>& callback) { |
| 39 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 40 net::NSSCertDatabase* cert_db = GetNSSCertDatabaseForResourceContext( |
| 41 context, base::Bind(&DidGetCertDBOnIOThread, callback)); |
| 42 if (cert_db) |
| 43 DidGetCertDBOnIOThread(callback, cert_db); |
| 44 } |
| 45 |
| 46 } // namespace |
| 47 |
| 48 CertificateManagerModel::CertificateManagerModel( |
| 49 content::BrowserContext* browser_context, |
| 50 Observer* observer) |
| 51 : observer_(observer), |
| 52 weak_ptr_factory_(this) { |
| 53 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 54 DVLOG(1) << "Getting cert_db for profile..."; |
| 55 BrowserThread::PostTask( |
| 56 BrowserThread::IO, |
| 57 FROM_HERE, |
| 58 base::Bind(&GetCertDBOnIOThread, |
| 59 browser_context->GetResourceContext(), |
| 60 base::Bind(&CertificateManagerModel::DidGetCertDB, |
| 61 weak_ptr_factory_.GetWeakPtr()))); |
22 } | 62 } |
23 | 63 |
24 CertificateManagerModel::~CertificateManagerModel() { | 64 CertificateManagerModel::~CertificateManagerModel() { |
25 } | 65 } |
26 | 66 |
27 void CertificateManagerModel::Refresh() { | 67 void CertificateManagerModel::Refresh() { |
| 68 // TODO(mattm): XXX move the NSS operations stuff onto a worker thread? |
28 DVLOG(1) << "refresh started"; | 69 DVLOG(1) << "refresh started"; |
29 net::CryptoModuleList modules; | 70 net::CryptoModuleList modules; |
30 cert_db_->ListModules(&modules, false); | 71 cert_db_->ListModules(&modules, false); |
31 DVLOG(1) << "refresh waiting for unlocking..."; | 72 DVLOG(1) << "refresh waiting for unlocking..."; |
32 chrome::UnlockSlotsIfNecessary( | 73 chrome::UnlockSlotsIfNecessary( |
33 modules, | 74 modules, |
34 chrome::kCryptoModulePasswordListCerts, | 75 chrome::kCryptoModulePasswordListCerts, |
35 std::string(), // unused. | 76 std::string(), // unused. |
36 NULL, // TODO(mattm): supply parent window. | 77 NULL, // TODO(mattm): supply parent window. |
37 base::Bind(&CertificateManagerModel::RefreshSlotsUnlocked, | 78 base::Bind(&CertificateManagerModel::RefreshSlotsUnlocked, |
38 base::Unretained(this))); | 79 base::Unretained(this))); |
39 } | 80 } |
40 | 81 |
| 82 void CertificateManagerModel::DidGetCertDB(net::NSSCertDatabase* cert_db) { |
| 83 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 84 DCHECK(cert_db); |
| 85 DVLOG(1) << "Got cert_db"; |
| 86 cert_db_ = cert_db; |
| 87 observer_->CertificateManagerModelReady(); |
| 88 } |
| 89 |
41 void CertificateManagerModel::RefreshSlotsUnlocked() { | 90 void CertificateManagerModel::RefreshSlotsUnlocked() { |
42 DVLOG(1) << "refresh listing certs..."; | 91 DVLOG(1) << "refresh listing certs..."; |
43 cert_db_->ListCerts(&cert_list_); | 92 cert_db_->ListCerts(&cert_list_); |
44 observer_->CertificatesRefreshed(); | 93 observer_->CertificatesRefreshed(); |
45 DVLOG(1) << "refresh finished"; | 94 DVLOG(1) << "refresh finished"; |
46 } | 95 } |
47 | 96 |
48 void CertificateManagerModel::FilterAndBuildOrgGroupingMap( | 97 void CertificateManagerModel::FilterAndBuildOrgGroupingMap( |
49 net::CertType filter_type, | 98 net::CertType filter_type, |
50 CertificateManagerModel::OrgGroupingMap* map) const { | 99 CertificateManagerModel::OrgGroupingMap* map) const { |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 bool result = cert_db_->DeleteCertAndKey(cert); | 193 bool result = cert_db_->DeleteCertAndKey(cert); |
145 if (result) | 194 if (result) |
146 Refresh(); | 195 Refresh(); |
147 return result; | 196 return result; |
148 } | 197 } |
149 | 198 |
150 bool CertificateManagerModel::IsHardwareBacked( | 199 bool CertificateManagerModel::IsHardwareBacked( |
151 const net::X509Certificate* cert) const { | 200 const net::X509Certificate* cert) const { |
152 return cert_db_->IsHardwareBacked(cert); | 201 return cert_db_->IsHardwareBacked(cert); |
153 } | 202 } |
OLD | NEW |