chromium/codelabs/mojo_examples/mojom/interface.mojom

// 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.

module codelabs.mojom;

// Bound in the renderer process; only used in
// `02-associated-interface-freezing` and
// `03-channel-associated-interface-freezing`.
interface ObjectA {
  // A sample IPC send to the toy "renderer".
  DoA();
};

// Bound in the renderer process.
interface ObjectB {
  // A sample IPC send to the toy "renderer".
  DoB();
};

// An associated object with the ChannelProxy. This is used
// for the `04-legacy-ipc-with-separate-remote` which emulates standard
// content process setup where this is the `content.mojom.ChildProcess`.
// The AssociatedProcess is associated with the legacy IPC channel.
interface AssociatedProcess {
  // Set an intermediate process object that is unassociated.
  SetProcess(pending_receiver<Process> process);
};

// This is a simple generic interface that serves no purpose but to transport a
// message handle from the browser to the renderer. It's just a handle, so it
// requires more type information to actually bind the handle properly on the
// other end (see `Process.GetAssociatedInterface()`).
interface GenericInterface {};

// A process-wide interface that the renderer uses to broker new connections to
// other associated interfaces (see `ObjectA` and `ObjectB` above). This is a
// toy version of `blink.mojom.AssociatedInterfaceProvider`, the mechanism by
// which we bind associated interfaces that span the real browser <=> renderer
// processes in Chromium.
interface Process {
  // A sample IPC send to the toy "renderer"; used by the `01-multi-process`
  // example.
  SayHello();

  // Because we're transporting a generic handle, we need more information to
  // bind it properly in the toy "renderer" process, which is what the "name"
  // argument provides.
  GetAssociatedInterface(
      string name, pending_associated_receiver<GenericInterface> receiver);
};