chromium/content/common/child_process.mojom

// Copyright 2019 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 "ipc/ipc.mojom";
import "mojo/public/mojom/base/file.mojom";
import "mojo/public/mojom/base/generic_pending_receiver.mojom";
import "mojo/public/mojom/base/memory_pressure_level.mojom";
import "services/tracing/public/mojom/background_tracing_agent.mojom";
import "services/tracing/public/mojom/system_tracing_service.mojom";

// Information about how logging should be configured.
// Corresponds to logging::LoggingSettings.
[EnableIf=is_chromeos_ash]
struct LoggingSettings {
  uint32 logging_dest;
  handle<platform> log_file_descriptor;
};

// The primordial interface child processes use to push requests to their
// browser-side host object.
interface ChildProcessHost {
  // Pings the parent process, expecting a reply. Used to verify that the
  // process and this interface connection are operational. When a child
  // process is started, it begins a timer (default 15 seconds) and sends this
  // message to the browser. If no reply comes back before time runs out, the
  // process self-terminates. There are no other interesting side effects, nor
  // are there any constraints on what either process can do while this is in
  // flight.
  Ping() => ();

  // 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);
};

// A control interface the browser uses to drive the behavior of all types of
// Content child processes.
interface ChildProcess {
  // 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_apple]
  GetTaskPort() => (handle<platform> 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<tracing.mojom.BackgroundTracingAgentProvider> receiver);

  // Used for connecting to the Perfetto system tracing service in the child
  // process. The child process uses |remote| to request the browser process
  // to make the socket connection and pass the connection back to the child.
  // This interface only accesses the producer socket. A child process
  // should never access the consumer socket.
  //
  // Enabled on POSIX platforms except Android: Android child processes connects
  // to the system tracing service directly.
  [EnableIf=is_non_android_posix]
  EnableSystemTracingService(
      pending_remote<tracing.mojom.SystemTracingService> remote);

  // Force the child process to crash immediately (i.e. a hard crash, no
  // cleanup, generating a crash report).
  CrashHungProcess();

  // Requests that the process bind a receiving pipe targeting the service
  // interface named by |receiver|.
  //
  // TODO(crbug.com/40633267): 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);

  // Write out the accumulated code profiling profile to the configured file.
  // The callback is invoked once the profile has been flushed to disk.
  [EnableIf=clang_profiling_inside_sandbox]
  WriteClangProfilingProfile() => ();

  // Sets the pseudonymization salt in a child process.
  //
  // PRIVACY NOTE: It is important that the `salt` is never persisted anywhere
  // or sent to a server.  Whoever has access to the salt can de-anonymize
  // results of the content::PseudonymizationUtil::PseudonymizeString method.
  SetPseudonymizationSalt(uint32 salt);

  // Reinitializes the child process's logging with the given settings. This
  // is needed on Chrome OS, which switches to a log file in the user's home
  // directory once they log in.
  [EnableIf=is_chromeos_ash]
  ReinitializeLogging(LoggingSettings settings);

  // Notifies a child process of current memory pressure level.
  //
  // OnMemoryPressure is called when the browser process receives OS's
  // memory pressure signals, and also when the browser process triggers
  // user-level memory pressure signals.
  //
  // This method is only for an experimental feature, and may be removed
  // shortly. Other code should not use this method.
  // See https://crbug.com/1393283 for details.
  [EnableIf=is_android]
  OnMemoryPressure(mojo_base.mojom.MemoryPressureLevel memory_pressure_level);

  // Asks the child process to modify its internal settings to bias towards
  // energy efficiency because the embedder is in battery saver mode. The
  // default is `false`.
  SetBatterySaverMode(bool battery_saver_mode_enabled);
};