Chromium Code Reviews| Index: chromeos/cert_loader.cc |
| diff --git a/chromeos/cert_loader.cc b/chromeos/cert_loader.cc |
| index 4e4131bad953b82db4e1cc39368f2b6c38b2a9ed..b30818b2a6a0f5c550121bc89547dc835e9c85b7 100644 |
| --- a/chromeos/cert_loader.cc |
| +++ b/chromeos/cert_loader.cc |
| @@ -160,6 +160,18 @@ void CertLoader::UpdateCertificates( |
| // Ignore any existing certificates. |
| cert_list_ = std::move(cert_list); |
| + // Extract certificates which are in the system token into the |
| + // system_cert_list_ sublist. |
| + system_cert_list_.clear(); |
| + for (net::CertificateList::const_iterator it = cert_list_->begin(); |
|
emaxx
2017/04/20 20:10:39
nit: Use range-based for loop?
pmarko
2017/04/24 14:49:55
Done.
|
| + it != cert_list_->end(); ++it) { |
| + const scoped_refptr<net::X509Certificate> cert = *it; |
| + |
| + if (IsCertificateInSystemToken(cert.get())) { |
|
emaxx
2017/04/20 20:10:39
Isn't it bad to call this function on the UI threa
pmarko
2017/04/24 14:49:55
Done. Offloaded to slow task runner, see new membe
|
| + system_cert_list_.push_back(cert); |
| + } |
| + } |
| + |
| bool initial_load = !certificates_loaded_; |
| certificates_loaded_ = true; |
| NotifyCertificatesLoaded(initial_load); |
| @@ -179,4 +191,25 @@ void CertLoader::OnCertDBChanged() { |
| LoadCertificates(); |
| } |
| +bool CertLoader::IsCertificateInSystemToken(const net::X509Certificate* cert) { |
| + if (!database_->GetSystemSlot()) |
| + return false; |
| + |
| + PK11SlotInfo* system_slot = database_->GetSystemSlot().get(); |
| + |
| + crypto::ScopedPK11SlotList slots_for_cert( |
| + PK11_GetAllSlotsForCert(cert->os_cert_handle(), NULL)); |
| + if (!slots_for_cert) |
| + return false; |
| + |
| + for (PK11SlotListElement* slot_element = |
| + PK11_GetFirstSafe(slots_for_cert.get()); |
| + slot_element; slot_element = PK11_GetNextSafe(slots_for_cert.get(), |
| + slot_element, PR_FALSE)) { |
| + if (slot_element->slot == system_slot) |
| + return true; |
|
emaxx
2017/04/20 20:10:39
I didn't look into the NSS sources to check, but c
pmarko
2017/04/24 14:49:55
You are right! I forgot and repeated bug 329104.
D
|
| + } |
| + return false; |
| +} |
| + |
| } // namespace chromeos |