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()16CertDatabase* 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)23void CertDatabase::AddObserver(Observer* observer) { 24 observer_list_->AddObserver(observer); 25 } 26 RemoveObserver(Observer * observer)27void CertDatabase::RemoveObserver(Observer* observer) { 28 observer_list_->RemoveObserver(observer); 29 } 30 NotifyObserversCertDBChanged()31void 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()41CertDatabase::CertDatabase() 42 : observer_list_( 43 base::MakeRefCounted<base::ObserverListThreadSafe<Observer>>()) {} 44 ~CertDatabase()45CertDatabase::~CertDatabase() { 46 #if BUILDFLAG(IS_MAC) 47 ReleaseNotifier(); 48 #endif 49 } 50 51 } // namespace net 52