// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_WEB_APP_CONSTANTS_H_
#define CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_WEB_APP_CONSTANTS_H_

namespace web_app {

// How the app will be launched after installation.
enum class LaunchContainer {
  // When `kDefault` is used, the app will launch in a window if the site is
  // "installable" (also referred to as Progressive Web App) and in a tab if
  // the site is not "installable".
  kDefault,
  kTab,
  kWindow,
};

// The result of an attempted web app installation, uninstallation or update.
//
// This is an enum, instead of a struct with multiple fields (e.g. one field for
// success or failure, one field for whether action was taken), because we want
// to track metrics for the overall cross product of the these axes.
//
// These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused. Update corresponding enums.xml entry
// when making changes here.
enum class InstallResultCode {
  kSuccess = 0,
  kAlreadyInstalled = 1,
  // Catch-all failure category. More-specific failure categories are below.
  kFailedUnknownReason = 2,
  kGetWebApplicationInfoFailed = 3,
  kPreviouslyUninstalled = 4,
  kWebContentsDestroyed = 5,
  kWriteDataFailed = 6,
  kMaxValue = kWriteDataFailed,
};

// Where an app was installed from. This affects what flags will be used when
// installing the app.
//
// Internal means that the set of apps to install is defined statically, and
// can be determined solely by 'first party' data: the Chromium binary,
// stored user preferences (assumed to have been edited only by Chromiums
// past and present) and the like. External means that the set of apps to
// install is defined dynamically, depending on 'third party' data that can
// change from session to session even if those sessions are for the same
// user running the same binary on the same hardware.
//
// Third party data sources can include configuration files in well known
// directories on the file system, entries (or the lack of) in the Windows
// registry, or centrally configured sys-admin policy.
//
// The internal versus external distinction matters because, for external
// install sources, the code that installs apps based on those external data
// sources can also need to *un*install apps if those external data sources
// change, either by an explicit uninstall request or an implicit uninstall
// of a previously-listed no-longer-listed app.
//
// Without the distinction between e.g. kInternal and kExternalXxx, the code
// that manages external-xxx apps might inadvertently uninstall internal apps
// that it otherwise doesn't recognize.
//
// In practice, every kExternalXxx enum definition should correspond to
// exactly one place in the code where SynchronizeInstalledApps is called.
enum class InstallSource {
  // Do not remove or re-order the names, only append to the end. Their
  // integer values are persisted in the preferences.

  kInternal = 0,
  // Installed by default on the system, such as "all such-and-such make and
  // model Chromebooks should have this app installed".
  //
  // The corresponding SynchronizeInstalledApps call site is in
  // WebAppProvider::OnScanForExternalWebApps.
  kExternalDefault = 1,
  // Installed by sys-admin policy, such as "all example.com employees should
  // have this app installed".
  //
  // The corresponding SynchronizeInstalledApps call site is in
  // WebAppPolicyManager::RefreshPolicyInstalledApps.
  kExternalPolicy = 2,
  // Installed as a Chrome component, such as a help app, or a settings app.
  //
  // The corresponding SynchronizeInstalledApps call site is in
  // SystemWebAppManager::RefreshPolicyInstalledApps.
  kSystemInstalled = 3,
  // Installed from ARC.
  //
  // There is no call to SynchronizeInstalledApps for this type, as these apps
  // are not installed via PendingAppManager.
  kArc = 4,
};

}  // namespace web_app

#endif  // CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_WEB_APP_CONSTANTS_H_
