// 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_INSTANCE_GROUP_H_ #define CONTENT_BROWSER_SITE_INSTANCE_GROUP_H_ #include "base/memory/raw_ptr.h" #include "base/memory/ref_counted.h" #include "base/memory/safe_ref.h" #include "base/memory/scoped_refptr.h" #include "base/observer_list.h" #include "base/types/id_type.h" #include "base/unguessable_token.h" #include "content/browser/browsing_instance.h" #include "content/browser/renderer_host/agent_scheduling_group_host.h" #include "content/browser/security/coop/coop_related_group.h" #include "content/common/content_export.h" #include "content/public/browser/browsing_instance_id.h" #include "content/public/browser/render_process_host_observer.h" #include "content/public/browser/site_instance.h" #include "third_party/perfetto/include/perfetto/tracing/traced_proto.h" namespace perfetto::protos::pbzero { class SiteInstanceGroup; } // namespace perfetto::protos::pbzero namespace content { class BrowserContext; class RenderProcessHost; class SiteInstance; class SiteInstanceImpl; struct ChildProcessTerminationInfo; // A SiteInstanceGroup represents one view of a browsing context group's frame // trees within a renderer process. It provides a tuning knob, allowing the // number of groups to vary (for process allocation and // painting/input/scheduling decisions) without affecting the number of security // principals that are tracked with SiteInstances. // // Similar to layers composing an image from many colors, a set of // SiteInstanceGroups compose a web page from many renderer processes. Each // group represents one renderer process' view of a browsing context group, // containing both local frames (organized into widgets of contiguous frames) // and proxies for frames in other groups or processes. // // The documents in the local frames of a group are organized into // SiteInstances, representing an atomic group of similar origin documents that // can access each other directly. A group contains all the documents of one or // more SiteInstances, all belonging to the same browsing context group (aka // BrowsingInstance). Each browsing context group has its own set of // SiteInstanceGroups. // // A SiteInstanceGroup is used for generating painted surfaces, directing input // events, and facilitating communication between frames in different groups. // The browser process coordinates activities across groups to produce a full // web page. // // A SiteInstanceGroup always has a RenderProcessHost. If the RenderProcessHost // itself (and not just the renderer process) goes away, then all // RenderFrameHosts, RenderFrameProxyHosts, and workers using it are gone, and // the SiteInstanceGroup itself goes away as well. SiteInstances in the group // may outlive this (e.g., when kept alive by NavigationEntry), in which case // they will get a new SiteInstanceGroup the next time one is needed. // SiteInstanceGroups are refcounted by the SiteInstances using them, allowing // for flexible policies. Currently, each SiteInstanceGroup has exactly one // SiteInstance. See crbug.com/1195535. class CONTENT_EXPORT SiteInstanceGroup : public base::RefCounted<SiteInstanceGroup>, public RenderProcessHostObserver { … }; } // namespace content #endif // CONTENT_BROWSER_SITE_INSTANCE_GROUP_H_