• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2012 The Chromium Authors
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/cert/cert_database.h"
6 
7 #include "base/memory/singleton.h"
8 #include "base/observer_list_threadsafe.h"
9 #include "build/build_config.h"
10 #include "net/log/net_log.h"
11 #include "net/log/net_log_values.h"
12 
13 namespace net {
14 
15 // static
GetInstance()16 CertDatabase* CertDatabase::GetInstance() {
17   // Leaky so it can be initialized on worker threads, and because there is no
18   // useful cleanup to do.
19   return base::Singleton<CertDatabase,
20                          base::LeakySingletonTraits<CertDatabase>>::get();
21 }
22 
AddObserver(Observer * observer)23 void CertDatabase::AddObserver(Observer* observer) {
24   observer_list_->AddObserver(observer);
25 }
26 
RemoveObserver(Observer * observer)27 void CertDatabase::RemoveObserver(Observer* observer) {
28   observer_list_->RemoveObserver(observer);
29 }
30 
NotifyObserversCertDBChanged()31 void CertDatabase::NotifyObserversCertDBChanged() {
32   // Log to NetLog as it may help debug issues like https://crbug.com/915463
33   // This isn't guarded with net::NetLog::Get()->IsCapturing()) because an
34   // AddGlobalEntry() call without much computation is really cheap.
35   net::NetLog::Get()->AddGlobalEntry(
36       NetLogEventType::CERTIFICATE_DATABASE_CHANGED);
37 
38   observer_list_->Notify(FROM_HERE, &Observer::OnCertDBChanged);
39 }
40 
CertDatabase()41 CertDatabase::CertDatabase()
42     : observer_list_(
43           base::MakeRefCounted<base::ObserverListThreadSafe<Observer>>()) {}
44 
~CertDatabase()45 CertDatabase::~CertDatabase() {
46 #if BUILDFLAG(IS_MAC)
47   ReleaseNotifier();
48 #endif
49 }
50 
51 }  // namespace net
52