Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(147)

Unified Diff: net/cert/multi_threaded_cert_verifier.h

Issue 1115903002: Refactor the API for CertVerifier::Verify() and the implementation of MultiThreadedCertVerifier::Ver (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase again Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/cert/multi_threaded_cert_verifier.h
diff --git a/net/cert/multi_threaded_cert_verifier.h b/net/cert/multi_threaded_cert_verifier.h
index bfcab387872dba94b7d97eaaee0704076e90bf9c..177f8df6f760db53e59b476491eb0ea5e10e24c8 100644
--- a/net/cert/multi_threaded_cert_verifier.h
+++ b/net/cert/multi_threaded_cert_verifier.h
@@ -5,7 +5,7 @@
#ifndef NET_CERT_MULTI_THREADED_CERT_VERIFIER_H_
#define NET_CERT_MULTI_THREADED_CERT_VERIFIER_H_
-#include <map>
+#include <set>
#include <string>
#include <vector>
@@ -61,21 +61,20 @@ class NET_EXPORT_PRIVATE MultiThreadedCertVerifier
CRLSet* crl_set,
CertVerifyResult* verify_result,
const CompletionCallback& callback,
- CertVerifier::RequestHandle* out_req,
+ scoped_ptr<Request>* out_req,
const BoundNetLog& net_log) override;
- void CancelRequest(CertVerifier::RequestHandle req) override;
-
bool SupportsOCSPStapling() override;
private:
- friend class CertVerifierWorker; // Calls HandleResult.
+ struct JobToRequestParamsComparator;
friend class CertVerifierRequest;
friend class CertVerifierJob;
friend class MultiThreadedCertVerifierTest;
FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest, CacheHit);
FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest, DifferentCACerts);
FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest, InflightJoin);
+ FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest, MultipleInflightJoin);
FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest, CancelRequest);
FRIEND_TEST_ALL_PREFIXES(MultiThreadedCertVerifierTest,
RequestParamsComparators);
@@ -130,20 +129,30 @@ class NET_EXPORT_PRIVATE MultiThreadedCertVerifier
const CacheValidityPeriod& expiration) const;
};
+ struct JobComparator {
+ bool operator()(const CertVerifierJob* job1,
+ const CertVerifierJob* job2) const;
+ };
+
+ using JobSet = std::set<CertVerifierJob*, JobComparator>;
+
typedef ExpiringCache<RequestParams, CachedResult, CacheValidityPeriod,
CacheExpirationFunctor> CertVerifierCache;
- void HandleResult(X509Certificate* cert,
- const std::string& hostname,
- const std::string& ocsp_response,
- int flags,
- const CertificateList& additional_trust_anchors,
- int error,
- const CertVerifyResult& verify_result);
+ // Saves |result| into the cache, keyed by |key|.
+ void SaveResultToCache(const RequestParams& key, const CachedResult& result);
// CertDatabase::Observer methods:
void OnCACertChanged(const X509Certificate* cert) override;
+ // Returns an inflight job for |key|. If there is no such job then returns
+ // null.
+ CertVerifierJob* FindJob(const RequestParams& key);
+
+ // Removes |job| from the inflight set, and passes ownership back to the
+ // caller. |job| must already be |inflight_|.
+ scoped_ptr<CertVerifierJob> RemoveJob(CertVerifierJob* job);
+
// For unit testing.
void ClearCache() { cache_.Clear(); }
size_t GetCacheSize() const { return cache_.size(); }
@@ -154,12 +163,8 @@ class NET_EXPORT_PRIVATE MultiThreadedCertVerifier
// cache_ maps from a request to a cached result.
CertVerifierCache cache_;
- // inflight_ maps from a request to an active verification which is taking
- // place.
- std::map<RequestParams, CertVerifierJob*> inflight_;
-
- // A non-owning pointer to the first job for histogramming.
- CertVerifierJob* first_job_;
+ // inflight_ holds the jobs for which an active verification is taking place.
+ JobSet inflight_;
uint64 requests_;
uint64 cache_hits_;

Powered by Google App Engine
This is Rietveld 408576698