blob: 6db5dde11c3403dbce735ccc8943a5a6376ca919 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_WEBAPPS_BROWSER_INSTALL_RESULT_CODE_H_
#define COMPONENTS_WEBAPPS_BROWSER_INSTALL_RESULT_CODE_H_
#include <iosfwd>
namespace webapps {
// 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.
//
// LINT.IfChange(InstallResultCode)
enum class InstallResultCode {
// Success category:
kSuccessNewInstall = 0,
kSuccessAlreadyInstalled = 1,
// Failure category:
// An inter-process request to blink renderer failed.
kGetWebAppInstallInfoFailed = 3,
// A user previously uninstalled the app, user doesn't want to see it again.
kPreviouslyUninstalled = 4,
// The blink renderer used to install the app was destroyed.
kWebContentsDestroyed = 5,
// I/O error: Disk output failed.
kWriteDataFailed = 6,
// A user rejected installation prompt.
kUserInstallDeclined = 7,
// |require_manifest| was specified but the app had no valid manifest.
kNotValidManifestForWebApp = 10,
// We have terminated the installation pipeline and intented to the Play
// Store, where the user still needs to accept the Play installation prompt to
// install.
kIntentToPlayStore = 11,
// A web app has been disabled by device policy or by other reasons.
kWebAppDisabled = 12,
// The network request for the install URL was redirected.
kInstallURLRedirected = 13,
// The network request for the install URL failed.
kInstallURLLoadFailed = 14,
// The requested app_id check failed: actual resulting app_id doesn't match.
kExpectedAppIdCheckFailed = 15,
// The network request for the install URL timed out.
kInstallURLLoadTimeOut = 16,
// Placeholder uninstall fails (in ExternallyManagedAppManager).
kFailedPlaceholderUninstall = 17,
// Web App is not considered installable, i.e. missing manifest fields, no
// service worker, etc.
kNotInstallable = 18,
// Apk Web App install fails.
kApkWebAppInstallFailed = 20,
// App managers are shutting down. For example, when user logs out immediately
// after login.
kCancelledOnWebAppProviderShuttingDown = 21,
// The Web Apps system is not ready: registry is not yet opened or already
// closed.
kWebAppProviderNotReady = 22,
// Success category for background installs:
kSuccessOfflineOnlyInstall = 23,
kSuccessOfflineFallbackInstall = 24,
// Failure category:
// The install task was destroyed, most likely due to WebAppInstallManager
// shutdown.
kInstallTaskDestroyed = 25,
// Web App update due to manifest change failed.
kUpdateTaskFailed = 26,
// Web App was not present in the registrar after a successful database
// commit.
kAppNotInRegistrarAfterCommit = 27,
// The installation stopped due to an uninstall from sync being scheduled.
kHaltedBySyncUninstall = 28,
// Invalid install URL for externally managed apps.
kInstallURLInvalid = 29,
// Downloading failed for all icons in an installation method which requires
// non-generated icons.
kIconDownloadingFailed = 30,
kCancelledDueToMainFrameNavigation = 31,
// No valid icons were provided in the manifest in an installation method
// which requires non-generated icons.
kNoValidIconsInManifest = 32,
// The manifest did not contain a developer-specific id (has_custom_id). For
// web install API.
kNoCustomManifestId = 33,
// The requested manifest_id check failed: actual resulting manifest_id
// doesn't match. For web install API.
kManifestIdMismatch = 34,
kMaxValue = kManifestIdMismatch,
};
// LINT.ThenChange(//tools/metrics/histograms/enums.xml:WebAppInstallResultCode)
// Checks if InstallResultCode is not a failure.
bool IsSuccess(InstallResultCode code);
// Checks if InstallResultCode indicates a new app was installed.
bool IsNewInstall(InstallResultCode code);
std::ostream& operator<<(std::ostream& os, InstallResultCode code);
} // namespace webapps
#endif // COMPONENTS_WEBAPPS_BROWSER_INSTALL_RESULT_CODE_H_