| // Copyright 2013 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_NSS_CERT_DATABASE_CHROMEOS_ | 
 | #define NET_CERT_NSS_CERT_DATABASE_CHROMEOS_ | 
 |  | 
 | #include "base/callback.h" | 
 | #include "base/memory/weak_ptr.h" | 
 | #include "crypto/scoped_nss_types.h" | 
 | #include "net/base/net_export.h" | 
 | #include "net/cert/nss_cert_database.h" | 
 | #include "net/cert/nss_profile_filter_chromeos.h" | 
 |  | 
 | namespace net { | 
 |  | 
 | class NET_EXPORT NSSCertDatabaseChromeOS : public NSSCertDatabase { | 
 |  public: | 
 |   NSSCertDatabaseChromeOS(crypto::ScopedPK11Slot public_slot, | 
 |                           crypto::ScopedPK11Slot private_slot); | 
 |   ~NSSCertDatabaseChromeOS() override; | 
 |  | 
 |   // |system_slot| is the system TPM slot, which is only enabled for certain | 
 |   // users. | 
 |   void SetSystemSlot(crypto::ScopedPK11Slot system_slot); | 
 |  | 
 |   // NSSCertDatabase implementation. | 
 |   void ListCertsSync(CertificateList* certs) override; | 
 |   void ListCerts(const NSSCertDatabase::ListCertsCallback& callback) override; | 
 |   void ListModules(CryptoModuleList* modules, bool need_rw) const override; | 
 |   crypto::ScopedPK11Slot GetSystemSlot() const override; | 
 |  | 
 |   // TODO(mattm): handle trust setting, deletion, etc correctly when certs exist | 
 |   // in multiple slots. | 
 |   // TODO(mattm): handle trust setting correctly for certs in read-only slots. | 
 |  | 
 |  private: | 
 |   // Certificate listing implementation used by |ListCerts| and |ListCertsSync|. | 
 |   // The certificate list normally returned by NSSCertDatabase::ListCertsImpl | 
 |   // is additionally filtered by |profile_filter|. | 
 |   // Static so it may safely be used on the worker thread. | 
 |   static void ListCertsImpl(const NSSProfileFilterChromeOS& profile_filter, | 
 |                             CertificateList* certs); | 
 |  | 
 |   NSSProfileFilterChromeOS profile_filter_; | 
 |   crypto::ScopedPK11Slot system_slot_; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(NSSCertDatabaseChromeOS); | 
 | }; | 
 |  | 
 | }  // namespace net | 
 |  | 
 | #endif  // NET_CERT_NSS_CERT_DATABASE_CHROMEOS_ |