Index: chrome/browser/chromeos/net/nss_cert_database_cros.cc |
diff --git a/chrome/browser/chromeos/net/nss_cert_database_cros.cc b/chrome/browser/chromeos/net/nss_cert_database_cros.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a15305ab236021a848dbedef2c9a7fb767532dac |
--- /dev/null |
+++ b/chrome/browser/chromeos/net/nss_cert_database_cros.cc |
@@ -0,0 +1,61 @@ |
+// Copyright (c) 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. |
+ |
+#include "chrome/browser/chromeos/net/nss_cert_database_cros.h" |
+ |
+#include "chrome/browser/chromeos/net/profile_cert_filter.h" |
+#include "chrome/browser/net/nss_slot_factory.h" |
+#include "net/base/crypto_module.h" |
+#include "net/cert/x509_certificate.h" |
+ |
+namespace chromeos { |
+ |
+NSSCertDatabaseCros::NSSCertDatabaseCros(crypto::ScopedPK11Slot public_slot, |
+ crypto::ScopedPK11Slot private_slot) |
+ : public_slot_(public_slot.Pass()), private_slot_(private_slot.Pass()) { |
+ VLOG(1) << __func__ << " pub:" << PK11_GetModuleID(public_slot_.get()) << ":" |
+ << PK11_GetSlotID(public_slot_.get()) |
+ << " priv:" << PK11_GetModuleID(private_slot_.get()) << ":" |
+ << PK11_GetSlotID(private_slot_.get()); |
+ profile_cert_filter_.Init(GetPublicSlot(), GetPrivateSlot()); |
+} |
+ |
+NSSCertDatabaseCros::~NSSCertDatabaseCros() {} |
+ |
+void NSSCertDatabaseCros::ListCerts(net::CertificateList* certs) { |
+ NSSCertDatabase::ListCerts(certs); |
+ |
+ size_t pre_size = certs->size(); |
+ certs->erase( |
+ std::remove_if(certs->begin(), certs->end(), |
+ ProfileCertFilter::Predicate(profile_cert_filter_)), |
+ certs->end()); |
+ LOG(WARNING) << "filtered " << pre_size - certs->size() << " of " |
+ << pre_size << " certs"; |
+} |
+ |
+void NSSCertDatabaseCros::ListModules(net::CryptoModuleList* modules, |
+ bool need_rw) const { |
+ NSSCertDatabase::ListModules(modules, need_rw); |
+ |
+ size_t pre_size = modules->size(); |
+ modules->erase( |
+ std::remove_if(modules->begin(), modules->end(), |
+ ProfileCertFilter::Predicate(profile_cert_filter_)), |
+ modules->end()); |
+ LOG(WARNING) << "filtered " << pre_size - modules->size() << " of " |
+ << pre_size << " modules"; |
+} |
+ |
+crypto::ScopedPK11Slot NSSCertDatabaseCros::GetPublicSlot() const { |
+ return crypto::ScopedPK11Slot( |
+ public_slot_ ? PK11_ReferenceSlot(public_slot_.get()) : NULL); |
+} |
+ |
+crypto::ScopedPK11Slot NSSCertDatabaseCros::GetPrivateSlot() const { |
+ return crypto::ScopedPK11Slot( |
+ private_slot_ ? PK11_ReferenceSlot(private_slot_.get()) : NULL); |
+} |
+ |
+} // namespace chromeos |