OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef NET_CERT_NET_CERT_NET_FETCHER_H_ | 5 #ifndef NET_CERT_NET_CERT_NET_FETCHER_H_ |
6 #define NET_CERT_NET_CERT_NET_FETCHER_H_ | 6 #define NET_CERT_NET_CERT_NET_FETCHER_H_ |
7 | 7 |
8 #include <map> | |
9 #include <memory> | 8 #include <memory> |
10 | 9 |
11 #include "base/callback.h" | |
12 #include "base/macros.h" | |
13 #include "base/threading/thread_checker.h" | |
14 #include "net/base/net_errors.h" | |
15 #include "net/base/net_export.h" | 10 #include "net/base/net_export.h" |
16 #include "net/cert/cert_net_fetcher.h" | |
17 | 11 |
18 namespace net { | 12 namespace net { |
19 | 13 |
20 class URLRequestContext; | 14 class CertNetFetcher; |
| 15 class URLRequestContextGetter; |
21 | 16 |
22 // CertNetFetcherImpl is an implementation of CertNetFetcher that uses the | 17 // Creates a CertNetFetcher that issues requests through the provided |
23 // network stack. | 18 // URLRequestContext. |
24 // | 19 // |
25 // For more details refer to the documentation for the interface. | 20 // The returned CertNetFetcher is to be operated on a thread *other* than the |
26 class NET_EXPORT CertNetFetcherImpl : public CertNetFetcher { | 21 // thread used for the URLRequestContext (since it gives a blocking interface |
27 public: | 22 // to URL fetching). |
28 // Initializes CertNetFetcherImpl using the specified URLRequestContext for | 23 NET_EXPORT std::unique_ptr<CertNetFetcher> CreateCertNetFetcher( |
29 // issuing requests. |context| must remain valid for the entire lifetime of | 24 URLRequestContextGetter* context_getter); |
30 // the CertNetFetcherImpl. | |
31 explicit CertNetFetcherImpl(URLRequestContext* context); | |
32 | |
33 // Deletion implicitly cancels any outstanding requests. | |
34 ~CertNetFetcherImpl() override; | |
35 | |
36 WARN_UNUSED_RESULT std::unique_ptr<Request> FetchCaIssuers( | |
37 const GURL& url, | |
38 int timeout_milliseconds, | |
39 int max_response_bytes, | |
40 const FetchCallback& callback) override; | |
41 | |
42 WARN_UNUSED_RESULT std::unique_ptr<Request> FetchCrl( | |
43 const GURL& url, | |
44 int timeout_milliseconds, | |
45 int max_response_bytes, | |
46 const FetchCallback& callback) override; | |
47 | |
48 WARN_UNUSED_RESULT std::unique_ptr<Request> FetchOcsp( | |
49 const GURL& url, | |
50 int timeout_milliseconds, | |
51 int max_response_bytes, | |
52 const FetchCallback& callback) override; | |
53 | |
54 private: | |
55 class RequestImpl; | |
56 class Job; | |
57 struct JobToRequestParamsComparator; | |
58 struct RequestParams; | |
59 | |
60 struct JobComparator { | |
61 bool operator()(const Job* job1, const Job* job2) const; | |
62 }; | |
63 | |
64 // Would be a set<unique_ptr> but extraction of owned objects from a set of | |
65 // owned types doesn't come until C++17. | |
66 using JobSet = std::map<Job*, std::unique_ptr<Job>, JobComparator>; | |
67 | |
68 // Starts an asynchronous request to fetch the given URL. On completion | |
69 // |callback| will be invoked. | |
70 // | |
71 // Completion of the request will never occur synchronously. In other words it | |
72 // is guaranteed that |callback| will only be invoked once the Fetch*() method | |
73 // has returned. | |
74 WARN_UNUSED_RESULT std::unique_ptr<Request> Fetch( | |
75 std::unique_ptr<RequestParams> request_params, | |
76 const FetchCallback& callback); | |
77 | |
78 // Finds a job with a matching RequestPararms or returns nullptr if there was | |
79 // no match. | |
80 Job* FindJob(const RequestParams& params); | |
81 | |
82 // Removes |job| from the in progress jobs and transfers ownership to the | |
83 // caller. | |
84 std::unique_ptr<Job> RemoveJob(Job* job); | |
85 | |
86 // Indicates which Job is currently executing inside of OnJobCompleted(). | |
87 void SetCurrentlyCompletingJob(Job* job); | |
88 void ClearCurrentlyCompletingJob(Job* job); | |
89 bool IsCurrentlyCompletingJob(Job* job); | |
90 | |
91 // The in-progress jobs. This set does not contain the job which is actively | |
92 // invoking callbacks (OnJobCompleted). Instead that is tracked by | |
93 // |currently_completing_job_|. | |
94 JobSet jobs_; | |
95 | |
96 // The Job that is currently executing OnJobCompleted(). There can be at most | |
97 // one such job. This pointer is not owned. | |
98 Job* currently_completing_job_; | |
99 | |
100 // Not owned. CertNetFetcherImpl must outlive the URLRequestContext. | |
101 URLRequestContext* context_; | |
102 | |
103 base::ThreadChecker thread_checker_; | |
104 | |
105 DISALLOW_COPY_AND_ASSIGN(CertNetFetcherImpl); | |
106 }; | |
107 | 25 |
108 } // namespace net | 26 } // namespace net |
109 | 27 |
110 #endif // NET_CERT_NET_CERT_NET_FETCHER_H_ | 28 #endif // NET_CERT_NET_CERT_NET_FETCHER_H_ |
OLD | NEW |