// 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_PROCESS_REUSE_POLICY_H_ #define CONTENT_BROWSER_PROCESS_REUSE_POLICY_H_ namespace content { // The policy to apply when selecting a RenderProcessHost for a SiteInstance. // If no suitable RenderProcessHost for the SiteInstance exists according to the // policy, and there are processes with unmatched service workers for the site, // the newest process with an unmatched service worker is reused. If still no // RenderProcessHost exists, a new RenderProcessHost will be created unless the // soft process limit has been reached. When the limit has been reached, an // existing suitable (e.g., same-site if Site Isolation is enabled) // RenderProcessHost will be chosen randomly to be reused when possible. enum class ProcessReusePolicy { // In this mode, all instances of the site will be hosted in the same // RenderProcessHost. PROCESS_PER_SITE, // In this mode, the subframe's site will be rendered in a RenderProcessHost // that is already in use for the site, either for a pending navigation or a // committed navigation. If multiple such processes exist, ones that have // foreground frames are given priority, and otherwise one is selected // randomly. REUSE_PENDING_OR_COMMITTED_SITE_SUBFRAME, // Similar to REUSE_PENDING_OR_COMMITTED_SITE_SUBFRAME, but only applied to // workers. Reuse decisions may vary from those for // REUSE_PENDING_OR_COMMITTED_SITE_SUBFRAME. REUSE_PENDING_OR_COMMITTED_SITE_WORKER, // When used, this is similar to REUSE_PENDING_OR_COMMITTED_SITE_SUBFRAME, but // for main frames, and limiting the number of main frames a RenderProcessHost // can host to a certain threshold. REUSE_PENDING_OR_COMMITTED_SITE_WITH_MAIN_FRAME_THRESHOLD, // In this mode, SiteInstances don't proactively reuse processes. An // existing process with an unmatched service worker for the site is reused // only for navigations, not for service workers. When the process limit has // been reached, a randomly chosen RenderProcessHost is reused as in the // other policies. DEFAULT, }; } // namespace content #endif // CONTENT_BROWSER_PROCESS_REUSE_POLICY_H_