cert_database.cc 1.5 KB

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