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