// Copyright 2024 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_AGENT_CLUSTER_KEY_H_ #define CONTENT_BROWSER_AGENT_CLUSTER_KEY_H_ #include <optional> #include "content/browser/security/coop/cross_origin_isolation_mode.h" #include "content/common/content_export.h" #include "third_party/abseil-cpp/absl/types/variant.h" #include "url/gurl.h" #include "url/origin.h" namespace content { // AgentClusterKey represents the implementation in the browser process of the // AgentClusterKey concept of the HTML spec: // https://html.spec.whatwg.org/multipage/webappapis.html#agent-cluster-key // // SiteInstances have an AgentClusterKey in their SiteInfo, which represents the // AgentClusterKey of the execution contexts hosted by the SiteInstance. In a // BrowsingInstance, all regular web execution contexts needing the same // AgentClusterKey are hosted in the same SiteInstance. There can be exceptions // for non-regular web contexts, such as Guest Views, as they may require to be // hosted in a separate SiteInstance for security reasons. // // The AgentClusterKey is computed upon navigation, or when launching a worker. // It is then passed to RenderFrameHostManager to determine which SiteInstance // is appropriate to host the execution context. // TODO(crbug.com/342365078): Currently, AgentClusterKey is only computed when a // document has a Document-Isolation-Policy. Compute it on all navigations. Once // this is properly done, use the AgentClusterKey to replace the site URL in // SiteInfo, as it will only duplicate the information in AgentClusterKey. class CONTENT_EXPORT AgentClusterKey { … }; CONTENT_EXPORT std::ostream& operator<<( std::ostream& out, const AgentClusterKey& agent_cluster_key); } // namespace content #endif // CONTENT_BROWSER_AGENT_CLUSTER_KEY_H_