Index: net/base/x509_certificate_win.cc |
=================================================================== |
--- net/base/x509_certificate_win.cc (revision 93224) |
+++ net/base/x509_certificate_win.cc (working copy) |
@@ -4,6 +4,7 @@ |
#include "net/base/x509_certificate.h" |
+#include "base/lazy_instance.h" |
#include "base/logging.h" |
#include "base/pickle.h" |
#include "base/sha1.h" |
@@ -642,6 +643,37 @@ |
} |
} |
+class GlobalCertStore { |
+ public: |
+ HCERTSTORE cert_store() { |
+ return cert_store_; |
+ } |
+ |
+ private: |
+ friend struct base::DefaultLazyInstanceTraits<GlobalCertStore>; |
+ |
+ GlobalCertStore() |
+ : cert_store_(CertOpenStore(CERT_STORE_PROV_MEMORY, 0, NULL, 0, NULL)) { |
+ } |
+ |
+ ~GlobalCertStore() { |
+ CertCloseStore(cert_store_, 0 /* flags */); |
+ } |
+ |
+ const HCERTSTORE cert_store_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(GlobalCertStore); |
+}; |
+ |
+static base::LazyInstance<GlobalCertStore, |
+ base::LeakyLazyInstanceTraits<GlobalCertStore> > |
+ g_cert_store(base::LINKER_INITIALIZED); |
+ |
+// static |
+HCERTSTORE X509Certificate::cert_store() { |
+ return g_cert_store.Get().cert_store(); |
+} |
+ |
int X509Certificate::VerifyInternal(const std::string& hostname, |
int flags, |
CertVerifyResult* verify_result) const { |