Index: chrome/browser/chromeos/certificate_provider/thread_safe_certificate_map.h |
diff --git a/chrome/browser/chromeos/certificate_provider/thread_safe_certificate_map.h b/chrome/browser/chromeos/certificate_provider/thread_safe_certificate_map.h |
index 15f04429a34f8ed6064fc043580e9bc99deec5c9..e9d5a99dec257af6182fecb4caa58d4b776dc5d0 100644 |
--- a/chrome/browser/chromeos/certificate_provider/thread_safe_certificate_map.h |
+++ b/chrome/browser/chromeos/certificate_provider/thread_safe_certificate_map.h |
@@ -8,6 +8,7 @@ |
#include <map> |
#include <string> |
+#include "base/containers/scoped_ptr_map.h" |
#include "base/macros.h" |
#include "base/synchronization/lock.h" |
#include "chrome/browser/chromeos/certificate_provider/certificate_info.h" |
@@ -23,34 +24,46 @@ namespace certificate_provider { |
class ThreadSafeCertificateMap { |
public: |
- using FingerprintToCertMap = std::map<net::SHA256HashValue, |
- CertificateInfo, |
- net::SHA256HashValueLessThan>; |
- using ExtensionToFingerprintsMap = |
- std::map<std::string, FingerprintToCertMap>; |
+ struct MapValue { |
+ MapValue(const CertificateInfo& cert_info, const std::string& extension_id); |
+ ~MapValue(); |
+ |
+ CertificateInfo cert_info; |
+ std::string extension_id; |
+ }; |
+ using FingerprintToCertAndExtensionMap = |
+ base::ScopedPtrMap<net::SHA256HashValue, |
+ scoped_ptr<MapValue>, |
+ net::SHA256HashValueLessThan>; |
ThreadSafeCertificateMap(); |
~ThreadSafeCertificateMap(); |
- // Replaces the stored certificates by the given certificates. |
+ // Updates the stored certificates with the given mapping from extension ids |
+ // to certificates. |
void Update(const std::map<std::string, CertificateInfoList>& |
extension_to_certificates); |
- // Looks up the given certificate. If found, it returns true and sets |
- // |extension_id| to the extension id for which this certificate was |
- // registered and sets |info| to the stored info. Otherwise returns false and |
- // doesn't modify |info| and |extension_id|. |
+ // Looks up the given certificate. If the certificate was added by any |
+ // previous Update() call, returns true. |
+ // If this certificate was provided in the most recent Update() call, |
+ // |is_currently_provided| will be set to true, |extension_id| be set to that |
+ // extension's id and |info| will be set to the stored info. Otherwise, if |
+ // this certificate was not provided in the the most recent Update() call, |
+ // sets |is_currently_provided| to false and doesn't modify |info| and |
+ // |extension_id|. |
bool LookUpCertificate(const net::X509Certificate& cert, |
+ bool* is_currently_provided, |
CertificateInfo* info, |
std::string* extension_id); |
- // Remove all certificates that are currently registered for the given |
- // extension. |
+ // Remove every association of stored certificates to the given extension. |
+ // The certificates themselves will be remembered. |
void RemoveExtension(const std::string& extension_id); |
private: |
base::Lock lock_; |
- ExtensionToFingerprintsMap extension_to_certificates_; |
+ FingerprintToCertAndExtensionMap fingerprint_to_cert_and_extension_; |
DISALLOW_COPY_AND_ASSIGN(ThreadSafeCertificateMap); |
}; |