1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "net/base/cert_database.h"
6
7#include "base/memory/singleton.h"
8#include "base/observer_list_threadsafe.h"
9#include "net/base/x509_certificate.h"
10
11namespace net {
12
13CertDatabase::ImportCertFailure::ImportCertFailure(
14    X509Certificate* cert, int err)
15    : certificate(cert), net_error(err) {
16}
17
18CertDatabase::ImportCertFailure::~ImportCertFailure() {
19}
20
21// CertDatabaseNotifier notifies registered observers when new user certificates
22// are added to the database.
23class CertDatabaseNotifier {
24 public:
25  CertDatabaseNotifier()
26      : observer_list_(new ObserverListThreadSafe<CertDatabase::Observer>) {
27  }
28
29  static CertDatabaseNotifier* GetInstance() {
30    return Singleton<CertDatabaseNotifier>::get();
31  }
32
33  friend struct DefaultSingletonTraits<CertDatabaseNotifier>;
34  friend class CertDatabase;
35
36 private:
37  const scoped_refptr<ObserverListThreadSafe<CertDatabase::Observer> >
38      observer_list_;
39};
40
41void CertDatabase::AddObserver(Observer* observer) {
42  CertDatabaseNotifier::GetInstance()->observer_list_->AddObserver(observer);
43}
44
45void CertDatabase::RemoveObserver(Observer* observer) {
46  CertDatabaseNotifier::GetInstance()->observer_list_->RemoveObserver(observer);
47}
48
49void CertDatabase::NotifyObserversOfUserCertAdded(const X509Certificate* cert) {
50  CertDatabaseNotifier::GetInstance()->observer_list_->Notify(
51      &CertDatabase::Observer::OnUserCertAdded, make_scoped_refptr(cert));
52}
53
54void CertDatabase::NotifyObserversOfCertTrustChanged(
55    const X509Certificate* cert) {
56  CertDatabaseNotifier::GetInstance()->observer_list_->Notify(
57      &CertDatabase::Observer::OnCertTrustChanged, make_scoped_refptr(cert));
58}
59
60}  // namespace net
61