// Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. module content.mojom; import "ipc/ipc.mojom"; import "mojo/public/mojom/base/file.mojom"; import "mojo/public/mojom/base/generic_pending_receiver.mojom"; import "services/service_manager/public/mojom/service.mojom"; import "services/tracing/public/mojom/background_tracing_agent.mojom"; // The primordial interface child processes use to push requests to their // browser-side host object. interface ChildProcessHost { // Requests that the browser bind |receiver| on behalf of the child process. // Whether or not the interface type encapsulated by |receiver| is supported // depends on the process type and potentially on the Content embedder. BindHostReceiver(mojo_base.mojom.GenericPendingReceiver receiver); }; // An interface bound on the browser's IO thread to accept a ChildProcessHost // receiver from the child process. A remote to this interface is sent to child // processes via |ChildProcess.Initialize()| so that the child process may in // turn send back a ChildProcessHost receiver for the browser to bind. This // allows the child process to begin queuing messages on its ChildProcessHost // immediately upon startup without first waiting for // |ChildProcess.Initialize()|. // // NOTE: This is a separate interface and message rather than a simple reply to // |ChildProcess.Initialize()| because RenderProcessHostImpl binds its // ChildProcess remote on the main thread, and the ChildProcessHost receiver // needs to be accepted and bound on the IO thread without a main-thread hop. interface ChildProcessHostBootstrap { BindProcessHost(pending_receiver receiver); }; // A control interface the browser uses to drive the behavior of all types of // Content child processes. interface ChildProcess { // The first message sent by the process host to the child process. This is // sent to allow the child process to bootstrap its own ChildProcessHost // interface, to which it may have already queued messages. Initialize(pending_remote boostrap); // Tells the child process that it's safe to shutdown. ProcessShutdown(); // Requests the child process send its Mach task port to the caller. [EnableIf=is_mac] GetTaskPort() => (handle task_port); // Tells the child process to begin or end IPC message logging. [EnableIf=ipc_logging] SetIPCLoggingEnabled(bool on); // Used to configure triggering for background tracing of child processes. GetBackgroundTracingAgentProvider( pending_receiver receiver); // Force the child process to crash immediately (i.e. a hard crash, no // cleanup, generating a crash report). CrashHungProcess(); // Binds the legacy IPC Channel bootstrapping pipe. BootstrapLegacyIpc(pending_receiver receiver); // Tells the child process to run an instance of a service named // |service_name|, binding it to |receiver|. This is used by the browser to // support launching of packaged services within Utility or GPU processes. // // DEPRECATED: |BindServiceInterface()| should be used instead. This will be // removed soon. RunService(string service_name, pending_receiver receiver); // Requests that the process bind a receiving pipe targeting the service // interface named by |receiver|. // // TODO(crbug.com/977637): Rename this to |RunService()| once the above method // is removed. BindServiceInterface(mojo_base.mojom.GenericPendingReceiver receiver); // Requests that the process bind a receiving pipe targeting the interface // named by |receiver|. Unlike |BindServiceInterface()| this may be used to // bind arbitrary interfaces on many different types of child processes. // Calls to this method generally end up in // |ChildThreadImpl::OnBindReceiver()|. // // Whether or not the interface type encapsulated by |receiver| is supported // depends on the process type and potentially on the Content embedder. BindReceiver(mojo_base.mojom.GenericPendingReceiver receiver); // Sets the profiling file for the child process. // Used for the coverage builds. [EnableIf=clang_profiling_inside_sandbox] SetProfilingFile(mojo_base.mojom.File file); };