xref: /aosp_15_r20/external/cronet/net/cert/cert_net_fetcher.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2015 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef NET_CERT_CERT_NET_FETCHER_H_
6*6777b538SAndroid Build Coastguard Worker #define NET_CERT_CERT_NET_FETCHER_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <stdint.h>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include <memory>
11*6777b538SAndroid Build Coastguard Worker #include <vector>
12*6777b538SAndroid Build Coastguard Worker 
13*6777b538SAndroid Build Coastguard Worker #include "base/memory/ref_counted.h"
14*6777b538SAndroid Build Coastguard Worker #include "net/base/net_errors.h"
15*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h"
16*6777b538SAndroid Build Coastguard Worker 
17*6777b538SAndroid Build Coastguard Worker class GURL;
18*6777b538SAndroid Build Coastguard Worker 
19*6777b538SAndroid Build Coastguard Worker namespace net {
20*6777b538SAndroid Build Coastguard Worker 
21*6777b538SAndroid Build Coastguard Worker // CertNetFetcher is a synchronous interface for fetching AIA URLs and CRL
22*6777b538SAndroid Build Coastguard Worker // URLs. It is shared between a caller thread (which starts and waits for
23*6777b538SAndroid Build Coastguard Worker // fetches), and a network thread (which does the actual fetches). It can be
24*6777b538SAndroid Build Coastguard Worker // shutdown from the network thread to cancel outstanding requests.
25*6777b538SAndroid Build Coastguard Worker //
26*6777b538SAndroid Build Coastguard Worker // A Request object is returned when starting a fetch. The consumer can
27*6777b538SAndroid Build Coastguard Worker // use this as a handle for aborting the request (by freeing it), or reading
28*6777b538SAndroid Build Coastguard Worker // the result of the request (WaitForResult)
29*6777b538SAndroid Build Coastguard Worker class NET_EXPORT CertNetFetcher
30*6777b538SAndroid Build Coastguard Worker     : public base::RefCountedThreadSafe<CertNetFetcher> {
31*6777b538SAndroid Build Coastguard Worker  public:
32*6777b538SAndroid Build Coastguard Worker   class Request {
33*6777b538SAndroid Build Coastguard Worker    public:
34*6777b538SAndroid Build Coastguard Worker     virtual ~Request() = default;
35*6777b538SAndroid Build Coastguard Worker 
36*6777b538SAndroid Build Coastguard Worker     // WaitForResult() can be called at most once.
37*6777b538SAndroid Build Coastguard Worker     //
38*6777b538SAndroid Build Coastguard Worker     // It will block and wait for the (network) request to complete, and
39*6777b538SAndroid Build Coastguard Worker     // then write the result into the provided out-parameters.
40*6777b538SAndroid Build Coastguard Worker     virtual void WaitForResult(Error* error, std::vector<uint8_t>* bytes) = 0;
41*6777b538SAndroid Build Coastguard Worker   };
42*6777b538SAndroid Build Coastguard Worker 
43*6777b538SAndroid Build Coastguard Worker   // This value can be used in place of timeout or max size limits.
44*6777b538SAndroid Build Coastguard Worker   enum { DEFAULT = -1 };
45*6777b538SAndroid Build Coastguard Worker 
46*6777b538SAndroid Build Coastguard Worker   CertNetFetcher() = default;
47*6777b538SAndroid Build Coastguard Worker 
48*6777b538SAndroid Build Coastguard Worker   CertNetFetcher(const CertNetFetcher&) = delete;
49*6777b538SAndroid Build Coastguard Worker   CertNetFetcher& operator=(const CertNetFetcher&) = delete;
50*6777b538SAndroid Build Coastguard Worker 
51*6777b538SAndroid Build Coastguard Worker   // Shuts down the CertNetFetcher and cancels outstanding network requests. It
52*6777b538SAndroid Build Coastguard Worker   // is not guaranteed that any outstanding or subsequent
53*6777b538SAndroid Build Coastguard Worker   // Request::WaitForResult() calls will be completed. Shutdown() must be called
54*6777b538SAndroid Build Coastguard Worker   // from the network thread. It can be called more than once, but must be
55*6777b538SAndroid Build Coastguard Worker   // called before the CertNetFetcher is destroyed.
56*6777b538SAndroid Build Coastguard Worker   virtual void Shutdown() = 0;
57*6777b538SAndroid Build Coastguard Worker 
58*6777b538SAndroid Build Coastguard Worker   // The Fetch*() methods start a request which can be cancelled by
59*6777b538SAndroid Build Coastguard Worker   // deleting the returned Request. Here is the meaning of the common
60*6777b538SAndroid Build Coastguard Worker   // parameters:
61*6777b538SAndroid Build Coastguard Worker   //
62*6777b538SAndroid Build Coastguard Worker   //   * url -- The http:// URL to fetch.
63*6777b538SAndroid Build Coastguard Worker   //   * timeout_seconds -- The maximum allowed duration for the fetch job. If
64*6777b538SAndroid Build Coastguard Worker   //         this delay is exceeded then the request will fail. To use a default
65*6777b538SAndroid Build Coastguard Worker   //         timeout pass DEFAULT.
66*6777b538SAndroid Build Coastguard Worker   //   * max_response_bytes -- The maximum size of the response body. If this
67*6777b538SAndroid Build Coastguard Worker   //     size is exceeded then the request will fail. To use a default timeout
68*6777b538SAndroid Build Coastguard Worker   //     pass DEFAULT.
69*6777b538SAndroid Build Coastguard Worker 
70*6777b538SAndroid Build Coastguard Worker   [[nodiscard]] virtual std::unique_ptr<Request> FetchCaIssuers(
71*6777b538SAndroid Build Coastguard Worker       const GURL& url,
72*6777b538SAndroid Build Coastguard Worker       int timeout_milliseconds,
73*6777b538SAndroid Build Coastguard Worker       int max_response_bytes) = 0;
74*6777b538SAndroid Build Coastguard Worker 
75*6777b538SAndroid Build Coastguard Worker   [[nodiscard]] virtual std::unique_ptr<Request> FetchCrl(
76*6777b538SAndroid Build Coastguard Worker       const GURL& url,
77*6777b538SAndroid Build Coastguard Worker       int timeout_milliseconds,
78*6777b538SAndroid Build Coastguard Worker       int max_response_bytes) = 0;
79*6777b538SAndroid Build Coastguard Worker 
80*6777b538SAndroid Build Coastguard Worker   [[nodiscard]] virtual std::unique_ptr<Request> FetchOcsp(
81*6777b538SAndroid Build Coastguard Worker       const GURL& url,
82*6777b538SAndroid Build Coastguard Worker       int timeout_milliseconds,
83*6777b538SAndroid Build Coastguard Worker       int max_response_bytes) = 0;
84*6777b538SAndroid Build Coastguard Worker 
85*6777b538SAndroid Build Coastguard Worker  protected:
86*6777b538SAndroid Build Coastguard Worker   virtual ~CertNetFetcher() = default;
87*6777b538SAndroid Build Coastguard Worker 
88*6777b538SAndroid Build Coastguard Worker  private:
89*6777b538SAndroid Build Coastguard Worker   friend class base::RefCountedThreadSafe<CertNetFetcher>;
90*6777b538SAndroid Build Coastguard Worker };
91*6777b538SAndroid Build Coastguard Worker 
92*6777b538SAndroid Build Coastguard Worker }  // namespace net
93*6777b538SAndroid Build Coastguard Worker 
94*6777b538SAndroid Build Coastguard Worker #endif  // NET_CERT_CERT_NET_FETCHER_H_
95