| // Copyright 2014 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 COMPONENTS_SIGNIN_PUBLIC_BASE_SIGNIN_METRICS_H_ |
| #define COMPONENTS_SIGNIN_PUBLIC_BASE_SIGNIN_METRICS_H_ |
| |
| #include <limits.h> |
| |
| #include "base/time/time.h" |
| #include "build/build_config.h" |
| #include "google_apis/gaia/google_service_auth_error.h" |
| |
| namespace signin_metrics { |
| |
| // Enum for the ways in which primary account detection is done. |
| enum DifferentPrimaryAccounts { |
| // token and cookie had same primary accounts. |
| ACCOUNTS_SAME = 0, |
| // Deprecated. Indicates different primary accounts. |
| UNUSED_ACCOUNTS_DIFFERENT, |
| // No GAIA cookie present, so the primaries are considered different. |
| NO_COOKIE_PRESENT, |
| // There was at least one cookie and one token, and the primaries differed. |
| COOKIE_AND_TOKEN_PRIMARIES_DIFFERENT, |
| NUM_DIFFERENT_PRIMARY_ACCOUNT_METRICS, |
| }; |
| |
| // Track all the ways a profile can become signed out as a histogram. |
| // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.components.signin.metrics |
| // GENERATED_JAVA_CLASS_NAME_OVERRIDE: SignoutReason |
| // These values are persisted to logs. Entries should not be renumbered and |
| // numeric values should never be reused. |
| enum ProfileSignout : int { |
| // The value used within unit tests. |
| SIGNOUT_TEST = 0, |
| // The preference or policy controlling if signin is valid has changed. |
| SIGNOUT_PREF_CHANGED = 0, |
| // The valid pattern for signing in to the Google service changed. |
| GOOGLE_SERVICE_NAME_PATTERN_CHANGED = 1, |
| // The preference or policy controlling if signin is valid changed during |
| // the signin process. |
| SIGNIN_PREF_CHANGED_DURING_SIGNIN = 2, |
| // User clicked to signout from the settings page. |
| USER_CLICKED_SIGNOUT_SETTINGS = 3, |
| // The signin process was aborted, but signin had succeeded, so signout. This |
| // may be due to a server response, policy definition or user action. |
| ABORT_SIGNIN = 4, |
| // The sync server caused the profile to be signed out. |
| SERVER_FORCED_DISABLE = 5, |
| // The credentials are being transfered to a new profile, so the old one is |
| // signed out. |
| TRANSFER_CREDENTIALS = 6, |
| // Signed out because credentials are invalid and force-sign-in is enabled. |
| AUTHENTICATION_FAILED_WITH_FORCE_SIGNIN = 7, |
| // The user disables sync from the DICE UI. |
| USER_TUNED_OFF_SYNC_FROM_DICE_UI = 8, |
| // Android specific. Signout forced because the account was removed from the |
| // device. |
| ACCOUNT_REMOVED_FROM_DEVICE = 9, |
| // Signin is no longer allowed when the profile is initialized. |
| SIGNIN_NOT_ALLOWED_ON_PROFILE_INIT = 10, |
| // Sign out is forced allowed. Only used for tests. |
| FORCE_SIGNOUT_ALWAYS_ALLOWED_FOR_TEST = 11, |
| // User cleared account cookies when there's no sync consent, which has caused |
| // sign out. |
| USER_DELETED_ACCOUNT_COOKIES = 12, |
| // Signout triggered by MobileIdentityConsistency rollback. |
| MOBILE_IDENTITY_CONSISTENCY_ROLLBACK = 13, |
| // Sign-out when the account id migration to Gaia ID did not finish, |
| ACCOUNT_ID_MIGRATION = 14, |
| // Keep this as the last enum. |
| NUM_PROFILE_SIGNOUT_METRICS, |
| }; |
| |
| // Enum values used for use with "AutoLogin.Reverse" histograms. |
| enum AccessPointAction { |
| // The infobar was shown to the user. |
| HISTOGRAM_SHOWN, |
| // The user pressed the accept button to perform the suggested action. |
| HISTOGRAM_ACCEPTED, |
| // The user pressed the reject to turn off the feature. |
| HISTOGRAM_REJECTED, |
| // The user pressed the X button to dismiss the infobar this time. |
| HISTOGRAM_DISMISSED, |
| // The user completely ignored the infobar. Either they navigated away, or |
| // they used the page as is. |
| HISTOGRAM_IGNORED, |
| // The user clicked on the learn more link in the infobar. |
| HISTOGRAM_LEARN_MORE, |
| // The sync was started with default settings. |
| HISTOGRAM_WITH_DEFAULTS, |
| // The sync was started with advanced settings. |
| HISTOGRAM_WITH_ADVANCED, |
| // The sync was started through auto-accept with default settings. |
| HISTOGRAM_AUTO_WITH_DEFAULTS, |
| // The sync was started through auto-accept with advanced settings. |
| HISTOGRAM_AUTO_WITH_ADVANCED, |
| // The sync was aborted with an undo button. |
| HISTOGRAM_UNDO, |
| HISTOGRAM_MAX |
| }; |
| |
| // Enum values used with the "Signin.OneClickConfirmation" histogram, which |
| // tracks the actions used in the OneClickConfirmation bubble. |
| enum ConfirmationUsage { |
| HISTOGRAM_CONFIRM_SHOWN, |
| HISTOGRAM_CONFIRM_OK, |
| HISTOGRAM_CONFIRM_RETURN, |
| HISTOGRAM_CONFIRM_ADVANCED, |
| HISTOGRAM_CONFIRM_CLOSE, |
| HISTOGRAM_CONFIRM_ESCAPE, |
| HISTOGRAM_CONFIRM_UNDO, |
| HISTOGRAM_CONFIRM_LEARN_MORE, |
| HISTOGRAM_CONFIRM_LEARN_MORE_OK, |
| HISTOGRAM_CONFIRM_LEARN_MORE_RETURN, |
| HISTOGRAM_CONFIRM_LEARN_MORE_ADVANCED, |
| HISTOGRAM_CONFIRM_LEARN_MORE_CLOSE, |
| HISTOGRAM_CONFIRM_LEARN_MORE_ESCAPE, |
| HISTOGRAM_CONFIRM_LEARN_MORE_UNDO, |
| HISTOGRAM_CONFIRM_MAX |
| }; |
| |
| // TODO(gogerald): right now, gaia server needs to distinguish the source from |
| // signin_metrics::SOURCE_START_PAGE, signin_metrics::SOURCE_SETTINGS and the |
| // others to show advanced sync setting, remove them after switching to Minute |
| // Maid sign in flow. |
| // This was previously used in Signin.SigninSource UMA histogram, but no longer |
| // used after having below AccessPoint and Reason related histograms. |
| enum Source { |
| SOURCE_START_PAGE = 0, // This must be first. |
| SOURCE_SETTINGS = 3, |
| SOURCE_OTHERS = 13, |
| }; |
| |
| // Enum values which enumerates all access points where sign in could be |
| // initiated. Not all of them exist on all platforms. They are used with |
| // "Signin.SigninStartedAccessPoint" and "Signin.SigninCompletedAccessPoint" |
| // histograms. |
| // A Java counterpart will be generated for this enum. |
| // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.components.signin.metrics |
| // GENERATED_JAVA_CLASS_NAME_OVERRIDE: SigninAccessPoint |
| enum class AccessPoint : int { |
| ACCESS_POINT_START_PAGE = 0, |
| ACCESS_POINT_NTP_LINK = 1, |
| ACCESS_POINT_MENU = 2, |
| ACCESS_POINT_SETTINGS = 3, |
| ACCESS_POINT_SUPERVISED_USER = 4, |
| ACCESS_POINT_EXTENSION_INSTALL_BUBBLE = 5, |
| ACCESS_POINT_EXTENSIONS = 6, |
| // ACCESS_POINT_APPS_PAGE_LINK = 7, no longer used. |
| ACCESS_POINT_BOOKMARK_BUBBLE = 8, |
| ACCESS_POINT_BOOKMARK_MANAGER = 9, |
| ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN = 10, |
| ACCESS_POINT_USER_MANAGER = 11, |
| ACCESS_POINT_DEVICES_PAGE = 12, |
| ACCESS_POINT_CLOUD_PRINT = 13, |
| ACCESS_POINT_CONTENT_AREA = 14, |
| ACCESS_POINT_SIGNIN_PROMO = 15, |
| ACCESS_POINT_RECENT_TABS = 16, |
| // This should never have been used to get signin URL. |
| ACCESS_POINT_UNKNOWN = 17, |
| ACCESS_POINT_PASSWORD_BUBBLE = 18, |
| ACCESS_POINT_AUTOFILL_DROPDOWN = 19, |
| ACCESS_POINT_NTP_CONTENT_SUGGESTIONS = 20, |
| ACCESS_POINT_RESIGNIN_INFOBAR = 21, |
| ACCESS_POINT_TAB_SWITCHER = 22, |
| // ACCESS_POINT_FORCE_SIGNIN_WARNING is no longer used. |
| ACCESS_POINT_SAVE_CARD_BUBBLE = 24, |
| ACCESS_POINT_MANAGE_CARDS_BUBBLE = 25, |
| ACCESS_POINT_MACHINE_LOGON = 26, |
| ACCESS_POINT_GOOGLE_SERVICES_SETTINGS = 27, |
| ACCESS_POINT_SYNC_ERROR_CARD = 28, |
| ACCESS_POINT_FORCED_SIGNIN = 29, |
| ACCESS_POINT_ACCOUNT_RENAMED = 30, |
| ACCESS_POINT_WEB_SIGNIN = 31, |
| ACCESS_POINT_SAFETY_CHECK = 32, |
| ACCESS_POINT_KALEIDOSCOPE = 33, |
| ACCESS_POINT_MAX, // This must be last. |
| }; |
| |
| // Enum values which enumerates all access points where transactional reauth |
| // could be initiated. Transactional reauth is used when the user already has |
| // a valid refresh token but a system still wants to verify user's identity. |
| enum class ReauthAccessPoint { |
| // The code expects kUnknown to be the first, so it should not be reordered. |
| kUnknown = 0, |
| |
| // Account password storage opt-in: |
| kAutofillDropdown = 1, |
| kPasswordSaveBubble = 2, |
| kPasswordSettings = 3, |
| kGeneratePasswordDropdown = 4, |
| kGeneratePasswordContextMenu = 5, |
| kPasswordMoveBubble = 6, |
| |
| kMaxValue = kPasswordMoveBubble |
| }; |
| |
| // Enum values which enumerates all user actions on the sign-in promo. |
| enum class PromoAction : int { |
| PROMO_ACTION_NO_SIGNIN_PROMO = 0, |
| // The user selected the default account. |
| PROMO_ACTION_WITH_DEFAULT, |
| // On desktop, the user selected an account that is not the default. On |
| // mobile, the user selected the generic "Use another account" button. |
| PROMO_ACTION_NOT_DEFAULT, |
| // Non personalized promo, when there is no account on the device. |
| PROMO_ACTION_NEW_ACCOUNT_NO_EXISTING_ACCOUNT, |
| // The user clicked on the "Add account" button, when there are already |
| // accounts on the device. (desktop only, the button does not exist on |
| // mobile). |
| PROMO_ACTION_NEW_ACCOUNT_EXISTING_ACCOUNT |
| }; |
| |
| #if defined(OS_ANDROID) || defined(OS_IOS) |
| // This class is used to record user action that was taken after |
| // receiving the header from Gaia in the web sign-in flow. |
| // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.components.signin.metrics |
| // GENERATED_JAVA_CLASS_NAME_OVERRIDE: AccountConsistencyPromoAction |
| enum class AccountConsistencyPromoAction : int { |
| // Promo is not shown as there are no accounts on device. |
| SUPPRESSED_NO_ACCOUNTS = 0, |
| // User has dismissed the promo by tapping back button. |
| DISMISSED_BACK = 1, |
| // User has tapped |Add account to device| from expanded account list. |
| ADD_ACCOUNT_STARTED = 2, |
| |
| // Deprecated 05/2021, since the Incognito option has been removed from |
| // account picker bottomsheet. |
| // STARTED_INCOGNITO_SESSION = 3, |
| |
| // User has selected the default account and signed in with it |
| SIGNED_IN_WITH_DEFAULT_ACCOUNT = 4, |
| // User has selected one of the non default accounts and signed in with it. |
| SIGNED_IN_WITH_NON_DEFAULT_ACCOUNT = 5, |
| // The promo was shown to user. |
| SHOWN = 6, |
| // Promo is not shown due to sign-in being disallowed either by an enterprise |
| // policy |
| // or by |Allow Chrome sign-in| toggle. |
| SUPPRESSED_SIGNIN_NOT_ALLOWED = 7, |
| // User has added an account and signed in with this account. |
| // When this metric is recorded, we won't record |
| // SIGNED_IN_WITH_DEFAULT_ACCOUNT or |
| // SIGNED_IN_WITH_NON_DEFAULT_ACCOUNT. |
| SIGNED_IN_WITH_ADDED_ACCOUNT = 8, |
| // User has dismissed the promo by tapping on the scrim above the bottom |
| // sheet. |
| DISMISSED_SCRIM = 9, |
| // User has dismissed the promo by swiping down the bottom sheet. |
| DISMISSED_SWIPE_DOWN = 10, |
| // User has dismissed the promo by other means. |
| DISMISSED_OTHER = 11, |
| // The auth error screen was shown to the user. |
| AUTH_ERROR_SHOWN = 12, |
| // The generic error screen was shown to the user. |
| GENERIC_ERROR_SHOWN = 13, |
| // User has dismissed the promo by tapping on the dismissal button in the |
| // bottom sheet. |
| DISMISSED_BUTTON = 14, |
| // User has completed the account addition flow triggered from the bottom |
| // sheet. |
| ADD_ACCOUNT_COMPLETED = 15, |
| // The bottom sheet was suppressed as the user hit consecutive active |
| // dismissal limit. |
| SUPPRESSED_CONSECUTIVE_DISMISSALS = 16, |
| |
| MAX = 17, |
| }; |
| |
| // This class is used to record web sign-in events within 2 minutes after |
| // account picker bottom sheet was dismissed. |
| // These values are persisted to logs. Entries should not be renumbered and |
| // numeric values should never be reused. |
| enum class AccountConsistencyPromoAfterDismissal { |
| // User signed in with the default device account. This account is the first |
| // account in the cookies. |
| kSignedInOnWebWithDefaultDeviceAccount = 0, |
| // User signed in with non-default device account. |
| kSignedInOnWebWithNonDefaultDeviceAccount = 1, |
| // User signed in with an account not present on device. |
| kSignedInOnWebWithOtherAccount = 2, |
| |
| kMaxValue = kSignedInOnWebWithOtherAccount, |
| }; |
| #endif // defined(OS_ANDROID) || defined(OS_IOS) |
| |
| // Enum values which enumerates all reasons to start sign in process. |
| // These values are persisted to logs. Entries should not be renumbered and |
| // numeric values should never be reused. |
| // Please keep in Sync with "SigninReason" in |
| // src/tools/metrics/histograms/enums.xml. |
| // A Java counterpart will be generated for this enum. |
| // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.components.signin.metrics |
| // GENERATED_JAVA_CLASS_NAME_OVERRIDE: SigninReason |
| enum class Reason : int { |
| kSigninPrimaryAccount = 0, |
| kAddSecondaryAccount = 1, |
| kReauthentication = 2, |
| // REASON_UNLOCK = 3, // DEPRECATED, profile unlocking was removed. |
| // This should never have been used to get signin URL. |
| kUnknownReason = 4, |
| kForcedSigninPrimaryAccount = 5, |
| // Used to simply login and acquire a login scope token without actually |
| // signing into any profiles on Chrome. This allows the chrome signin page to |
| // work in incognito mode. |
| kFetchLstOnly = 6, |
| kMaxValue = kFetchLstOnly, |
| }; |
| |
| // Enum values used for use with the "Signin.Reauth" histogram. |
| enum AccountReauth { |
| // The user gave the wrong email when doing a reauthentication. |
| HISTOGRAM_ACCOUNT_MISSMATCH, |
| // The user was shown a reauthentication login screen. |
| HISTOGRAM_REAUTH_SHOWN, |
| |
| HISTOGRAM_REAUTH_MAX |
| }; |
| |
| // Enum values used for "Signin.AccountReconcilorState.OnGaiaResponse" |
| // histogram, which records the state of the AccountReconcilor when GAIA returns |
| // a specific response. |
| enum AccountReconcilorState { |
| // The AccountReconcilor has finished running and is up to date. |
| ACCOUNT_RECONCILOR_OK, |
| // The AccountReconcilor is running and gathering information. |
| ACCOUNT_RECONCILOR_RUNNING, |
| // The AccountReconcilor encountered an error and stopped. |
| ACCOUNT_RECONCILOR_ERROR, |
| // The account reconcilor will start running soon. |
| ACCOUNT_RECONCILOR_SCHEDULED, |
| // Always the last enumerated type. |
| ACCOUNT_RECONCILOR_HISTOGRAM_COUNT, |
| }; |
| |
| // Values of histogram comparing account id and email. |
| enum class AccountEquality : int { |
| // Expected case when the user is not switching accounts. |
| BOTH_EQUAL = 0, |
| // Expected case when the user is switching accounts. |
| BOTH_DIFFERENT, |
| // The user has changed at least two email account names. This is actually |
| // a different account, even though the email matches. |
| ONLY_SAME_EMAIL, |
| // The user has changed the email of their account, but the account is |
| // actually the same. |
| ONLY_SAME_ID, |
| // The last account id was not present, email equality was used. This should |
| // happen once to all old clients. Does not differentiate between same and |
| // different accounts. |
| EMAIL_FALLBACK, |
| // Always the last enumerated type. |
| HISTOGRAM_COUNT, |
| }; |
| |
| // When the user is give a choice of deleting their profile or not when signing |
| // out, the |kDeleted| or |kKeeping| metric should be used. If the user is not |
| // given any option, then use the |kIgnoreMetric| value should be used. |
| // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.components.signin.metrics |
| enum class SignoutDelete : int { |
| kDeleted = 0, |
| kKeeping, |
| kIgnoreMetric, |
| }; |
| |
| // This is the relationship between the account used to sign into chrome, and |
| // the account(s) used to sign into the content area/cookie jar. This enum |
| // gets messy because we're trying to capture quite a few things, if there was |
| // a match or not, how many accounts were in the cookie jar, and what state |
| // those cookie jar accounts were in (signed out vs signed in). Note that it's |
| // not possible to have the same account multiple times in the cookie jar. |
| enum class AccountRelation : int { |
| // No signed in or out accounts in the content area. Cannot have a match. |
| EMPTY_COOKIE_JAR = 0, |
| // The cookie jar contains only a single signed out account that matches. |
| NO_SIGNED_IN_SINGLE_SIGNED_OUT_MATCH, |
| // The cookie jar contains only signed out accounts, one of which matches. |
| NO_SIGNED_IN_ONE_OF_SIGNED_OUT_MATCH, |
| // The cookie jar contains one or more signed out accounts, none match. |
| NO_SIGNED_IN_WITH_SIGNED_OUT_NO_MATCH, |
| // The cookie jar contains only a single signed in account that matches. |
| SINGLE_SIGNED_IN_MATCH_NO_SIGNED_OUT, |
| // There's only one signed in account which matches, and there are one or |
| // more signed out accounts. |
| SINGLE_SINGED_IN_MATCH_WITH_SIGNED_OUT, |
| // There's more than one signed in account, one of which matches. There |
| // could be any configuration of signed out accounts. |
| ONE_OF_SIGNED_IN_MATCH_ANY_SIGNED_OUT, |
| // There's one or more signed in accounts, none of which match. However |
| // there is a match in the signed out accounts. |
| WITH_SIGNED_IN_ONE_OF_SIGNED_OUT_MATCH, |
| // There's one or more signed in accounts and any configuration of signed |
| // out accounts. However, none of the accounts match. |
| WITH_SIGNED_IN_NO_MATCH, |
| // Always the last enumerated type. |
| HISTOGRAM_COUNT, |
| }; |
| |
| // Various sources for refresh token operations (e.g. update or revoke |
| // credentials). |
| // These values are persisted to logs. Entries should not be renumbered and |
| // numeric values should never be reused. |
| enum class SourceForRefreshTokenOperation { |
| kUnknown, |
| kTokenService_LoadCredentials, |
| // NOTE: This is no longer used but is kept per the comment above about not |
| // renumbering. |
| kDeprecatedSupervisedUser_InitSync, |
| kInlineLoginHandler_Signin, |
| kPrimaryAccountManager_ClearAccount, |
| kPrimaryAccountManager_LegacyPreDiceSigninFlow, |
| kUserMenu_RemoveAccount, |
| kUserMenu_SignOutAllAccounts, |
| kSettings_Signout, |
| kSettings_PauseSync, |
| kAccountReconcilor_GaiaCookiesDeletedByUser, |
| kAccountReconcilor_GaiaCookiesUpdated, |
| kAccountReconcilor_Reconcile, |
| kDiceResponseHandler_Signin, |
| kDiceResponseHandler_Signout, |
| kDiceTurnOnSyncHelper_Abort, |
| kMachineLogon_CredentialProvider, |
| kTokenService_ExtractCredentials, |
| kAccountReconcilor_RevokeTokensNotInCookies, |
| kLogoutTabHelper_DidFinishNavigation, |
| |
| kMaxValue = kLogoutTabHelper_DidFinishNavigation, |
| }; |
| |
| // Different types of reporting. This is used as a histogram suffix. |
| enum class ReportingType { PERIODIC, ON_CHANGE }; |
| |
| // Result for fetching account capabilities from the system library, used to |
| // record histogram Signin.AccountCapabilities.GetFromSystemLibraryResult. |
| // |
| // These values are persisted to logs. Entries should not be renumbered and |
| // numeric values should never be reused. |
| enum class FetchAccountCapabilitiesFromSystemLibraryResult { |
| // Errors common to iOS and Android. |
| kSuccess = 0, |
| kErrorGeneric = 1, |
| |
| // Errors from 10 to 19 are reserved for Android. |
| |
| // Errors after 20 are reserved for iOS. |
| kErrorMissingCapability = 20, |
| kErrorUnexpectedValue = 21, |
| |
| kMaxValue = kErrorUnexpectedValue |
| }; |
| |
| // ----------------------------------------------------------------------------- |
| // Histograms |
| // ----------------------------------------------------------------------------- |
| |
| // Tracks the access point of sign in. |
| void LogSigninAccessPointStarted(AccessPoint access_point, |
| PromoAction promo_action); |
| void LogSigninAccessPointCompleted(AccessPoint access_point, |
| PromoAction promo_action); |
| |
| // Tracks the reason of sign in. |
| void LogSigninReason(Reason reason); |
| |
| // Log to UMA histograms and UserCounts stats about a single execution of the |
| // AccountReconciler. |
| // |total_number_accounts| - How many accounts are in the browser for this |
| // profile. |
| // |count_added_to_cookie_jar| - How many accounts were in the browser but not |
| // in the cookie jar. |
| // |count_removed_from_cookie_jar| - How many accounts were in the cookie jar |
| // but not in the browser. |
| // |primary_accounts_same| - False if the primary account for the cookie jar |
| // and the token service were different; else true. |
| // |is_first_reconcile| - True if these stats are from the first execution of |
| // the AccountReconcilor. |
| // |pre_count_gaia_cookies| - How many GAIA cookies were present before |
| // the AccountReconcilor began modifying the state. |
| void LogSigninAccountReconciliation(int total_number_accounts, |
| int count_added_to_cookie_jar, |
| int count_removed_from_cookie_jar, |
| bool primary_accounts_same, |
| bool is_first_reconcile, |
| int pre_count_gaia_cookies); |
| |
| // Logs to UMA histograms how many accounts are in the browser for this |
| // profile. |
| void RecordAccountsPerProfile(int total_number_accounts); |
| |
| // Logs duration of a single execution of AccountReconciler to UMA histograms. |
| // |duration| - How long execution of AccountReconciler took. |
| // |successful| - True if AccountReconciler was successful. |
| void LogSigninAccountReconciliationDuration(base::TimeDelta duration, |
| bool successful); |
| |
| // Track a profile signout. |
| void LogSignout(ProfileSignout source_metric, SignoutDelete delete_metric); |
| |
| // Tracks whether the external connection results were all fetched before |
| // the gaia cookie manager service tried to use them with merge session. |
| // |time_to_check_connections| is the time it took to complete. |
| void LogExternalCcResultFetches( |
| bool fetches_completed, |
| const base::TimeDelta& time_to_check_connections); |
| |
| // Track when the current authentication error changed. |
| void LogAuthError(const GoogleServiceAuthError& auth_error); |
| |
| // Records the AccountReconcilor |state| when GAIA returns a specific response. |
| // If |state| is different than ACCOUNT_RECONCILOR_OK it means the user will |
| // be shown a different set of accounts in the content-area and the settings UI. |
| void LogAccountReconcilorStateOnGaiaResponse(AccountReconcilorState state); |
| |
| // Records the AccountEquality metric when an investigator compares the current |
| // and previous id/emails during a signin. |
| void LogAccountEquality(AccountEquality equality); |
| |
| // Records the amount of time since the cookie jar was last changed. |
| void LogCookieJarStableAge(const base::TimeDelta stable_age, |
| const ReportingType type); |
| |
| // Records three counts for the number of accounts in the cookie jar. |
| void LogCookieJarCounts(const int signed_in, |
| const int signed_out, |
| const int total, |
| const ReportingType type); |
| |
| // Records the relation between the account signed into Chrome, and the |
| // account(s) present in the cookie jar. |
| void LogAccountRelation(const AccountRelation relation, |
| const ReportingType type); |
| |
| // Records if the best guess is that this profile is currently shared or not |
| // between multiple users. |
| void LogIsShared(const bool is_shared, const ReportingType type); |
| |
| // Records the number of signed-in accounts in the cookie jar for the given |
| // (potentially unconsented) primary account type, characterized by sync being |
| // enabled (`primary_syncing`) and the account being managed (i.e. enterprise, |
| // `primary_managed`). |
| void LogSignedInCookiesCountsPerPrimaryAccountType(int signed_in_accounts_count, |
| bool primary_syncing, |
| bool primary_managed); |
| |
| // Records the source that updated a refresh token. |
| void RecordRefreshTokenUpdatedFromSource(bool refresh_token_is_valid, |
| SourceForRefreshTokenOperation source); |
| |
| // Records the source that revoked a refresh token. |
| void RecordRefreshTokenRevokedFromSource(SourceForRefreshTokenOperation source); |
| |
| // ----------------------------------------------------------------------------- |
| // User actions |
| // ----------------------------------------------------------------------------- |
| |
| // Records corresponding sign in user action for an access point. |
| void RecordSigninUserActionForAccessPoint(AccessPoint access_point, |
| PromoAction promo_action); |
| |
| // Records |Signin_ImpressionWithAccount_From*| user action. |
| void RecordSigninImpressionUserActionForAccessPoint(AccessPoint access_point); |
| |
| // Records |Signin_Impression{With|No}Account_From*| user action. |
| void RecordSigninImpressionWithAccountUserActionForAccessPoint( |
| AccessPoint access_point, |
| bool with_account); |
| |
| #if defined(OS_IOS) |
| // Records |Signin.AccountConsistencyPromoAction| histogram. |
| void RecordConsistencyPromoUserAction(AccountConsistencyPromoAction action); |
| #endif // defined(OS_IOS) |
| |
| } // namespace signin_metrics |
| |
| #endif // COMPONENTS_SIGNIN_PUBLIC_BASE_SIGNIN_METRICS_H_ |