blob: cb52ec2788d1c897432fb76933b201fcfb7520eb [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module content.mojom;
import "content/common/associated_interfaces.mojom";
import "content/common/frame.mojom";
import "third_party/blink/public/mojom/frame/frame.mojom";
import "third_party/blink/public/mojom/frame/frame_replication_state.mojom";
import "third_party/blink/public/mojom/frame/tree_scope_type.mojom";
import "third_party/blink/public/mojom/shared_storage/shared_storage_worklet_service.mojom";
import "third_party/blink/public/mojom/tokens/tokens.mojom";
import "third_party/blink/public/mojom/worker/worklet_global_scope_creation_params.mojom";
// Interface for general communication between the renderer process's
// AgentSchedulingGroup and the browser process's AgentSchedulingGroupHost.
// Implemented by AgentSchedulingGroupHost (in the browser process).
//
// This interface is associated with this AgentSchedulingGroup's channel.
// The renderer process retrieves it via
// AgentSchedulingGroup.BindAssociatedInterfaces(). See comments on
// AgentSchedulingGroup for more about channels.
interface AgentSchedulingGroupHost {
// Acknowledge a RenderFrame was unloaded due to NavigationControl::Unload().
// This is not simply a reply callback on NavigationControl::Unload() because
// it needs to be invoked after the AssociatedReceiver (owned by RenderFrame)
// is already destroyed. This timing is required to ensure that any scheduled
// postMessages are dispatched prior to acknowledging the unload (which tears
// down the browser-side RFHI by removing it from the pending delete list)
DidUnloadRenderFrame(blink.mojom.LocalFrameToken frame_token);
};
// Interface for general communication between the browser process's
// AgentSchedulingGroupHost and the renderer process's AgentSchedulingGroup.
// Implemented by content::AgentSchedulingGroup (in the renderer process).
//
// The interface's message pipe depends on the mode that the Multiple Blink
// Isolate (MBI) feature is using (https://crbug.com/1051790).
//
// In non-kLegacy mode: there is a legacy IPC channel per AgentSchedulingGroup.
// The channel is created along with this interface, which it is associated
// with. Messages are *not* ordered with the per-process legacy IPC channel.
//
// In kLegacy mode: there is one legacy IPC channel per renderer and this
// interface is channel-associated with it. The browser process retrieves it via
// GetRemoteAssociatedInterface().
//
// See the comments for MBIMode in content/public/common/content_features.h for
// more details.
interface AgentSchedulingGroup {
// Tells the renderer to bind the AgentSchedulingGroup's associated
// interfaces. This includes the host remote (mojom::AgentSchedulingGroupHost)
// as well as RouteProvider remote/receiver pair.
// We have this as a method on this interface, as opposed to passing the
// pending interfaces over the method that creates the AgentSchedulingGroup:
// Renderer.CreateAgentSchedulingGroup() or
// Renderer.CreateAgentAssociatedSchedulingGroup() (depending on the mode, see
// the interface comments). This is because we need these interfaces to be
// associated with the message pipe that the AgentSchedulingGroup is
// associated with, which may be different than the message pipe that we
// create the AgentSchedulingGroup over.
BindAssociatedInterfaces(
pending_associated_remote<AgentSchedulingGroupHost> remote_host,
pending_associated_receiver<RouteProvider> route_provider_receiver);
// Tells the renderer to create a new view.
CreateView(CreateViewParams params);
// Tells the renderer to create a new RenderFrame.
CreateFrame(CreateFrameParams params);
// Tells the renderer process to create a thread that exclusively hosts the
// shared storage worklet service.
CreateSharedStorageWorkletService(
pending_receiver<blink.mojom.SharedStorageWorkletService> receiver,
blink.mojom.WorkletGlobalScopeCreationParams global_scope_creation_params);
};