| // Copyright 2016 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| module network.mojom; |
| |
| import "mojo/public/mojom/base/big_buffer.mojom"; |
| import "mojo/public/mojom/base/file_path.mojom"; |
| import "mojo/public/mojom/base/time.mojom"; |
| import "mojo/public/mojom/base/unguessable_token.mojom"; |
| import "services/network/public/mojom/accept_ch_frame_observer.mojom"; |
| import "services/network/public/mojom/attribution.mojom"; |
| import "services/network/public/mojom/chunked_data_pipe_getter.mojom"; |
| import "services/network/public/mojom/client_security_state.mojom"; |
| import "services/network/public/mojom/cookie_access_observer.mojom"; |
| import "services/network/public/mojom/cookie_manager.mojom"; |
| import "services/network/public/mojom/cors.mojom"; |
| import "services/network/public/mojom/data_pipe_getter.mojom"; |
| import "services/network/public/mojom/device_bound_sessions.mojom"; |
| import "services/network/public/mojom/devtools_observer.mojom"; |
| import "services/network/public/mojom/fetch_api.mojom"; |
| import "services/network/public/mojom/fetch_retry_options.mojom"; |
| import "services/network/public/mojom/http_raw_headers.mojom"; |
| import "services/network/public/mojom/http_request_headers.mojom"; |
| import "services/network/public/mojom/ip_address_space.mojom"; |
| import "services/network/public/mojom/isolation_info.mojom"; |
| import "services/network/public/mojom/network_param.mojom"; |
| import "services/network/public/mojom/permissions_policy/permissions_policy.mojom"; |
| import "services/network/public/mojom/referrer_policy.mojom"; |
| import "services/network/public/mojom/request_priority.mojom"; |
| import "services/network/public/mojom/shared_dictionary_access_observer.mojom"; |
| import "services/network/public/mojom/site_for_cookies.mojom"; |
| import "services/network/public/mojom/source_type.mojom"; |
| import "services/network/public/mojom/storage_access_api.mojom"; |
| import "services/network/public/mojom/trust_token_access_observer.mojom"; |
| import "services/network/public/mojom/trust_tokens.mojom"; |
| import "services/network/public/mojom/url_loader_network_service_observer.mojom"; |
| import "services/network/public/mojom/url_response_head.mojom"; |
| import "services/network/public/mojom/web_bundle_handle.mojom"; |
| import "services/network/public/mojom/web_client_hints_types.mojom"; |
| import "url/mojom/origin.mojom"; |
| import "url/mojom/url.mojom"; |
| |
| // Caches enabled client hints to allow handling `ACCEPT_CH` frames in the |
| // network service, avoiding an IPC to the browser process. |
| // This should be used only in TrustedUrlRequestParams so that only |
| // trustworthy clients can pass it. |
| struct EnabledClientHints { |
| // The origin for which the client hints are enabled. |
| url.mojom.Origin origin; |
| |
| // Whether this is for an outermost main frame. |
| bool is_outermost_main_frame; |
| |
| // The set of client hints that are enabled for the origin and currently |
| // allowed to be attached to the request (e.g., by Feature Policy). |
| array<WebClientHintsType> hints; |
| |
| // The set of client hints that are persisted for the origin but are |
| // currently not allowed to be attached to the request (e.g., blocked by |
| // Feature Policy). This is used in the network service to avoid an |
| // unnecessary IPC to the browser process when an ACCEPT_CH frame contains |
| // such hints. |
| array<WebClientHintsType> not_allowed_hints; |
| }; |
| |
| // See documentation at `URLRequest.trusted_params`. |
| // |
| // For values that have a corresponding value in URLLoaderFactoryParams |
| // (e.g., `isolation_info`, `client_security_state`, and `disable_secure_dns`), |
| // the values in the TrustedParams are preferred, if set, unless stated |
| // otherwise. `isolation_info` cannot be null, so it always takes precedence |
| // when TrustedUrlRequestParams are provided. |
| // |
| // TODO(https://crbug.com/409959475): Make `isolation_info` and |
| // `disable_secure_dns` optional, and take precedence over the corresponding |
| // URLLoaderFactoryParams value when set, so they behave consistently. |
| struct TrustedUrlRequestParams { |
| // If non-empty, this value will be used to set the SiteForCookies and |
| // NetworkIsolationKey used by the network request. |
| IsolationInfo isolation_info; |
| |
| // Whether secure DNS should be disabled for the request. The effective value |
| // for the request is the logical or of this field and the corresponding |
| // values in URLLoaderFactoryParams. |
| bool disable_secure_dns; |
| |
| // Whether a navigation is triggered with a user gesture. |
| // Always true for navigations except the one triggered from a document |
| // without user gesture. Used to determine the `Sec-Fetch-User` header. |
| bool has_user_activation; |
| |
| // Requests received from the trusted URLLoaderFactory may contain cookies |
| // which are overridden in the network stack. |
| // |
| // If this is set to true, the Cookie headers in ResourceRequest::headers and |
| // ResourceRequest::cors_exempt_headers, if present, are added to the request |
| // after the network stack has set its cookies, which prevents them from being |
| // overridden. Such a cookie will not be added if the request already contains |
| // a cookie with an identical name. |
| // |
| // Cookies added through this method are removed on redirects (including same- |
| // origin redirects) to ensure sensitive data is only sent to appropriate |
| // sites. If needed, the caller can add the cookies back in the call to |
| // FollowRedirect(). |
| bool allow_cookies_from_browser; |
| |
| // Specifies that the response head should include request cookies which were |
| // sent, including cookies added by the browser. Clients which set this flag |
| // should take care to remove them if they forward the response head to a |
| // client which should not be able to see them. |
| bool include_request_cookies_with_response = false; |
| |
| // Enabled Client Hints to be evaluated quickly within the network layer |
| // when it receives the AcceptCHFrame. |
| EnabledClientHints? enabled_client_hints; |
| |
| // Observer which should be notified when this URLRequest reads or writes |
| // a cookie. If this is set to non-null, the observer passed to |
| // URLLoaderFactory will be ignored. |
| pending_remote<CookieAccessObserver>? cookie_observer; |
| |
| // Observer which should be notified when this URLRequest accesses a Trust |
| // Token. If this is set to non-null, the observer passed to |
| // URLLoaderFactory will be ignored. |
| pending_remote<TrustTokenAccessObserver>? trust_token_observer; |
| |
| // Observer which should be notified when this URLRequest has authentication |
| // and certificate events. If this is set to non-null, the observer passed to |
| // URLLoaderFactory will be ignored. |
| pending_remote<URLLoaderNetworkServiceObserver>? url_loader_network_observer; |
| |
| pending_remote<DevToolsObserver>? devtools_observer; |
| |
| // Observer which should be notified when this URLRequest leads to an |
| // access of a device bound session. This include registration or |
| // deferral. If this is set to non-null, the observer passed in |
| // URLLoaderFactoryParams will be ignored. |
| pending_remote<DeviceBoundSessionAccessObserver>? |
| device_bound_session_observer; |
| |
| // Specifies the security state of the client, for cases when the |
| // URLLoaderFactory is shared among multiple clients. |
| // |
| // This field is only used if no ClientSecurityState was specified in the |
| // URLLoaderFactoryParams passed to the factory. Otherwise, the value from |
| // the factory params is used unconditionally. |
| ClientSecurityState? client_security_state; |
| |
| // An observer that should be notified when an ACCEPT_CH H2/3 frame is |
| // received. Can be null to signify that the requestor is not interested in |
| // ACCEPT_CH frames. |
| pending_remote<AcceptCHFrameObserver>? accept_ch_frame_observer; |
| |
| // Observer which should be notified when this URLRequest accesses a shared |
| // dictionary. If this is set to non-null, the observer passed to |
| // URLLoaderFactory will be ignored. |
| pending_remote<SharedDictionaryAccessObserver>? shared_dictionary_observer; |
| }; |
| |
| // Options that may only be set on URLRequests which are related to WebBundle. |
| struct WebBundleTokenParams { |
| // The URL of the WebBundle. |
| url.mojom.Url bundle_url; |
| // Unique token to identify a WebBundle. |
| mojo_base.mojom.UnguessableToken token; |
| // Handle for the WebBundle-related communication between the network process |
| // and the renderer. This is also used as a 'keep-alive' handle. We clean up |
| // the WebBundle data in the network process when the renderer-side endpoint |
| // is deleted. |
| pending_remote<WebBundleHandle>? web_bundle_handle; |
| // Renderer process ID of the request initiator frame. Set by the browser |
| // process, for subframe navigation requests to bundled resources. Not used |
| // for subresource requests sent by renderer processes. |
| int32 render_process_id; |
| }; |
| |
| // Typemapped to network::ResourceRequest. |
| struct URLRequest { |
| // The request method: GET, POST, etc. |
| string method; |
| |
| // The absolute requested URL encoded in ASCII per the rules of RFC-2396. |
| url.mojom.Url url; |
| |
| // Represents the first-party for the request, which may be checked by |
| // the third-party cookie blocking policy or by some cookies. Leaving it empty |
| // may lead to undesired cookie blocking. Third-party cookie blocking can be |
| // bypassed by setting site_for_cookies = SiteForCookies::FromUrl(url), but |
| // this should only be done if the fetch can be reasonably said to be done by |
| // the same principal as what |url| represents. |
| // |
| // Currently if a renderer is compromised an attacker could alter the |
| // SiteForCookies. This would allow the renderer to send cookies to a |
| // third-party context when it otherwise wouldn't be able to. |
| // https://crbug.com/1060631 will move the SFC computation into the browser |
| // process to prevent this. |
| // TODO(crbug.com/40122112): Remove this message after the fix is |
| // landed. |
| SiteForCookies site_for_cookies; |
| |
| // First-party URL redirect policy: During server redirects, the first-party |
| // URL for cookies normally doesn't change. However, if this is true, the |
| // the first-party URL should be updated to the URL on every redirect. |
| bool update_first_party_url_on_redirect; |
| |
| // |request_initiator| indicates the origin initiating the resource request. |
| // |
| // For all requests initiated via web (both subresource requests and |
| // navigations), |request_initiator| should always be set to the origin of |
| // the frame (or worker) that has initiated the request. This is true even |
| // if the request might have been initiated by an isolated world (e.g. from a |
| // content script of an extension, with its own, separate origin). This |
| // needs to be true even if the request might be "proxied" in the browser |
| // process on behalf of a web origin (e.g. as is the case for PaymentRequest |
| // API). In that sense, it is equivalent to the Fetch Standard's request |
| // origin concept [1]. |
| // |
| // [1]: https://fetch.spec.whatwg.org/#concept-request-origin |
| // |
| // |request_initiator| should be omitted (i.e. set to std::nullopt) for |
| // browser-initiated requests (e.g. navigations initiated via omnibox or |
| // bookmarks, internal subresource requests like fetching the SafeBrowsing |
| // data, etc.). Various security features may treat browser-initiated |
| // requests in a special way - for example in such requests 1) the special |
| // `Sec-Fetch-Site: none` request header is sent, 2) http responses are not |
| // blocked based on their Cross-Origin-Resource-Policy header, etc. |
| // |
| // SECURITY NOTE: Factories with |process_id| set to |kBrowserProcessId| do |
| // not enforce |request_initiator_origin_lock| and instead rely on the |
| // factory user to ensure that a valid, non-nullopt |request_initiator| is |
| // provided. Failure to provide a correct, verified |request_initiator| may |
| // lead to bypasses of CORS, ORB, SameSite cookies and other HTTP security |
| // features. An untrustworthy process (e.g. a renderer or a utility process) |
| // should not be able to trigger or influence requests with a std::nullopt |
| // |request_initiator|). |
| // |
| // See also: |
| // - |isolated_world_origin| |
| // - URLLoaderFactoryParams::request_initiator_origin_lock |
| url.mojom.Origin? request_initiator; |
| |
| // The chain of URLs seen during navigation redirects. This should only |
| // contain values if the mode is `RedirectMode::kNavigate`. This list |
| // will contain the initial network request URL, but not URLs from previous |
| // state in the DOM. For example, if a frame has URL A and sets its location |
| // to URL B, then the redirect chain will begin with URL B. The chain also |
| // includes the current request URL, however, it will not reflect any changes |
| // made by throttles. |
| array<url.mojom.Url> navigation_redirect_chain; |
| |
| // If this is a subresource request initiated from an isolated world (e.g. |
| // from a content script of a Chrome Extension), then |
| // |isolated_world_origin| indicates the origin of the isolated world. |
| // Otherwise, |isolated_world_origin| is null. |
| // |
| // Example #1: XHR initiated from a content script of chrome-extension://foo |
| // that was injected into a https://example.com web frame: |
| // - |request_initiator| is "https://example.com" |
| // - |isolated_world_origin| is "chrome-extension://foo" |
| // |
| // Example #2: XHR initiated from a Chrome Extension frame (e.g. from an |
| // extension background page): |
| // - |request_initiator| is "chrome-extension://foo" |
| // - |isolated_world_origin| is null (this request is not associated with an |
| // isolated world) |
| // |
| // |isolated_world_origin| is consulted by OOR-CORS, to determine if this |
| // request might need to be exempt from CORS, based on OriginAccessList. |
| // |
| // TODO(lukasza): https://crbug.com/936310: Attempt to remove |
| // |isolated_world_origin| after removing the global/per-NetworkContext |
| // OriginAccessList and replacing it with per-URLLoaderFactory |
| // OriginAccessList. |
| url.mojom.Origin? isolated_world_origin; |
| |
| // The referrer to use (may be empty). |
| url.mojom.Url referrer; |
| |
| // The referrer policy to use. |
| URLRequestReferrerPolicy referrer_policy; |
| |
| // Additional HTTP request headers. |
| HttpRequestHeaders headers; |
| |
| // HTTP request headers that has been internally added. Some consumers want to |
| // set additional HTTP headers, but such internal headers must be ignored by |
| // CORS check (which run inside Network Service), so the values are stored |
| // here (rather than in |headers|) and later merged into the |headers| after |
| // CORS check. If this request is sent to the network service, the header |
| // names stored in this member should be declared in |
| // NetworkContextParams::cors_exempt_header_list for the NetworkContext. |
| // Otherwise, the request will fail. |
| // |
| // *Warning*: Adding new headers to this list is strongly discouraged and |
| // should only be done for non-standard headers used for legacy reasons. What |
| // usually you need is to update the fetch spec, and add your custom headers |
| // to the CORS-safelisted header so to pass proper CORS checks. 'Proxy-' or |
| // 'Sec-' prefixes are also available. See cors::IsCORSSafelistedHeader and |
| // cors::IsForbiddenHeader for details, and Loading and CORS OWNERS when you |
| // need to add your own headers to the list. |
| HttpRequestHeaders cors_exempt_headers; // See Note above before using. |
| |
| // net::URLRequest load flags. |
| int32 load_flags; |
| |
| // What this resource load is for (main frame, sub-frame, sub-resource, |
| // object). |
| // Note: this is an enum of type blink::mojom::ResourceType. |
| // TODO(crbug.com/40121693): remove this in favor of `destination`. |
| int32 resource_type; |
| |
| // The priority of this request determined by Blink. |
| RequestPriority priority; |
| |
| // True if the request can be downloaded in parallel with other requests of |
| // an equivalent priority for servers that support HTTP Extensible |
| // Prioritization on multiplexed connections (RFC 9218). |
| // Maps directly to the "incremental" parameter of priority. |
| // https://www.rfc-editor.org/rfc/rfc9218.html#name-incremental |
| bool priority_incremental; |
| |
| // A policy to decide if CORS-preflight fetch should be performed. |
| CorsPreflightPolicy cors_preflight_policy; |
| |
| // True if the request originated from a Service Worker, e.g. due to a |
| // fetch() in the Service Worker script. |
| bool originated_from_service_worker; |
| |
| // The service worker mode that indicates which service workers should get |
| // events for this request. |
| // TODO(jam): remove this from the struct since network service shouldn't know |
| // about this. |
| bool skip_service_worker; |
| |
| // https://fetch.spec.whatwg.org/#concept-request-mode |
| // Used mainly by CORS handling (out-of-blink CORS), ORB, Service Worker. |
| // CORS handling needs a proper origin (including a unique opaque origin). |
| // Hence a request with kSameOrigin, kCors, or kCorsWithForcedPreflight should |
| // have a non-null request_initiator. |
| RequestMode mode; |
| |
| // https://fetch.spec.whatwg.org/#concept-request-credentials-mode |
| // Controls whether credentials are attached to this request. |
| // |kSameOrigin| credentials mode requires a non-null |request_initiator|. |
| // When |mode| is |kNavigate|, this needs to be |kInclude|. |
| CredentialsMode credentials_mode; |
| |
| // https://fetch.spec.whatwg.org/#concept-request-redirect-mode |
| // Used mainly by CORS handling (out-of-blink CORS), Service Worker. |
| // This member must be kFollow as long as |mode| is kNoCors. |
| RedirectMode redirect_mode; |
| |
| // Exposed as Request.integrity in Service Workers |
| string fetch_integrity; |
| |
| // The set of public keys asserted in `fetch_integrity`, which will be used |
| // to populate an `Accept-Signatures` header. |
| // |
| // https://www.rfc-editor.org/rfc/rfc9421.html#name-the-accept-signature-field |
| array<array<uint8>> expected_public_keys; |
| |
| // https://fetch.spec.whatwg.org/#concept-request-destination |
| RequestDestination destination; |
| |
| // Optional resource request body. |
| URLRequestBody? request_body; |
| |
| // True if the request can work after the fetch group is terminated. |
| // https://fetch.spec.whatwg.org/#request-keepalive-flag |
| bool keepalive; |
| |
| // True if the request should try to calculate and send the |
| // `Sec-Browsing-Topics` headers. |
| // https://github.com/patcg-individual-drafts/topics |
| bool browsing_topics; |
| |
| // True if this is an ad auction request eligible for attaching the |
| // `Sec-Ad-Auction-Fetch` request header and processing the |
| // `X-Ad-Auction-Result` response header. |
| // https://github.com/WICG/turtledove/blob/main/FLEDGE_browser_bidding_and_auction_API.md#step-3-get-response-blobs-to-browser |
| bool ad_auction_headers; |
| |
| // True if the request should send the `Sec-Shared-Storage-Writable` request |
| // header. |
| bool shared_storage_writable_eligible; |
| |
| // True if the request was user initiated. |
| bool has_user_gesture; |
| |
| // TODO(mmenke): Investigate if enable_load_timing is safe to remove. |
| // |
| // True if load timing data should be collected for request. |
| bool enable_load_timing; |
| |
| // True if upload progress should be available for request. |
| bool enable_upload_progress; |
| |
| // True if login prompts for this request should be suppressed. Cached |
| // credentials or default credentials may still be used for authentication. |
| bool do_not_prompt_for_login; |
| |
| // True if |frame_id| is the outermost main frame of a page. |
| bool is_outermost_main_frame; |
| |
| // Note: this is an enum of type ui::PageTransition. |
| // TODO(jam): remove this from the struct since network service shouldn't know |
| // about this. |
| int32 transition_type; |
| |
| // Whether or not to request a Preview version of the resource or let the |
| // browser decide. |
| // Note: this is an enum of type PreviewsState. |
| // TODO(jam): remove this from the struct since network service shouldn't know |
| // about this. |
| int32 previews_state; |
| |
| // Whether or not this request (including redirects) should be upgraded to |
| // HTTPS due to an Upgrade-Insecure-Requests requirement. |
| bool upgrade_if_insecure; |
| |
| // True when the request is revalidating. |
| // Some users, notably blink, has its own cache. This flag is set to exempt |
| // some CORS logic for a revalidating request. |
| bool is_revalidating; |
| |
| // The profile ID of network conditions to throttle the network request. |
| mojo_base.mojom.UnguessableToken? throttling_profile_id; |
| |
| // See https://fetch.spec.whatwg.org/#concept-request-window |
| // |
| // This is an opaque id of the original requestor of the resource, which might |
| // be different to the current requestor which is |render_frame_id|. For |
| // example, if a navigation for window "abc" is intercepted by a service |
| // worker, which re-issues the request via fetch, the re-issued request has |
| // |render_frame_id| of IPC::mojom::kRoutingIdNone (the service worker) and |
| // |window_id| of "abc". This is used for, e.g., client certificate selection. |
| // It's important that this id be unguessable so renderers cannot impersonate |
| // other renderers. |
| // |
| // This may be empty when the original requestor is the current requestor or |
| // is not a window. When it's empty, use |render_frame_id| instead. In |
| // practical terms, it's empty for requests that didn't go through a service |
| // worker, or if the original requestor is not a window. When the request |
| // goes through a service worker, the id is |
| // ServiceWorkerContainerHost::fetch_request_window_id. |
| mojo_base.mojom.UnguessableToken? fetch_window_id; |
| |
| // The ID that DevTools uses to track network requests. It is generated in the |
| // renderer process and is only present when DevTools is enabled in the |
| // renderer. |
| string? devtools_request_id; |
| |
| // A V8 stack id string describing where the request was initiated. DevTools |
| // can use this to display the initiator call stack when debugging a process |
| // that later intercepts the request, e.g., in a service worker fetch event |
| // handler. |
| string? devtools_stack_id; |
| |
| // True for XHR, Fetch, and EventSource. |
| bool is_fetch_like_api; |
| |
| // True for FetchLater. |
| // https://whatpr.org/fetch/1647/094ea69...152d725.html#fetch-later-method |
| bool is_fetch_later_api; |
| |
| // True for favicon. |
| bool is_favicon; |
| |
| // The original destination of a request that was passed through by a service |
| // worker. |
| RequestDestination original_destination; |
| |
| // Params intended to be set by a trusted requestor which sends the request |
| // to a trusted URLLoaderFactory. Note that the main implementation of |
| // URLLoaderFactory is the one created in the network service via |
| // NetworkContext.CreateURLLoaderFactory(), and the trusted concept is |
| // specified for that one, and is not specified for implementations outside |
| // the network service. In more detail: |
| // * The parameters are intended to be used and consumed in the network |
| // service only when the request is sent to a trusted URLLoaderFactory. |
| // * Whether a URLLoaderFactory in the network service is trusted or not is |
| // determined when it is created by calling |
| // `NetworkContext.CreateURLLoaderFactory`. The caller (i.e., the browser |
| // process) is expected to set `URLLoaderFactoryParams.is_trusted` to true |
| // when it wants to create a trusted URLLoaderFactory. |
| // * Note that NetworkContext should never be exposed to a process other than |
| // the one that created the network service, i.e., the browser process |
| // (other than in tests). |
| // * The trusted process (i.e., the browser process) is responsible for |
| // setting the `is_trusted` flag to true only for the URLLoaderFactories |
| // used exclusively by the trusted process. |
| // * In the network service, CorsUrlLoaderFactory is the C++ implementation |
| // that is created by CreateURLLoaderFactory, and therefore it has a |
| // trusted bit which is true when it's the instance used by the browser |
| // process to make requests. |
| // * CorsUrlLoaderFactory instances without the trusted bit set fail requests |
| // with `trusted_params` set. |
| // * URLLoaderFactory implementations outside the network service should |
| // generally not use `trusted_params`, unless it is guaranteed that the |
| // requestor can be trusted to set this security-sensitive information. |
| // Typically this means that the requestor is the browser process or lives |
| // in the same process as the factory. |
| TrustedUrlRequestParams? trusted_params; |
| |
| // Set for recursive prefetch requests originating from cross-origin |
| // prefetches. These requests take the form of `Link: rel=preload` HTTP |
| // response headers. For more information on these requests see |
| // https://github.com/w3c/resource-hints/issues/77. |
| mojo_base.mojom.UnguessableToken? recursive_prefetch_token; |
| |
| // Set when Trust Tokens (https://github.com/wicg/trust-token-api) is enabled |
| // and the request has set the trustToken Fetch parameter, denoting that it |
| // wishes to execute a Trust Tokens protocol operation. |
| TrustTokenParams? trust_token_params; |
| |
| // Set for WebBundle related requests. See the comment of WebBundleTokenParams |
| // for details. |
| WebBundleTokenParams? web_bundle_token_params; |
| |
| // If not null, the network service will not advertise any stream types |
| // (via Accept-Encoding) that are not listed. Also, it will not attempt |
| // decoding any non-listed stream types. |
| array<SourceType>? devtools_accepted_stream_types; |
| |
| // This field is filled and used when network service creates a new request |
| // for preflights (which happens in CorsURLLoader) and OHTTP requests (which |
| // happens in ObliviousHttpRequestHandler). This field should only be set |
| // within the network service and requires either |
| // `URLLoaderFactoryParams.is_trusted` or |
| // `URLLoaderFactoryParams.disable_web_security`. Setting this field by the |
| // process outside the network service is currently not expected and is |
| // invalid. |
| // If set, it contains NetLog related parameters to construct a NetLogSource |
| // for the request. If not set, URLRequest constructs a NetLogSource with |
| // default parameters. |
| NetLogSource? net_log_create_info; |
| |
| // This field is filled and used within network service. Setting this field |
| // by the process outside the network service is currently not expected and |
| // is invalid. |
| // If set, it contains NetLog related parameters to identify the initiator |
| // of the request in NetLog. |
| NetLogSource? net_log_reference_info; |
| |
| // The target address space to which a given fetch operation is expected to |
| // connect. See more: |
| // https://wicg.github.io/private-network-access/#permission-prompt. |
| // If the actual address space and the expected address space don't match, a |
| // network error will be returned. |
| network.mojom.IPAddressSpace required_ip_address_space; |
| |
| // True if the request is eligible for using Storage Access API grant (if |
| // one exists). This is secure since the renderer cannot forge a new storage |
| // access permission grant, so the renderer would not be able to gain access |
| // to unpartitioned cookies without also compromising the browser process or |
| // the network service. If permission has already been granted, then the |
| // compromised renderer would be able to access unpartitioned cookies. But by |
| // assumption, the browser process has already determined that this access is |
| // ok. |
| StorageAccessApiStatus storage_access_api_status; |
| |
| // Indicates whether web or OS-level Attribution Reporting is supported. |
| AttributionSupport attribution_reporting_support; |
| |
| // Indicates the value of the request's `Attribution-Reporting-Eligible` |
| // header; how this header is interpreted depends on the context in which |
| // the request is made. |
| AttributionReportingEligibility attribution_reporting_eligibility = |
| AttributionReportingEligibility.kUnset; |
| |
| // When applicable, indicates the token of an Attribution Reporting API |
| // eligible navigation request to which the current request is associated. |
| mojo_base.mojom.UnguessableToken? attribution_reporting_src_token; |
| |
| // When applicable, i.e. `keepalive` is true, indicates a fetch keepalive |
| // request. |
| // Used in UKM logging to identify the lifetime of a fetch keepalive request. |
| // TODO(crbug.com/382527001): Consider merge this field with `keepalive`. |
| mojo_base.mojom.UnguessableToken? keepalive_token; |
| |
| // Indicates whether this request has been determined to be used for |
| // advertising purposes. |
| bool is_ad_tagged = false; |
| |
| // Indicate the state of CompressionDictionaryTransport feature. When it is |
| // true, `use-as-dictionary` response HTTP header may be processed. |
| // TODO(crbug.com/40255884): Remove this flag when we launch |
| // CompressionDictionaryTransport feature. |
| bool shared_dictionary_writer_enabled = false; |
| |
| // If true, disables content decoding (e.g., gzip, brotli) within the network |
| // service for this request. The client becomes responsible for decoding the |
| // response body and setting `decoded_body_length` of |
| // `URLLoaderCompletionStatus`. |
| bool client_side_content_decoding_enabled = false; |
| |
| // The socket tag to associate this request with. This is typically set by the |
| // embedder. |
| SocketTag socket_tag; |
| |
| // Whether this request is allowed to register new device bound |
| // sessions or process challenges for existing device bound sessions |
| // (e.g. due to an Origin Trial). |
| bool allows_device_bound_session_registration; |
| |
| // Permissions Policy of the request. |
| // If it's nullopt then the request's initiator didn't set the permissions |
| // policy. Example: https://crrev.com/c/6295903 |
| network.mojom.PermissionsPolicy? permissions_policy; |
| |
| // The policies to be used when retrying a fetch. Will only be set on fetch |
| // requests who specified its RetryOptions. |
| network.mojom.FetchRetryOptions? fetch_retry_options; |
| }; |
| |
| // URLRequestBody represents body (i.e. upload data) of a HTTP request. |
| // Typemapped to network::ResourceRequestBody |
| struct URLRequestBody { |
| // The body contents. DataElementChunkedDataPipe can be used in `elements` |
| // only if `elements` consists of one element. |
| array<DataElement> elements; |
| |
| // Identifies a particular upload instance, which is used by the cache to |
| // formulate a cache key. |
| uint64 identifier; |
| |
| // Indicates whether the post data contains sensitive information like |
| // passwords. |
| bool contains_sensitive_info; |
| |
| // Indicates whether fetch upload streaming is allowed/rejected over H/1. |
| // Even if this is false but there is a QUIC/H2 stream, the upload is allowed. |
| bool allow_http1_for_streaming_upload; |
| }; |
| |
| // Represents part of an upload body consisting of bytes. |
| struct DataElementBytes { |
| mojo_base.mojom.BigBuffer data; |
| }; |
| |
| // Represents part of an upload body consisting of (part of) a file. |
| struct DataElementFile { |
| mojo_base.mojom.FilePath path; |
| uint64 offset; |
| uint64 length; |
| mojo_base.mojom.Time expected_modification_time; |
| }; |
| |
| // Represents part of an upload body consisting of a data pipe with a known |
| // size. |
| struct DataElementDataPipe { |
| pending_remote<network.mojom.DataPipeGetter> data_pipe_getter; |
| }; |
| |
| // Represents part of an upload body consisting of a data pipe without a known |
| // size. |
| struct DataElementChunkedDataPipe { |
| pending_remote<network.mojom.ChunkedDataPipeGetter> data_pipe_getter; |
| // When true, a data pipe can be gotten from `chunked_data_pipe_getter` only |
| // once. |
| bool read_only_once; |
| }; |
| |
| // Represents part of an upload body. |
| union DataElement { |
| DataElementBytes bytes; |
| DataElementFile file; |
| DataElementDataPipe data_pipe; |
| DataElementChunkedDataPipe chunked_data_pipe; |
| }; |
| |
| // Typemapped to net::SocketTag. |
| struct SocketTag { |
| [EnableIf=is_android] |
| uint32 uid; |
| |
| [EnableIf=is_android] |
| int32 tag; |
| }; |