// 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_SITE_INFO_H_ #define CONTENT_BROWSER_SITE_INFO_H_ #include "content/browser/agent_cluster_key.h" #include "content/browser/url_info.h" #include "content/browser/web_exposed_isolation_info.h" #include "content/common/content_export.h" #include "content/public/browser/storage_partition_config.h" #include "content/public/browser/web_exposed_isolation_level.h" #include "url/gurl.h" #include "url/origin.h" namespace content { class BrowserContext; class IsolationContext; class StoragePartitionConfig; struct UrlInfo; // SiteInfo represents the principal of a SiteInstance. All documents and // workers within a SiteInstance are considered part of this principal and will // share a renderer process. Any two documents within the same browsing context // group (i.e., BrowsingInstance) that are allowed to script each other *must* // have the same SiteInfo principal, so that they end up in the same renderer // process. // // As a result, SiteInfo is primarily defined in terms of "site URL," which is // often the scheme plus the eTLD+1 of a URL. This allows same-site URLs to // always share a process even when document.domain is modified. However, some // site URLs can be finer grained (e.g., origins) or coarser grained (e.g., // file://). See |site_url()| for more considerations. // // In the future, we may add more information to SiteInfo for cases where the // site URL is not sufficient to identify which process a document belongs in. // For example, origin isolation (https://crbug.com/1067389) will introduce a // 'keying' bit ('site' or 'origin') to avoid an ambiguity between sites and // origins, and it will be possible for two SiteInstances with different keying // values to have the same site URL. It is important that any extra members of // SiteInfo do not cause two documents that can script each other to end up in // different SiteInfos and thus different processes. class CONTENT_EXPORT SiteInfo { … }; CONTENT_EXPORT std::ostream& operator<<(std::ostream& out, const SiteInfo& site_info); } // namespace content #endif // CONTENT_BROWSER_SITE_INFO_H_