| Index: chrome/browser/chromeos/cros/cert_library.h
|
| diff --git a/chrome/browser/chromeos/cros/cert_library.h b/chrome/browser/chromeos/cros/cert_library.h
|
| index 7015ef085cc80daec344bc8969a725c9fe666a41..df365972e87cc4175b12f24b54b84ed8ae5d3d8b 100644
|
| --- a/chrome/browser/chromeos/cros/cert_library.h
|
| +++ b/chrome/browser/chromeos/cros/cert_library.h
|
| @@ -8,19 +8,20 @@
|
| #include <string>
|
|
|
| #include "base/string16.h"
|
| +#include "chromeos/network/cert_loader.h"
|
| #include "net/cert/x509_certificate.h"
|
|
|
| -namespace crypto {
|
| -class SymmetricKey;
|
| -}
|
| -
|
| namespace chromeos {
|
|
|
| -class CertLibrary {
|
| - public:
|
| +class CertNameComparator;
|
|
|
| - // Observers can register themselves via CertLibrary::AddObserver, and can
|
| - // un-register with CertLibrary::RemoveObserver.
|
| +// This class is responsible for keeping track of certificates in a UI
|
| +// friendly manner. It observes CertLoader to receive certificate list
|
| +// updates and sorts them by type for the UI. All public APIs are expected
|
| +// to be called from the UI thread and are non blocking. Observers will also
|
| +// be called on the UI thread.
|
| +class CertLibrary : public CertLoader::Observer {
|
| + public:
|
| class Observer {
|
| public:
|
| virtual ~Observer() {}
|
| @@ -36,70 +37,67 @@ class CertLibrary {
|
| DISALLOW_COPY_AND_ASSIGN(Observer);
|
| };
|
|
|
| - // Wrapper class to provide an additional interface for net::CertificateList.
|
| - class CertList {
|
| - public:
|
| - explicit CertList(CertLibrary* library);
|
| - ~CertList();
|
| - void Append(net::X509Certificate* cert) { list_.push_back(cert); }
|
| - void Clear() { list_.clear(); }
|
| - int Size() const { return static_cast<int>(list_.size()); }
|
| - net::X509Certificate* GetCertificateAt(int index) const;
|
| - string16 GetDisplayStringAt(int index) const; // User-visible name.
|
| - std::string GetNicknameAt(int index) const;
|
| - std::string GetPkcs11IdAt(int index) const;
|
| - bool IsHardwareBackedAt(int index) const;
|
| - // Finds the index of a Certificate matching |nickname|.
|
| - // Returns -1 if none found.
|
| - int FindCertByNickname(const std::string& nickname) const;
|
| - // Same as above but for a pkcs#11 id.
|
| - int FindCertByPkcs11Id(const std::string& pkcs11_id) const;
|
| - net::CertificateList& list() { return list_; }
|
| - private:
|
| - net::CertificateList list_;
|
| - CertLibrary* cert_library_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(CertList);
|
| + enum CertType {
|
| + CERT_TYPE_DEFAULT,
|
| + CERT_TYPE_USER,
|
| + CERT_TYPE_SERVER,
|
| + CERT_TYPE_SERVER_CA
|
| };
|
|
|
| - virtual ~CertLibrary();
|
| -
|
| - static CertLibrary* GetImpl(bool stub);
|
| + // Manage the global instance.
|
| + static void Initialize();
|
| + static void Shutdown();
|
| + static CertLibrary* Get();
|
| + static bool IsInitialized();
|
|
|
| - // Registers |observer|. The thread on which this is called is the thread
|
| - // on which |observer| will be called back with notifications.
|
| - virtual void AddObserver(Observer* observer) = 0;
|
| -
|
| - // Unregisters |observer| from receiving notifications. This must be called
|
| - // on the same thread on which AddObserver() was called.
|
| - virtual void RemoveObserver(Observer* observer) = 0;
|
| -
|
| - // Loads the key/certificates database for the current logged in user.
|
| - virtual void LoadKeyStore() = 0;
|
| + // Add / Remove Observer
|
| + void AddObserver(Observer* observer);
|
| + void RemoveObserver(Observer* observer);
|
|
|
| // Returns true when the certificate list has been requested but not loaded.
|
| - virtual bool CertificatesLoading() const = 0;
|
| + bool CertificatesLoading() const;
|
|
|
| // Returns true when the certificate list has been initiailized.
|
| - virtual bool CertificatesLoaded() const = 0;
|
| + bool CertificatesLoaded() const;
|
|
|
| // Returns true if the TPM is available for hardware-backed certificates.
|
| - virtual bool IsHardwareBacked() const = 0;
|
| + bool IsHardwareBacked() const;
|
| +
|
| + // Retruns the number of certificates available for |type|.
|
| + int NumCertificates(CertType type) const;
|
| +
|
| + // Retreives the certificate property for |type| at |index|.
|
| + string16 GetCertDisplayStringAt(CertType type, int index) const;
|
| + std::string GetCertNicknameAt(CertType type, int index) const;
|
| + std::string GetCertPkcs11IdAt(CertType type, int index) const;
|
| + bool IsCertHardwareBackedAt(CertType type, int index) const;
|
|
|
| - // Returns the cached TPM token name.
|
| - virtual const std::string& GetTpmTokenName() const = 0;
|
| + // Returns the index of a Certificate matching |nickname| or -1 if none found.
|
| + int GetCertIndexByNickname(CertType type, const std::string& nickname) const;
|
| + // Same as above but for a PKCS#11 id. TODO(stevenjb): Replace this with a
|
| + // better mechanism for uniquely idientifying certificates, crbug.com/236978.
|
| + int GetCertIndexByPkcs11Id(CertType type, const std::string& pkcs11_id) const;
|
| +
|
| + // CertLoader::Observer
|
| + virtual void OnCertificatesLoaded(const net::CertificateList&,
|
| + bool initial_load) OVERRIDE;
|
| +
|
| + private:
|
| + CertLibrary();
|
| + virtual ~CertLibrary();
|
|
|
| - // Returns the current list of all certificates.
|
| - virtual const CertList& GetCertificates() const = 0;
|
| + net::X509Certificate* GetCertificateAt(CertType type, int index) const;
|
| + const net::CertificateList& GetCertificateListForType(CertType type) const;
|
|
|
| - // Returns the current list of user certificates.
|
| - virtual const CertList& GetUserCertificates() const = 0;
|
| + ObserverList<CertLibrary::Observer> observer_list_;
|
|
|
| - // Returns the current list of server certificates.
|
| - virtual const CertList& GetServerCertificates() const = 0;
|
| + // Sorted certificate lists
|
| + net::CertificateList certs_;
|
| + net::CertificateList user_certs_;
|
| + net::CertificateList server_certs_;
|
| + net::CertificateList server_ca_certs_;
|
|
|
| - // Returns the current list of server CA certificates.
|
| - virtual const CertList& GetCACertificates() const = 0;
|
| + DISALLOW_COPY_AND_ASSIGN(CertLibrary);
|
| };
|
|
|
| } // namespace chromeos
|
|
|