// Copyright 2023 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_RENDERER_HOST_CONCURRENT_NAVIGATIONS_COMMIT_DEFERRING_CONDITION_H_ #define CONTENT_BROWSER_RENDERER_HOST_CONCURRENT_NAVIGATIONS_COMMIT_DEFERRING_CONDITION_H_ #include <memory> #include "content/public/browser/commit_deferring_condition.h" namespace content { class NavigationRequest; // Defers/queues activations to back-forward cached or prerendered pages when // there are pending commit RenderFrameHosts used by other navigations. This // ensures that the activations won't delete pending commit RenderFrameHosts. // Once there is no pending commit RenderFrameHost, the activation can be // resumed. This is triggered from the NavigationRequest destructor of another // navigation. See also `NavigationRequest::ResumeCommitIfNeeded()` and its // callers. // // Note that there is also a slightly similar queueing operation done for // non-activation navigations when trying to pick the final RenderFrameHost for // the navigation. Both that and this deferring condition uses a similar // resuming sequence, but different entry points to the deferred/queued states. // This is OK because both methods cover mutually exclusive cases (this // deferring condition covers activations only, and the queueing logic within // NavigationRequest covers non-activations only). For more details, see also // `NavigationRequest::SelectFrameHostForOnResponseStarted()` and other related // functions. class ConcurrentNavigationsCommitDeferringCondition : public CommitDeferringCondition { … }; } // namespace content #endif // CONTENT_BROWSER_RENDERER_HOST_CONCURRENT_NAVIGATIONS_COMMIT_DEFERRING_CONDITION_H_