mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-28 08:16:09 +03:00
103 lines
3.2 KiB
C++
103 lines
3.2 KiB
C++
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef NET_CERT_CERT_DATABASE_H_
|
|
#define NET_CERT_CERT_DATABASE_H_
|
|
|
|
#include <memory>
|
|
|
|
#include "base/macros.h"
|
|
#include "base/memory/ref_counted.h"
|
|
#include "build/build_config.h"
|
|
#include "net/base/net_export.h"
|
|
|
|
namespace base {
|
|
template <typename T> struct DefaultSingletonTraits;
|
|
|
|
template <class ObserverType>
|
|
class ObserverListThreadSafe;
|
|
}
|
|
|
|
namespace net {
|
|
|
|
// This class allows callers to observe changes to the underlying certificate
|
|
// stores.
|
|
//
|
|
// TODO(davidben): This class is really just a giant global ObserverList. It
|
|
// does not do anything with the platform certificate and, in principle, //net's
|
|
// dependency on the platform is abstracted behind the CertVerifier and
|
|
// ClientCertStore interfaces. Ideally these signals would originate out of
|
|
// those interfaces' platform implementations.
|
|
|
|
class NET_EXPORT CertDatabase {
|
|
public:
|
|
// A CertDatabase::Observer will be notified on certificate database changes.
|
|
// The change could be either a user certificate is added/removed or trust on
|
|
// a certificate is changed. Observers can be registered via
|
|
// CertDatabase::AddObserver, and can un-register with
|
|
// CertDatabase::RemoveObserver.
|
|
class NET_EXPORT Observer {
|
|
public:
|
|
virtual ~Observer() {}
|
|
|
|
// Called whenever the Cert Database is known to have changed.
|
|
// Typically, this will be in response to a CA certificate being added,
|
|
// removed, or its trust changed, but may also signal on client
|
|
// certificate events when they can be reliably detected.
|
|
virtual void OnCertDBChanged() {}
|
|
|
|
protected:
|
|
Observer() {}
|
|
|
|
private:
|
|
DISALLOW_COPY_AND_ASSIGN(Observer);
|
|
};
|
|
|
|
// Returns the CertDatabase singleton.
|
|
static CertDatabase* GetInstance();
|
|
|
|
// Registers |observer| to receive notifications of certificate changes. The
|
|
// thread on which this is called is the thread on which |observer| will be
|
|
// called back with notifications.
|
|
void AddObserver(Observer* observer);
|
|
|
|
// Unregisters |observer| from receiving notifications. This must be called
|
|
// on the same thread on which AddObserver() was called.
|
|
void RemoveObserver(Observer* observer);
|
|
|
|
#if defined(OS_MACOSX) && !defined(OS_IOS)
|
|
// Configures the current message loop to observe and forward events from
|
|
// Keychain services. The MessageLoop must have an associated CFRunLoop,
|
|
// which means that this must be called from a MessageLoop of TYPE_UI.
|
|
void SetMessageLoopForKeychainEvents();
|
|
#endif
|
|
|
|
// Synthetically injects notifications to all observers. In general, this
|
|
// should only be called by the creator of the CertDatabase. Used to inject
|
|
// notifications from other DB interfaces.
|
|
void NotifyObserversCertDBChanged();
|
|
|
|
private:
|
|
friend struct base::DefaultSingletonTraits<CertDatabase>;
|
|
|
|
CertDatabase();
|
|
~CertDatabase();
|
|
|
|
const scoped_refptr<base::ObserverListThreadSafe<Observer>> observer_list_;
|
|
|
|
#if defined(OS_MACOSX) && !defined(OS_IOS)
|
|
void ReleaseNotifier();
|
|
|
|
class Notifier;
|
|
friend class Notifier;
|
|
Notifier* notifier_ = nullptr;
|
|
#endif
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(CertDatabase);
|
|
};
|
|
|
|
} // namespace net
|
|
|
|
#endif // NET_CERT_CERT_DATABASE_H_
|