module atom.mojom;

import "mojo/public/mojom/base/values.mojom";

interface ElectronRenderer {
  Message(
      bool internal,
      bool send_to_all,
      string channel,
      mojo_base.mojom.ListValue arguments,
      int32 sender_id);

  UpdateCrashpadPipeName(string pipe_name);

  TakeHeapSnapshot(handle file) => (bool success);
};

interface ElectronBrowser {
  // Emits an event on |channel| from the ipcMain JavaScript object in the main
  // process.
  Message(
      bool internal,
      string channel,
      mojo_base.mojom.ListValue arguments);

  // Emits an event on |channel| from the ipcMain JavaScript object in the main
  // process, and waits synchronously for a response.
  //
  // NB. this is not marked [Sync] because mojo synchronous methods can be
  // reordered with respect to asynchronous methods on the same channel.
  // Instead, callers can manually block on the response to this method.
  MessageSync(
    bool internal,
    string channel,
    mojo_base.mojom.ListValue arguments) => (mojo_base.mojom.Value result);

  // Emits an event from the |ipcRenderer| JavaScript object in the target
  // WebContents's main frame, specified by |web_contents_id|.
  MessageTo(
    bool internal,
    bool send_to_all,
    int32 web_contents_id,
    string channel,
    mojo_base.mojom.ListValue arguments);

  MessageHost(
    string channel,
    mojo_base.mojom.ListValue arguments);
};
