1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net/cert/cert_database.h"
#include "base/metrics/histogram_functions.h"
#include "base/observer_list_threadsafe.h"
#include "build/build_config.h"
#include "net/log/net_log.h"
#include "net/log/net_log_values.h"
namespace net {
namespace {
void RecordNotificationHistogram(CertDatabase::HistogramNotificationType type) {
base::UmaHistogramEnumeration("Net.Certificate.ChangeNotification", type);
}
} // namespace
// static
CertDatabase* CertDatabase::GetInstance() {
static base::NoDestructor<CertDatabase> cert_database;
return cert_database.get();
}
void CertDatabase::AddObserver(Observer* observer) {
observer_list_->AddObserver(observer);
}
void CertDatabase::RemoveObserver(Observer* observer) {
observer_list_->RemoveObserver(observer);
}
void CertDatabase::NotifyObserversTrustStoreChanged() {
// Log to NetLog as it may help debug issues like https://crbug.com/915463
// This isn't guarded with net::NetLog::Get()->IsCapturing()) because an
// AddGlobalEntry() call without much computation is really cheap.
net::NetLog::Get()->AddGlobalEntry(
NetLogEventType::CERTIFICATE_DATABASE_TRUST_STORE_CHANGED);
RecordNotificationHistogram(HistogramNotificationType::kTrust);
observer_list_->Notify(FROM_HERE, &Observer::OnTrustStoreChanged);
}
void CertDatabase::NotifyObserversClientCertStoreChanged() {
// Log to NetLog as it may help debug issues like https://crbug.com/915463
// This isn't guarded with net::NetLog::Get()->IsCapturing()) because an
// AddGlobalEntry() call without much computation is really cheap.
net::NetLog::Get()->AddGlobalEntry(
NetLogEventType::CERTIFICATE_DATABASE_CLIENT_CERT_STORE_CHANGED);
RecordNotificationHistogram(HistogramNotificationType::kClientCert);
observer_list_->Notify(FROM_HERE, &Observer::OnClientCertStoreChanged);
}
CertDatabase::CertDatabase()
: observer_list_(
base::MakeRefCounted<base::ObserverListThreadSafe<Observer>>()) {}
} // namespace net
|