// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_BROWSER_URL_INFO_H_ #define CONTENT_BROWSER_URL_INFO_H_ #include <optional> #include "content/browser/agent_cluster_key.h" #include "content/browser/web_exposed_isolation_info.h" #include "content/common/content_export.h" #include "content/public/browser/storage_partition_config.h" #include "url/gurl.h" #include "url/origin.h" namespace content { // This struct is used to package a GURL together with extra state required to // make SiteInstance/process allocation decisions, e.g. whether the url's // origin or site is requesting isolation as determined by response headers in // the corresponding NavigationRequest. The extra state is generally most // relevant when navigation to the URL is in progress, since once placed into a // SiteInstance, the extra state will be available via SiteInfo. Otherwise, // most callsites requiring a UrlInfo can create with a GURL, specifying kNone // for |origin_isolation_request|. Some examples of where passing kNone for // |origin_isolation_request| is safe are: // * at DidCommitNavigation time, since at that point the SiteInstance has // already been picked and the navigation can be considered finished, // * before a response is received (the only way to request isolation is via // response headers), and // * outside of a navigation. // // If UrlInfo::origin_isolation_request is kNone, that does *not* imply that // the URL's origin will not be isolated, and vice versa. The isolation // decision involves both response headers and consistency within a // BrowsingInstance, and once we decide on the isolation outcome for an origin, // it won't change for the lifetime of the BrowsingInstance. // // To check whether a frame ends up in a site-isolated process, use // SiteInfo::RequiresDedicatedProcess() on its SiteInstance's SiteInfo. To // check whether a frame ends up being origin-isolated in a separate process // (e.g., due to the Origin-Agent-Cluster header), use // SiteInfo::requires_origin_keyed_process(). // // Note: it is not expected that this struct will be exposed in content/public. class IsolationContext; class UrlInfoInit; struct CONTENT_EXPORT UrlInfo { … }; class CONTENT_EXPORT UrlInfoInit { … }; // class UrlInfoInit } // namespace content #endif // CONTENT_BROWSER_URL_INFO_H_