chromium/chrome/browser/apps/app_service/app_install/app_install.proto

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

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

package apps.proto;

import "chrome/browser/apps/almanac_api_client/proto/client_context.proto";

// This file is a mirror of the proto file maintained in the server code base at
// go/app-install-proto. Changes should be made by updating the server code base
// and then copying the result to Chromium. Changes to this proto should be
// reflected in ParseAppInstallResponseProto().

message AppInstallRequest {
  // Context information about the device making this request.
  optional ClientDeviceContext device_context = 1;

  // Context information about the user making this request.
  optional ClientUserContext user_context = 2;

  // The PackageId of the specific App Instance being installed.
  optional string package_id = 3;
}

message AppInstallResponse {
  // An individual App Icon.
  message Icon {
    // Url to query to get the icon itself (ie. the bytes).
    optional string url = 1;

    // Width of the icon in pixels.
    optional int32 width_in_pixels = 2;

    // Mime type of the icon.
    optional string mime_type = 3;

    // Whether or not we have permission from the platform to mask the icon.
    // This means that ChromeOS will put a circle around it.
    optional bool is_masking_allowed = 4;
  }

  // A screenshot used to preview the app.
  message Screenshot {
    // Url to query to get the image itself (ie. the bytes).
    optional string url = 1;

    // Mime type of the screenshot.
    optional string mime_type = 2;

    // Width of the screenshot in pixels.
    optional int32 width_in_pixels = 3;

    // Height of the screenshot in pixels.
    optional int32 height_in_pixels = 4;
  }

  // Represents an instance of an app regardless of what platform it runs on.
  // Each instance can have only one extra which corresponds to the platform.
  message AppInstance {
    // PackageId for the installable app that the information is being
    // requested for. This is always "platform:primary_key", for example
    // "android:com.spotify.music" or "web:http://manifest/id"
    optional string package_id = 1;

    // The AppGroup Uuid that was used to populate this request.
    optional string app_group_uuid = 11;

    // The name of the app.
    optional string name = 2;

    // The description of the app if present.
    optional string description = 3;

    // The App's Icon.
    optional Icon icon = 4;

    // A screenshot for the app if available. Note: this is empty for most apps.
    repeated Screenshot screenshots = 5;

    // An optional install URL for this app. Whether this is used or not is
    // platform specific and determined by the client.
    optional string install_url = 10;

    // Every platform has its own [Platform]Extras message to store platform
    // specific metadata.
    oneof extras {
      AndroidExtras android_extras = 6;
      WebExtras web_extras = 7;
      GeForceNowExtras gfn_extras = 8;
      SteamExtras steam_extras = 9;
    }
  }

  // For Android-only metadata.
  message AndroidExtras {}

  // For Web-only metadata.
  message WebExtras {
    // The (HTML) URL that that the manifest was retrieved from.
    optional string document_url = 1;

    // The (JSON) original (possibly third-party) Url for the app's manifest.
    optional string original_manifest_url = 2;

    // The (JSON) first-party Google Url for the manifest for this app.
    optional string scs_url = 3;

    // For "Powerful Websites" only (ie. PackageId "website://") this indicates
    // the value to use for the "open as window" boolean value required to
    // "install" the website.
    optional bool open_as_window = 4;
  }

  // For GFN-only metadata.
  message GeForceNowExtras {}

  // For Steam-only metadata.
  message SteamExtras {}

  // The App Instance for the requested package_id.
  optional AppInstance app_instance = 1;
}