xref: /aosp_15_r20/external/cronet/net/http/http_request_info.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2011 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_HTTP_HTTP_REQUEST_INFO_H__
6*6777b538SAndroid Build Coastguard Worker #define NET_HTTP_HTTP_REQUEST_INFO_H__
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <optional>
9*6777b538SAndroid Build Coastguard Worker #include <string>
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker #include "base/memory/raw_ptr.h"
12*6777b538SAndroid Build Coastguard Worker #include "net/base/idempotency.h"
13*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h"
14*6777b538SAndroid Build Coastguard Worker #include "net/base/network_anonymization_key.h"
15*6777b538SAndroid Build Coastguard Worker #include "net/base/network_isolation_key.h"
16*6777b538SAndroid Build Coastguard Worker #include "net/base/privacy_mode.h"
17*6777b538SAndroid Build Coastguard Worker #include "net/base/request_priority.h"
18*6777b538SAndroid Build Coastguard Worker #include "net/dns/public/secure_dns_policy.h"
19*6777b538SAndroid Build Coastguard Worker #include "net/http/http_request_headers.h"
20*6777b538SAndroid Build Coastguard Worker #include "net/socket/socket_tag.h"
21*6777b538SAndroid Build Coastguard Worker #include "net/traffic_annotation/network_traffic_annotation.h"
22*6777b538SAndroid Build Coastguard Worker #include "url/gurl.h"
23*6777b538SAndroid Build Coastguard Worker #include "url/origin.h"
24*6777b538SAndroid Build Coastguard Worker 
25*6777b538SAndroid Build Coastguard Worker namespace net {
26*6777b538SAndroid Build Coastguard Worker 
27*6777b538SAndroid Build Coastguard Worker class UploadDataStream;
28*6777b538SAndroid Build Coastguard Worker 
29*6777b538SAndroid Build Coastguard Worker struct NET_EXPORT HttpRequestInfo {
30*6777b538SAndroid Build Coastguard Worker   HttpRequestInfo();
31*6777b538SAndroid Build Coastguard Worker 
32*6777b538SAndroid Build Coastguard Worker   HttpRequestInfo(const HttpRequestInfo& other);
33*6777b538SAndroid Build Coastguard Worker   HttpRequestInfo& operator=(const HttpRequestInfo& other);
34*6777b538SAndroid Build Coastguard Worker   HttpRequestInfo(HttpRequestInfo&& other);
35*6777b538SAndroid Build Coastguard Worker   HttpRequestInfo& operator=(HttpRequestInfo&& other);
36*6777b538SAndroid Build Coastguard Worker 
37*6777b538SAndroid Build Coastguard Worker   ~HttpRequestInfo();
38*6777b538SAndroid Build Coastguard Worker 
39*6777b538SAndroid Build Coastguard Worker   bool IsConsistent() const;
40*6777b538SAndroid Build Coastguard Worker 
41*6777b538SAndroid Build Coastguard Worker   // The requested URL.
42*6777b538SAndroid Build Coastguard Worker   GURL url;
43*6777b538SAndroid Build Coastguard Worker 
44*6777b538SAndroid Build Coastguard Worker   // The method to use (GET, POST, etc.).
45*6777b538SAndroid Build Coastguard Worker   std::string method;
46*6777b538SAndroid Build Coastguard Worker 
47*6777b538SAndroid Build Coastguard Worker   // This key is used to isolate requests from different contexts in accessing
48*6777b538SAndroid Build Coastguard Worker   // shared cache.
49*6777b538SAndroid Build Coastguard Worker   NetworkIsolationKey network_isolation_key;
50*6777b538SAndroid Build Coastguard Worker 
51*6777b538SAndroid Build Coastguard Worker   // This key is used to isolate requests from different contexts in accessing
52*6777b538SAndroid Build Coastguard Worker   // shared network resources.
53*6777b538SAndroid Build Coastguard Worker   NetworkAnonymizationKey network_anonymization_key;
54*6777b538SAndroid Build Coastguard Worker 
55*6777b538SAndroid Build Coastguard Worker   // True if it is a subframe's document resource.
56*6777b538SAndroid Build Coastguard Worker   bool is_subframe_document_resource = false;
57*6777b538SAndroid Build Coastguard Worker 
58*6777b538SAndroid Build Coastguard Worker   // Any extra request headers (including User-Agent).
59*6777b538SAndroid Build Coastguard Worker   HttpRequestHeaders extra_headers;
60*6777b538SAndroid Build Coastguard Worker 
61*6777b538SAndroid Build Coastguard Worker   // Any upload data.
62*6777b538SAndroid Build Coastguard Worker   raw_ptr<UploadDataStream> upload_data_stream = nullptr;
63*6777b538SAndroid Build Coastguard Worker 
64*6777b538SAndroid Build Coastguard Worker   // Any load flags (see load_flags.h).
65*6777b538SAndroid Build Coastguard Worker   int load_flags = 0;
66*6777b538SAndroid Build Coastguard Worker 
67*6777b538SAndroid Build Coastguard Worker   // Flag that indicates if the request should be loaded concurrently with
68*6777b538SAndroid Build Coastguard Worker   // other requests of the same priority when using a protocol that supports
69*6777b538SAndroid Build Coastguard Worker   // HTTP extensible priorities (RFC 9218). Currently only HTTP/3.
70*6777b538SAndroid Build Coastguard Worker   bool priority_incremental = kDefaultPriorityIncremental;
71*6777b538SAndroid Build Coastguard Worker 
72*6777b538SAndroid Build Coastguard Worker   // If enabled, then request must be sent over connection that cannot be
73*6777b538SAndroid Build Coastguard Worker   // tracked by the server (e.g. without channel id).
74*6777b538SAndroid Build Coastguard Worker   PrivacyMode privacy_mode = PRIVACY_MODE_DISABLED;
75*6777b538SAndroid Build Coastguard Worker 
76*6777b538SAndroid Build Coastguard Worker   // Secure DNS Tag for the request.
77*6777b538SAndroid Build Coastguard Worker   SecureDnsPolicy secure_dns_policy = SecureDnsPolicy::kAllow;
78*6777b538SAndroid Build Coastguard Worker 
79*6777b538SAndroid Build Coastguard Worker   // Tag applied to all sockets used to service request.
80*6777b538SAndroid Build Coastguard Worker   SocketTag socket_tag;
81*6777b538SAndroid Build Coastguard Worker 
82*6777b538SAndroid Build Coastguard Worker   // Network traffic annotation received from URL request.
83*6777b538SAndroid Build Coastguard Worker   net::MutableNetworkTrafficAnnotationTag traffic_annotation;
84*6777b538SAndroid Build Coastguard Worker 
85*6777b538SAndroid Build Coastguard Worker   // Reporting upload nesting depth of this request.
86*6777b538SAndroid Build Coastguard Worker   //
87*6777b538SAndroid Build Coastguard Worker   // If the request is not a Reporting upload, the depth is 0.
88*6777b538SAndroid Build Coastguard Worker   //
89*6777b538SAndroid Build Coastguard Worker   // If the request is a Reporting upload, the depth is the max of the depth
90*6777b538SAndroid Build Coastguard Worker   // of the requests reported within it plus 1.
91*6777b538SAndroid Build Coastguard Worker   int reporting_upload_depth = 0;
92*6777b538SAndroid Build Coastguard Worker 
93*6777b538SAndroid Build Coastguard Worker   // This may the top frame origin associated with a request, or it may be the
94*6777b538SAndroid Build Coastguard Worker   // top frame site.  Or it may be nullptr.  Only used for histograms.
95*6777b538SAndroid Build Coastguard Worker   //
96*6777b538SAndroid Build Coastguard Worker   // TODO(https://crbug.com/1136054): Investigate migrating the one consumer of
97*6777b538SAndroid Build Coastguard Worker   // this to NetworkIsolationKey::TopFrameSite().  That gives more consistent
98*6777b538SAndroid Build Coastguard Worker   /// behavior, and may still provide useful metrics.
99*6777b538SAndroid Build Coastguard Worker   std::optional<url::Origin> possibly_top_frame_origin;
100*6777b538SAndroid Build Coastguard Worker 
101*6777b538SAndroid Build Coastguard Worker   // The frame origin associated with a request. This is used to isolate shared
102*6777b538SAndroid Build Coastguard Worker   // dictionaries between different frame origins.
103*6777b538SAndroid Build Coastguard Worker   std::optional<url::Origin> frame_origin;
104*6777b538SAndroid Build Coastguard Worker 
105*6777b538SAndroid Build Coastguard Worker   // Idempotency of the request, which determines that if it is safe to enable
106*6777b538SAndroid Build Coastguard Worker   // 0-RTT for the request. By default, 0-RTT is only enabled for safe
107*6777b538SAndroid Build Coastguard Worker   // HTTP methods, i.e., GET, HEAD, OPTIONS, and TRACE. For other methods,
108*6777b538SAndroid Build Coastguard Worker   // enabling 0-RTT may cause security issues since a network observer can
109*6777b538SAndroid Build Coastguard Worker   // replay the request. If the request has any side effects, those effects can
110*6777b538SAndroid Build Coastguard Worker   // happen multiple times. It is only safe to enable the 0-RTT if it is known
111*6777b538SAndroid Build Coastguard Worker   // that the request is idempotent.
112*6777b538SAndroid Build Coastguard Worker   net::Idempotency idempotency = net::DEFAULT_IDEMPOTENCY;
113*6777b538SAndroid Build Coastguard Worker 
114*6777b538SAndroid Build Coastguard Worker   // If not null, the value is used to evaluate whether the cache entry should
115*6777b538SAndroid Build Coastguard Worker   // be bypassed; if is null, that means the request site does not match the
116*6777b538SAndroid Build Coastguard Worker   // filter.
117*6777b538SAndroid Build Coastguard Worker   std::optional<int64_t> fps_cache_filter;
118*6777b538SAndroid Build Coastguard Worker 
119*6777b538SAndroid Build Coastguard Worker   // Use as ID to mark the cache entry when persisting. Should be a positive
120*6777b538SAndroid Build Coastguard Worker   // number once set.
121*6777b538SAndroid Build Coastguard Worker   std::optional<int64_t> browser_run_id;
122*6777b538SAndroid Build Coastguard Worker };
123*6777b538SAndroid Build Coastguard Worker 
124*6777b538SAndroid Build Coastguard Worker }  // namespace net
125*6777b538SAndroid Build Coastguard Worker 
126*6777b538SAndroid Build Coastguard Worker #endif  // NET_HTTP_HTTP_REQUEST_INFO_H__
127