blob: 566b075fda361ee97c4dd7402572eb4fae82123c [file] [log] [blame]
// 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_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_MANAGER_METRICS_UTIL_H_
#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_MANAGER_METRICS_UTIL_H_
#include <stddef.h>
#include <string>
#include "components/autofill/core/common/password_form.h"
#include "components/password_manager/core/common/credential_manager_types.h"
namespace password_manager {
namespace metrics_util {
// Metrics: "PasswordManager.InfoBarResponse"
enum ResponseType {
NO_RESPONSE = 0,
REMEMBER_PASSWORD,
NEVER_REMEMBER_PASSWORD,
INFOBAR_DISMISSED,
NUM_RESPONSE_TYPES,
};
// Metrics: "PasswordBubble.DisplayDisposition"
enum UIDisplayDisposition {
AUTOMATIC_WITH_PASSWORD_PENDING = 0,
MANUAL_WITH_PASSWORD_PENDING,
MANUAL_MANAGE_PASSWORDS,
MANUAL_BLACKLISTED_OBSOLETE, // obsolete.
AUTOMATIC_GENERATED_PASSWORD_CONFIRMATION,
AUTOMATIC_CREDENTIAL_REQUEST_OBSOLETE, // obsolete
AUTOMATIC_SIGNIN_TOAST,
MANUAL_WITH_PASSWORD_PENDING_UPDATE,
AUTOMATIC_WITH_PASSWORD_PENDING_UPDATE,
NUM_DISPLAY_DISPOSITIONS
};
// Metrics: "PasswordManager.UIDismissalReason"
enum UIDismissalReason {
// We use this to mean both "Bubble lost focus" and "No interaction with the
// infobar", depending on which experiment is active.
NO_DIRECT_INTERACTION = 0,
CLICKED_SAVE,
CLICKED_CANCEL,
CLICKED_NEVER,
CLICKED_MANAGE,
CLICKED_DONE,
CLICKED_UNBLACKLIST_OBSOLETE, // obsolete.
CLICKED_OK,
CLICKED_CREDENTIAL_OBSOLETE, // obsolete.
AUTO_SIGNIN_TOAST_TIMEOUT,
AUTO_SIGNIN_TOAST_CLICKED_OBSOLETE, // obsolete.
CLICKED_BRAND_NAME,
CLICKED_PASSWORDS_DASHBOARD,
NUM_UI_RESPONSES,
};
enum FormDeserializationStatus {
LOGIN_DATABASE_SUCCESS,
LOGIN_DATABASE_FAILURE,
LIBSECRET_SUCCESS,
LIBSECRET_FAILURE,
GNOME_SUCCESS,
GNOME_FAILURE,
NUM_DESERIALIZATION_STATUSES
};
// Metrics: "PasswordManager.PasswordSyncState"
enum PasswordSyncState {
SYNCING_OK,
NOT_SYNCING_FAILED_READ,
NOT_SYNCING_DUPLICATE_TAGS,
NOT_SYNCING_SERVER_ERROR,
NUM_SYNC_STATES
};
// Metrics: "PasswordGeneration.SubmissionEvent"
enum PasswordSubmissionEvent {
PASSWORD_SUBMITTED,
PASSWORD_SUBMISSION_FAILED,
PASSWORD_NOT_SUBMITTED,
PASSWORD_OVERRIDDEN,
PASSWORD_USED,
GENERATED_PASSWORD_FORCE_SAVED,
SUBMISSION_EVENT_ENUM_COUNT
};
enum UpdatePasswordSubmissionEvent {
NO_ACCOUNTS_CLICKED_UPDATE,
NO_ACCOUNTS_CLICKED_NOPE,
NO_ACCOUNTS_NO_INTERACTION,
ONE_ACCOUNT_CLICKED_UPDATE,
ONE_ACCOUNT_CLICKED_NOPE,
ONE_ACCOUNT_NO_INTERACTION,
MULTIPLE_ACCOUNTS_CLICKED_UPDATE,
MULTIPLE_ACCOUNTS_CLICKED_NOPE,
MULTIPLE_ACCOUNTS_NO_INTERACTION,
PASSWORD_OVERRIDDEN_CLICKED_UPDATE,
PASSWORD_OVERRIDDEN_CLICKED_NOPE,
PASSWORD_OVERRIDDEN_NO_INTERACTION,
UPDATE_PASSWORD_EVENT_COUNT,
NO_UPDATE_SUBMISSION
};
enum MultiAccountUpdateBubbleUserAction {
DEFAULT_ACCOUNT_MATCHED_BY_PASSWORD_USER_CHANGED,
DEFAULT_ACCOUNT_MATCHED_BY_PASSWORD_USER_NOT_CHANGED,
DEFAULT_ACCOUNT_MATCHED_BY_PASSWORD_USER_REJECTED_UPDATE,
DEFAULT_ACCOUNT_PREFERRED_USER_CHANGED,
DEFAULT_ACCOUNT_PREFERRED_USER_NOT_CHANGED,
DEFAULT_ACCOUNT_PREFERRED_USER_REJECTED_UPDATE,
DEFAULT_ACCOUNT_FIRST_USER_CHANGED,
DEFAULT_ACCOUNT_FIRST_USER_NOT_CHANGED,
DEFAULT_ACCOUNT_FIRST_USER_REJECTED_UPDATE,
MULTI_ACCOUNT_UPDATE_BUBBLE_USER_ACTION_COUNT
};
enum AutoSigninPromoUserAction {
AUTO_SIGNIN_NO_ACTION,
AUTO_SIGNIN_TURN_OFF,
AUTO_SIGNIN_OK_GOT_IT,
AUTO_SIGNIN_PROMO_ACTION_COUNT
};
enum AccountChooserUserAction {
ACCOUNT_CHOOSER_DISMISSED,
ACCOUNT_CHOOSER_CREDENTIAL_CHOSEN,
ACCOUNT_CHOOSER_SIGN_IN,
ACCOUNT_CHOOSER_ACTION_COUNT
};
enum SyncSignInUserAction {
CHROME_SIGNIN_DISMISSED,
CHROME_SIGNIN_OK,
CHROME_SIGNIN_CANCEL,
CHROME_SIGNIN_ACTION_COUNT
};
enum AccountChooserUsabilityMetric {
ACCOUNT_CHOOSER_LOOKS_OK,
ACCOUNT_CHOOSER_EMPTY_USERNAME,
ACCOUNT_CHOOSER_DUPLICATES,
ACCOUNT_CHOOSER_EMPTY_USERNAME_AND_DUPLICATES,
ACCOUNT_CHOOSER_USABILITY_COUNT,
};
enum CredentialManagerGetResult {
// The promise is rejected.
CREDENTIAL_MANAGER_GET_REJECTED,
// Auto sign-in is not allowed in the current context.
CREDENTIAL_MANAGER_GET_NONE_ZERO_CLICK_OFF,
// No matching credentials found.
CREDENTIAL_MANAGER_GET_NONE_EMPTY_STORE,
// User mediation required due to > 1 matching credentials.
CREDENTIAL_MANAGER_GET_NONE_MANY_CREDENTIALS,
// User mediation required due to the signed out state.
CREDENTIAL_MANAGER_GET_NONE_SIGNED_OUT,
// User mediation required due to pending first run experience dialog.
CREDENTIAL_MANAGER_GET_NONE_FIRST_RUN,
// Return empty credential for whatever reason.
CREDENTIAL_MANAGER_GET_NONE,
// Return a credential from the account chooser.
CREDENTIAL_MANAGER_GET_ACCOUNT_CHOOSER,
// User is auto signed in.
CREDENTIAL_MANAGER_GET_AUTOSIGNIN,
CREDENTIAL_MANAGER_GET_COUNT
};
// Metrics: "PasswordManager.HttpPasswordMigrationMode"
enum HttpPasswordMigrationMode {
HTTP_PASSWORD_MIGRATION_MODE_MOVE,
HTTP_PASSWORD_MIGRATION_MODE_COPY,
HTTP_PASSWORD_MIGRATION_MODE_COUNT
};
enum PasswordReusePasswordFieldDetected {
NO_PASSWORD_FIELD,
HAS_PASSWORD_FIELD,
PASSWORD_REUSE_PASSWORD_FIELD_DETECTED_COUNT
};
// A version of the UMA_HISTOGRAM_BOOLEAN macro that allows the |name|
// to vary over the program's runtime.
void LogUMAHistogramBoolean(const std::string& name, bool sample);
// Log the |reason| a user dismissed the password manager UI.
void LogUIDismissalReason(UIDismissalReason reason);
// Log the appropriate display disposition.
void LogUIDisplayDisposition(UIDisplayDisposition disposition);
// Log if a saved FormData was deserialized correctly.
void LogFormDataDeserializationStatus(FormDeserializationStatus status);
// When a credential was filled, log whether it came from an Android app.
void LogFilledCredentialIsFromAndroidApp(bool from_android);
// Log what's preventing passwords from syncing.
void LogPasswordSyncState(PasswordSyncState state);
// Log submission events related to generation.
void LogPasswordGenerationSubmissionEvent(PasswordSubmissionEvent event);
// Log when password generation is available for a particular form.
void LogPasswordGenerationAvailableSubmissionEvent(
PasswordSubmissionEvent event);
// Log submission events related to password update.
void LogUpdatePasswordSubmissionEvent(UpdatePasswordSubmissionEvent event);
// Log a user action on showing an update password bubble with multiple
// accounts.
void LogMultiAccountUpdateBubbleUserAction(
MultiAccountUpdateBubbleUserAction action);
// Log a user action on showing the autosignin first run experience.
void LogAutoSigninPromoUserAction(AutoSigninPromoUserAction action);
// Log a user action on showing the account chooser for one or many accounts.
void LogAccountChooserUserActionOneAccount(AccountChooserUserAction action);
void LogAccountChooserUserActionManyAccounts(AccountChooserUserAction action);
// Log a user action on showing the Chrome sign in promo.
void LogSyncSigninPromoUserAction(SyncSignInUserAction action);
// Logs whether a password was rejected due to same origin but different scheme.
void LogShouldBlockPasswordForSameOriginButDifferentScheme(bool should_block);
// Logs number of passwords migrated from HTTP to HTTPS.
void LogCountHttpMigratedPasswords(int count);
// Logs mode of HTTP password migration.
void LogHttpPasswordMigrationMode(HttpPasswordMigrationMode mode);
// Log if the account chooser has empty username or duplicate usernames. In
// addition record number of the placeholder avatars and total number of rows.
void LogAccountChooserUsability(AccountChooserUsabilityMetric usability,
int count_empty_icons,
int count_accounts);
// Log the result of navigator.credentials.get.
void LogCredentialManagerGetResult(CredentialManagerGetResult result,
CredentialMediationRequirement mediation);
// Log the password reuse.
void LogPasswordReuse(int password_length,
int saved_passwords,
int number_matches,
bool password_field_detected);
// Log when the user selects the "Login not secure" warning in the password
// autofill dropdown to show more information about the warning.
void LogShowedHttpNotSecureExplanation();
// Log that the Form-Not-Secure warning was shown. Should be called at most once
// per main-frame navigation.
void LogShowedFormNotSecureWarningOnCurrentNavigation();
// Log a password successful submission event.
void LogPasswordSuccessfulSubmissionIndicatorEvent(
autofill::PasswordForm::SubmissionIndicatorEvent event);
} // namespace metrics_util
} // namespace password_manager
#endif // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_MANAGER_METRICS_UTIL_H_