| 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_;
|
|
|