chromium/components/sync/protocol/workspace_desk_specifics.proto

// 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.
//
// Sync protocol datatype extension for desks on Chrome OS.

// If you change or add any fields in this file, update proto_visitors.h and
// potentially proto_enum_conversions.{h, cc}.

syntax = "proto2";

option java_multiple_files = true;
option java_package = "org.chromium.components.sync.protocol";

option optimize_for = LITE_RUNTIME;

package sync_pb;

import "components/sync/protocol/sync_enums.proto";

// A workspace desk entry. This proto contains the fields synced to represent
// a saved desk in user's workspace.
message WorkspaceDeskSpecifics {
  reserved "created_time_usec";

  // A random unique identifier for each desk.
  // Required.
  optional string uuid = 1;
  // The name of the desk being saved.
  optional string name = 2;
  // The time this snapshot of desk was created.
  optional int64 created_time_windows_epoch_micros = 3;

  // The time this snapshot of desk was updated.
  optional int64 updated_time_windows_epoch_micros = 5;

  optional Desk desk = 4;

  // The type of a desk.
  optional DeskType desk_type = 6;

  // The cache guid of the syncing client. Used to identify a unique device
  // that's syncing data.
  optional string client_cache_guid = 7;

  // The form factor of the device.
  optional SyncEnums.DeviceFormFactor device_form_factor = 8;

  // Represent a snapshot of the information on a desk.
  message Desk {
    // The apps in this template.
    repeated App apps = 1;
  }

  // A Launchable app in template.
  message App {
    // The on-display location of this window.
    optional WindowBound window_bound = 1;
    optional WindowState window_state = 2;
    // The z-index of this app relative to other apps in this template.
    // App with larger z-index appears in front of app with smaller z-index.
    optional int32 z_index = 3;

    optional AppOneOf app = 4;

    // window_id used to instantiate proto as a restore_data object.  The
    // restore_data object in question can be found at:
    // //components/app_restore/restore_data.h
    optional int32 window_id = 5;

    // Display ID this app is on.
    optional int64 display_id = 6;

    // State of a window before it was minimized. Empty/unset for non-minimized
    // windows.
    optional WindowState pre_minimized_window_state = 7;

    // Container this app was launched from.  Empty/unset for Arc apps.
    optional LaunchContainer container = 8;

    // Window open disposition, defines how a window opens. Empty/unset for Arc
    // apps.
    optional WindowOpenDisposition disposition = 9;

    // Name of the app which is used by the browser to determine whether to
    // launch an app as an app or a tab. Does not contain a human readable name
    // but contains the app ID and a prefix.
    optional string app_name = 10;

    // Human readable title of the app.
    optional string title = 11;

    // This is used to determine the size of a snapped window is in clamshell
    // mode. Empty/unset for non-snapped windows. This should be a value between
    // 0 and 100.
    optional int32 snap_percentage = 12;

    // The override URL can be specified by apps to override the default URL at
    // launch.
    optional string override_url = 13;
  }

  message AppOneOf {
    oneof app {
      BrowserAppWindow browser_app_window = 1;
      ChromeApp chrome_app = 2;
      ProgressiveWebApp progress_web_app = 3;
      ArcApp arc_app = 4;
    }
  }

  // A Chrome or Lacros Browser app window.
  message BrowserAppWindow {
    message BrowserAppTab {
      // The last committed URL of the main frame of the tab.
      optional string url = 1;
      // The title of the tab.
      optional string title = 2;
    }

    // Structure representing a tab group associated with this window.
    message TabGroup {
      // Zero-based index within the browser app tabs of the first tab in the
      // group.
      optional int32 first_index = 1;

      // Zero-based Index wotjom the browser app tabs of the last tab in the
      // group.
      optional int32 last_index = 2;

      // User readable title of the tab group.
      optional string title = 3;

      // Color associated with this tab group.
      optional TabGroupColor color = 4;

      // Indicates whether the tab group is collapsed.
      optional bool is_collapsed = 5;
    }

    // The tabs in this browser window.
    repeated BrowserAppTab tabs = 1;

    // The index of the currently active tab.
    optional int32 active_tab_index = 2;

    // Indicates whether to show as a dedicated app window.
    optional bool show_as_app = 3;

    // Tab groups associated with this window.
    repeated TabGroup tab_groups = 4;

    // The index of the first non-pinned tab.
    optional int32 first_non_pinned_tab_index = 5;
  }

  // A Chrome App window.
  message ChromeApp {
    // The Chrome App's App ID.
    optional string app_id = 1;

    reserved 2;
  }

  // A PWA window.
  message ProgressiveWebApp {
    // The PWA's App ID.
    optional string app_id = 1;

    reserved 2;
  }

  // An Arc App window.
  message ArcApp {
    // The Arc App's ID.
    optional string app_id = 1;

    // Arc window information.  This maps
    // to ArcExtraInfo in a WindowInfo struct.
    optional WindowSize minimum_size = 2;
    optional WindowSize maximum_size = 3;

    reserved 4;

    optional WindowBound bounds_in_root = 5;

    // maps to gfx::Size.  Width of the window, including the frame,
    // in pixels.
    message WindowSize {
      optional int32 width = 1;
      optional int32 height = 2;
    }
  }

  message WindowBound {
    // The offset of the window from the top edge of the screen in pixels.
    optional int32 top = 1;
    // The offset of the window from the left edge of the screen in pixels.
    optional int32 left = 2;
    // The width of the window, including the frame, in pixels.
    optional int32 width = 3;
    // The height of the window, including the frame, in pixels.
    optional int32 height = 4;
  }

  // Enumeration for the container an app was launched from as used by
  // (components/services/app_services/public/mojom/types.mojom:490).
  enum LaunchContainer {
    LAUNCH_CONTAINER_UNSPECIFIED = 0;
    LAUNCH_CONTAINER_WINDOW = 1;
    LAUNCH_CONTAINER_PANEL_DEPRECATED = 2;
    LAUNCH_CONTAINER_TAB = 3;
    LAUNCH_CONTAINER_NONE = 4;
  }

  // The state of a generic window.
  enum WindowState {
    UNKNOWN_WINDOW_STATE = 0;
    // Normal window state (not minimized, maximized, or fullscreen).
    NORMAL = 1;
    // Minimized window state.
    MINIMIZED = 2;
    // Maximized window state.
    MAXIMIZED = 3;
    // Fullscreen window state.
    FULLSCREEN = 4;
    // Snapped to primary half of the screen. Primary half is on the left in
    // landscape screen orientation and top in portrait screen orientation.
    PRIMARY_SNAPPED = 5;
    // Snapped to secondary half of the screen. Secondary half is on the right
    // in landscape screen orientation and bottom in portrait screen
    // orientation.
    SECONDARY_SNAPPED = 6;
    // Floated window state.
    FLOATED = 7;
  }

  // Enumeration for how a window opens.  Maps to base::WindowOpenDisposition.
  // (found in ui/base/window_open_disposition.h:10).  Does not include
  // MAX_VALUE as MAX_VALUE is equivalent to NEW_PICTURE_IN_PICTURE.  All
  // comments are copied verbatim from aforementioned header.
  enum WindowOpenDisposition {
    UNKNOWN = 0;
    CURRENT_TAB = 1;
    // Indicates that only one tab with the URL shoul exist in the same window.
    SINGLETON_TAB = 2;
    NEW_FOREGROUND_TAB = 3;
    NEW_BACKGROUND_TAB = 4;
    NEW_POPUP = 5;
    NEW_WINDOW = 6;
    SAVE_TO_DISK = 7;
    OFF_THE_RECORD = 8;
    IGNORE_ACTION = 9;
    // Activates an existing tab containing the URL, rather than navigating.
    // This is similar to SINGLETON_TAB, but searches across all windows
    // from the current profile and anymity (instead of tjust the current one);
    // closes the current tab on switching if the current ta was the NTP with
    // no session history; and behaves like CURRENT_TAB instead of
    // NEW_FOREGROUND_TAB when no existing tab is found.
    SWITCH_TO_TAB = 10;
    // creates a new document picture-in-picture window showing a child WebView.
    NEW_PICTURE_IN_PICTURE = 11;
  }

  // Enumerates the type of desk, namely to differentiate desks between desks
  // saved for desk templates and desks saved for save and recall.
  enum DeskType {
    UNKNOWN_TYPE = 0;
    TEMPLATE = 1;
    SAVE_AND_RECALL = 2;
    FLOATING_WORKSPACE = 3;
  }

  // Enumerates the possible colors that a tab group can have.  This mirrors
  // the enumeration that can be found in
  // components/tab_groups/tab_group_color.h
  enum TabGroupColor {
    UNKNOWN_COLOR = 0;
    GREY = 1;
    BLUE = 2;
    RED = 3;
    YELLOW = 4;
    GREEN = 5;
    PINK = 6;
    PURPLE = 7;
    CYAN = 8;
    ORANGE = 9;
  }
}