chromium/chromeos/crosapi/mojom/browser_app_instance_registry.mojom

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Next MinVersion: 4

module crosapi.mojom;

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

// Represents an update to an instance of a tabbed Chrome browser window.
[Stable]
struct BrowserWindowInstanceUpdate {
  // Instance ID generated in lacros-chrome.
  mojo_base.mojom.UnguessableToken id@0;

  // Wayland ID of the browser's Aura window.
  string window_id@1;

  // Browser window is currently activated.
  bool is_active@2;

  // Unique session id for the browser's window from the current browser
  // session.
  [MinVersion=2]
  uint32 browser_session_id@3;

  // Unique restored session id for the browser's window from the restored
  // browser session.
  [MinVersion=2]
  uint32 restored_browser_session_id@4;

  // Whether the browser window is an incognito window.
  [MinVersion=3]
  bool is_incognito@5;

  // Unique lacros profile id for the profile browser belongs to.
  [MinVersion=4]
  uint64 lacros_profile_id@6;
};

[Stable, Extensible]
enum BrowserAppInstanceType {
  kAppTab,
  kAppWindow,
};

// Represents an update to an instance of an app running in WebContents (either
// an app window or a tab).
[Stable]
struct BrowserAppInstanceUpdate {
  // Instance ID generated in lacros-chrome.
  mojo_base.mojom.UnguessableToken id@0;

  // Indicates if it's a tab in a browser or a standalone window.
  BrowserAppInstanceType type@1;

  // App ID.
  string app_id@2;

  // Wayland ID of the browser's Aura window. It may change for apps of type
  // kAppTab, and stays the same for instances of type kAppWindow.
  string window_id@3;

  // Current title of this instance's WebContents.
  string title@4;

  // The browser hosting this instance's WebContents is currently activated.
  bool is_browser_active@5;

  // The instance's WebContents is the active tab in the browser's tab strip.
  // May change for apps of type kAppTab, stays the same (true) for instances
  // of type kAppWindow.
  bool is_web_contents_active@6;

  // Unique session id for the browser's window from the current browser
  // session.
  [MinVersion=2]
  uint32 browser_session_id@7;

  // Unique restored session id for the browser's window from the restored
  // browser session.
  [MinVersion=2]
  uint32 restored_browser_session_id@8;
};

// Implemented in ash-chrome, and is used to receive browser app instance
// events from lacros-chrome.
[Stable, Uuid="c29f078d-8d82-4f65-bce0-18f047b1ea31"]
interface BrowserAppInstanceRegistry {
  // Called by lacros-chrome when when a new browser window is created.
  OnBrowserWindowAdded@0(BrowserWindowInstanceUpdate update);

  // Called when a browser window is updated.
  OnBrowserWindowUpdated@1(BrowserWindowInstanceUpdate update);

  // Called when a browser window is closed.
  OnBrowserWindowRemoved@2(BrowserWindowInstanceUpdate update);

  // Called by lacros-chrome when a new browser-based app instance is created
  // in Lacros.
  OnBrowserAppAdded@3(BrowserAppInstanceUpdate update);

  // Called by lacros-chrome when any attributes in a Lacros browser-based app
  // instance are updated.
  OnBrowserAppUpdated@4(BrowserAppInstanceUpdate update);

  // Called by lacros-chrome browser-based app instance is terminated.
  OnBrowserAppRemoved@5(BrowserAppInstanceUpdate update);

  // Binds the BrowserAppInstanceController interface, which allows the
  // BrowserAppInstanceRegistry implemented in ash-chrome to communicate with
  // its controller which is implemented in lacros-chrome.
  [MinVersion=1]
  RegisterController@6(
    pending_remote<BrowserAppInstanceController> controller);
};

// Implemented in lacros-chrome, and is used to perform actions on instances
// that live in lacros-chrome from ash-chrome.
[Stable, Uuid="5058756a-9826-4276-abff-f2a84b9386b9"]
interface BrowserAppInstanceController {
  // Activate the tab for the given instance ID in lacros-chrome. If the
  // instance being referenced is not a tab instance, does nothing.
  [MinVersion=1]
  ActivateTabInstance@0(mojo_base.mojom.UnguessableToken id);
};