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

Side by Side Diff: net/cert/nss_cert_database.cc

Issue 370633003: Break cyclic dependency between CertDatabase and NSSCertDatabase. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Changed comments. Created 6 years, 5 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/cert/nss_cert_database.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "net/cert/nss_cert_database.h" 5 #include "net/cert/nss_cert_database.h"
6 6
7 #include <cert.h> 7 #include <cert.h>
8 #include <certdb.h> 8 #include <certdb.h>
9 #include <keyhi.h> 9 #include <keyhi.h>
10 #include <pk11pub.h> 10 #include <pk11pub.h>
(...skipping 24 matching lines...) Expand all
35 #define CERTDB_TERMINAL_RECORD CERTDB_VALID_PEER 35 #define CERTDB_TERMINAL_RECORD CERTDB_VALID_PEER
36 #endif 36 #endif
37 37
38 // PSM = Mozilla's Personal Security Manager. 38 // PSM = Mozilla's Personal Security Manager.
39 namespace psm = mozilla_security_manager; 39 namespace psm = mozilla_security_manager;
40 40
41 namespace net { 41 namespace net {
42 42
43 namespace { 43 namespace {
44 44
45 // Helper that observes events from the NSSCertDatabase and forwards them to
46 // the given CertDatabase.
47 class CertNotificationForwarder : public NSSCertDatabase::Observer {
48 public:
49 explicit CertNotificationForwarder(CertDatabase* cert_db)
50 : cert_db_(cert_db) {}
51
52 virtual ~CertNotificationForwarder() {}
53
54 // NSSCertDatabase::Observer implementation:
55 virtual void OnCertAdded(const X509Certificate* cert) OVERRIDE {
56 cert_db_->NotifyObserversOfCertAdded(cert);
57 }
58
59 virtual void OnCertRemoved(const X509Certificate* cert) OVERRIDE {
60 cert_db_->NotifyObserversOfCertRemoved(cert);
61 }
62
63 virtual void OnCACertChanged(const X509Certificate* cert) OVERRIDE {
64 cert_db_->NotifyObserversOfCACertChanged(cert);
65 }
66
67 private:
68 CertDatabase* cert_db_;
69
70 DISALLOW_COPY_AND_ASSIGN(CertNotificationForwarder);
71 };
72
45 base::LazyInstance<NSSCertDatabase>::Leaky 73 base::LazyInstance<NSSCertDatabase>::Leaky
46 g_nss_cert_database = LAZY_INSTANCE_INITIALIZER; 74 g_nss_cert_database = LAZY_INSTANCE_INITIALIZER;
47 75
48 } // namespace 76 } // namespace
49 77
50 NSSCertDatabase::ImportCertFailure::ImportCertFailure( 78 NSSCertDatabase::ImportCertFailure::ImportCertFailure(
51 const scoped_refptr<X509Certificate>& cert, 79 const scoped_refptr<X509Certificate>& cert,
52 int err) 80 int err)
53 : certificate(cert), net_error(err) {} 81 : certificate(cert), net_error(err) {}
54 82
55 NSSCertDatabase::ImportCertFailure::~ImportCertFailure() {} 83 NSSCertDatabase::ImportCertFailure::~ImportCertFailure() {}
56 84
57 // static 85 // static
58 NSSCertDatabase* NSSCertDatabase::GetInstance() { 86 NSSCertDatabase* NSSCertDatabase::GetInstance() {
59 // TODO(mattm): Remove this ifdef guard once the linux impl of 87 // TODO(mattm): Remove this ifdef guard once the linux impl of
60 // GetNSSCertDatabaseForResourceContext does not call GetInstance. 88 // GetNSSCertDatabaseForResourceContext does not call GetInstance.
61 #if defined(OS_CHROMEOS) 89 #if defined(OS_CHROMEOS)
62 LOG(ERROR) << "NSSCertDatabase::GetInstance() is deprecated." 90 LOG(ERROR) << "NSSCertDatabase::GetInstance() is deprecated."
63 << "See http://crbug.com/329735."; 91 << "See http://crbug.com/329735.";
64 #endif 92 #endif
65 return &g_nss_cert_database.Get(); 93 return &g_nss_cert_database.Get();
66 } 94 }
67 95
68 NSSCertDatabase::NSSCertDatabase() 96 NSSCertDatabase::NSSCertDatabase()
69 : observer_list_(new ObserverListThreadSafe<Observer>), 97 : observer_list_(new ObserverListThreadSafe<Observer>),
70 weak_factory_(this) { 98 weak_factory_(this) {
71 // This also makes sure that NSS has been initialized. 99 // This also makes sure that NSS has been initialized.
72 CertDatabase::GetInstance()->ObserveNSSCertDatabase(this); 100 CertDatabase* cert_db = CertDatabase::GetInstance();
101 cert_notification_forwarder_.reset(new CertNotificationForwarder(cert_db));
102 AddObserver(cert_notification_forwarder_.get());
73 103
74 psm::EnsurePKCS12Init(); 104 psm::EnsurePKCS12Init();
75 } 105 }
76 106
77 NSSCertDatabase::~NSSCertDatabase() {} 107 NSSCertDatabase::~NSSCertDatabase() {}
78 108
79 void NSSCertDatabase::ListCertsSync(CertificateList* certs) { 109 void NSSCertDatabase::ListCertsSync(CertificateList* certs) {
80 ListCertsImpl(crypto::ScopedPK11Slot(), certs); 110 ListCertsImpl(crypto::ScopedPK11Slot(), certs);
81 } 111 }
82 112
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 } else { 472 } else {
443 if (SEC_DeletePermCertificate(cert->os_cert_handle())) { 473 if (SEC_DeletePermCertificate(cert->os_cert_handle())) {
444 LOG(ERROR) << "SEC_DeletePermCertificate failed: " << PORT_GetError(); 474 LOG(ERROR) << "SEC_DeletePermCertificate failed: " << PORT_GetError();
445 return false; 475 return false;
446 } 476 }
447 } 477 }
448 return true; 478 return true;
449 } 479 }
450 480
451 } // namespace net 481 } // namespace net
OLDNEW
« no previous file with comments | « net/cert/nss_cert_database.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698