1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 23345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Use of this source code is governed by a BSD-style license that can be 33345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// found in the LICENSE file. 43345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 53345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "net/base/cert_database.h" 63345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/singleton.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/observer_list_threadsafe.h" 93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "net/base/x509_certificate.h" 103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricknamespace net { 123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 133345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickCertDatabase::ImportCertFailure::ImportCertFailure( 143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick X509Certificate* cert, int err) 153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : certificate(cert), net_error(err) { 163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 18731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickCertDatabase::ImportCertFailure::~ImportCertFailure() { 19731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 20731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// CertDatabaseNotifier notifies registered observers when new user certificates 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// are added to the database. 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass CertDatabaseNotifier { 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CertDatabaseNotifier() 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : observer_list_(new ObserverListThreadSafe<CertDatabase::Observer>) { 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static CertDatabaseNotifier* GetInstance() { 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return Singleton<CertDatabaseNotifier>::get(); 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen friend struct DefaultSingletonTraits<CertDatabaseNotifier>; 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen friend class CertDatabase; 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const scoped_refptr<ObserverListThreadSafe<CertDatabase::Observer> > 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen observer_list_; 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid CertDatabase::AddObserver(Observer* observer) { 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CertDatabaseNotifier::GetInstance()->observer_list_->AddObserver(observer); 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid CertDatabase::RemoveObserver(Observer* observer) { 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CertDatabaseNotifier::GetInstance()->observer_list_->RemoveObserver(observer); 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid CertDatabase::NotifyObserversOfUserCertAdded(const X509Certificate* cert) { 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CertDatabaseNotifier::GetInstance()->observer_list_->Notify( 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &CertDatabase::Observer::OnUserCertAdded, make_scoped_refptr(cert)); 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid CertDatabase::NotifyObserversOfCertTrustChanged( 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const X509Certificate* cert) { 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CertDatabaseNotifier::GetInstance()->observer_list_->Notify( 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &CertDatabase::Observer::OnCertTrustChanged, make_scoped_refptr(cert)); 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} // namespace net 61