chromium/ios/chrome/browser/photos/model/photos_metrics.h

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

#ifndef IOS_CHROME_BROWSER_PHOTOS_MODEL_PHOTOS_METRICS_H_
#define IOS_CHROME_BROWSER_PHOTOS_MODEL_PHOTOS_METRICS_H_

#import <Foundation/Foundation.h>

// UMA histogram names.
extern const char kSaveToPhotosActionsHistogram[];
extern const char kSaveToPhotosAccountPickerActionsHistogram[];
extern const char kSaveToPhotosContextMenuActionsHistogram[];
extern const char kSaveToPhotosSettingsActionsHistogram[];
extern const char kSaveToPhotosUploadSuccessLatencyHistogram[];
extern const char kSaveToPhotosUploadFailureLatencyHistogram[];
extern const char kSaveToPhotosUploadFailureTypeHistogram[];

// Enum for the IOS.SaveToPhotos histogram.
// Keep in sync with "IOSSaveToPhotosType"
// in tools/metrics/histograms/metadata/ios/enums.xml.
// LINT.IfChange
enum class SaveToPhotosActions {
  kFailureWebStateDestroyed = 0,
  kFailureUserSignedOut = 1,
  kFailureUserCancelledWithTryAgainAlert =
      2,  // User cancelled using the "Cancel" option in the "This File Could
          // not be Uploaded" alert
  kFailureUserCancelledWithAccountPicker = 3,
  kFailureUserCancelledWithSnackbar = 4,  // User cancelled using the snackbar
  kSuccess = 5,
  kSuccessAndOpenPhotosApp = 6,
  kSuccessAndOpenStoreKitAndAppNotInstalled = 7,
  kSuccessAndOpenStoreKitAndAppInstalled = 8,
  kFailureOutOfStorageDidManageStorage = 9,
  kFailureOutOfStorageDidNotManageStorage = 10,
  kMaxValue = kFailureOutOfStorageDidNotManageStorage,
};
// LINT.ThenChange(/tools/metrics/histograms/metadata/ios/enums.xml)

// Enum for the IOS.SaveToPhotos.AccountPicker histogram.
// Keep in sync with "IOSSaveToPhotosAccountPickerType"
// in tools/metrics/histograms/metadata/ios/enums.xml.
// LINT.IfChange
enum class SaveToPhotosAccountPickerActions {
  kSkipped =
      0,  // Account picker not presented because a default account exists
  kCancelled = 1,         // User tapped 'Cancel' in the account picker
  kSelectedIdentity = 2,  // User selected an identity in the account picker
  kMaxValue = kSelectedIdentity,
};
// LINT.ThenChange(/tools/metrics/histograms/metadata/ios/enums.xml)

// Enum for the IOS.SaveToPhotos.ContextMenu histogram.
// Keep in sync with "IOSSaveToPhotosContextMenuType"
// in tools/metrics/histograms/metadata/ios/enums.xml.
// LINT.IfChange
enum class SaveToPhotosContextMenuActions {
  kUnavailableDidSaveImageLocally =
      0,  // "Save to Google Photos" action was unavailable and the user tapped
          // "Save to Photos" (saved image locally)
  kAvailableDidSaveImageLocally =
      2,  // "Save to Google Photos" action was available but the user tapped
          // "Save to Photos" (saved image locally)
  kAvailableDidSaveImageToGooglePhotos =
      3,  // "Save to Google Photos" action was available and the user tapped
          // "Save to Google Photos"
  kMaxValue = kAvailableDidSaveImageToGooglePhotos,
};
// LINT.ThenChange(/tools/metrics/histograms/metadata/ios/enums.xml)

// Enum for the IOS.SaveToPhotos.Settings histogram.
// Keep in sync with "IOSSaveToPhotosSettingsType"
// in tools/metrics/histograms/metadata/ios/enums.xml.
// LINT.IfChange
enum class SaveToPhotosSettingsActions {
  kDefaultAccountNotSet =
      0,  // User has NOT set a default Save to Photos account and did NOT
          // opt-in to skip the account picker
  kDefaultAccountSetAndValid =
      1,  // User has set a default Save to Photos account which exists on
          // device and did NOT opt-in to skip the account picker
  kDefaultAccountSetNotValid =
      2,  // User has set a default Save to Photos account but it is not on
          // device anymore and did NOT opt-in to skip the account picker
  kDefaultAccountSetAndValidSkipAccountPicker =
      3,  // User has set a default Save to Photos account which exists on
          // device and did opt-in to skip the account picker
  kDefaultAccountSetNotValidSkipAccountPicker =
      4,  // User has set a default Save to Photos account but it is not on
          // device anymore; the user did opt-in to skip the account picker
  kMaxValue = kDefaultAccountSetNotValidSkipAccountPicker,
};
// LINT.ThenChange(/tools/metrics/histograms/metadata/ios/enums.xml)

// Types of failure which can occur during upload.
// Keep in sync with "IOSPhotosServiceUploadFailureType"
// in tools/metrics/histograms/metadata/ios/enums.xml.
// LINT.IfChange
enum class PhotosServiceUploadFailureType : NSUInteger {
  // No failure
  kNone = 0,
  // There is already an ongoing upload.
  kAlreadyUploading = 1,
  // An error occurred while trying to retrieve an existing album.
  kRetrieveAlbum = 10,
  // An error occurred while trying to create a new album.
  kCreateAlbum = 20,
  // An error occurred during the first step of a photo upload.
  kUploadPhoto1 = 30,
  kUploadPhoto1NoData = 31,
  kUploadPhoto1ContentIsNotText = 32,
  kUploadPhoto1TokenIsNil = 33,
  // An error occurred during the second step of a photo upload.
  kUploadPhoto2 = 40,
  // Second step of a photo upload failed because the remaining storage in the
  // user's account is not enough to store the photo.
  kUploadPhoto2NotEnoughStorage = 41,
  kMaxValue = kUploadPhoto2NotEnoughStorage,
};
// LINT.ThenChange(/tools/metrics/histograms/metadata/ios/enums.xml)

#endif  // IOS_CHROME_BROWSER_PHOTOS_MODEL_PHOTOS_METRICS_H_