1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_MANAGER_METRICS_UTIL_H_
6#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_MANAGER_METRICS_UTIL_H_
7
8#include <string>
9
10class PrefService;
11
12namespace password_manager {
13
14namespace metrics_util {
15
16// Metrics: "PasswordManager.InfoBarResponse"
17enum ResponseType {
18  NO_RESPONSE = 0,
19  REMEMBER_PASSWORD,
20  NEVER_REMEMBER_PASSWORD,
21  INFOBAR_DISMISSED,
22  NUM_RESPONSE_TYPES,
23};
24
25// Metrics: "PasswordBubble.DisplayDisposition"
26enum UIDisplayDisposition {
27  AUTOMATIC_WITH_PASSWORD_PENDING = 0,
28  MANUAL_WITH_PASSWORD_PENDING,
29  MANUAL_MANAGE_PASSWORDS,
30  MANUAL_BLACKLISTED,
31  AUTOMATIC_GENERATED_PASSWORD_CONFIRMATION,
32  NUM_DISPLAY_DISPOSITIONS
33};
34
35// Metrics: "PasswordManager.UIDismissalReason"
36enum UIDismissalReason {
37  // We use this to mean both "Bubble lost focus" and "No interaction with the
38  // infobar", depending on which experiment is active.
39  NO_DIRECT_INTERACTION = 0,
40  CLICKED_SAVE,
41  CLICKED_NOPE,
42  CLICKED_NEVER,
43  CLICKED_MANAGE,
44  CLICKED_DONE,
45  CLICKED_UNBLACKLIST,
46  CLICKED_OK,
47  NUM_UI_RESPONSES,
48
49  // If we add the omnibox icon _without_ intending to display the bubble,
50  // we actually call Close() after creating the bubble view. We don't want
51  // that to count in the metrics, so we need this placeholder value.
52  NOT_DISPLAYED
53};
54
55// We monitor the performance of the save password heuristic for a handful of
56// domains. For privacy reasons we are not reporting UMA signals by domain, but
57// by a domain group. A domain group can contain multiple domains, and a domain
58// can be contained in multiple groups.
59// For more information see http://goo.gl/vUuFd5.
60
61// The number of groups in which each monitored website appears.
62// It is a half of the total number of groups.
63const size_t kGroupsPerDomain = 10u;
64
65// Check whether the |url_host| is monitored or not. If yes, we return
66// the id of the group which contains the domain name otherwise
67// returns 0. |pref_service| needs to be the profile preference service.
68size_t MonitoredDomainGroupId(const std::string& url_host,
69                              PrefService* pref_service);
70
71// A version of the UMA_HISTOGRAM_ENUMERATION macro that allows the |name|
72// to vary over the program's runtime.
73void LogUMAHistogramEnumeration(const std::string& name,
74                                int sample,
75                                int boundary_value);
76
77// A version of the UMA_HISTOGRAM_BOOLEAN macro that allows the |name|
78// to vary over the program's runtime.
79void LogUMAHistogramBoolean(const std::string& name, bool sample);
80
81// Returns a string which contains group_|group_id|. If the
82// |group_id| corresponds to an unmonitored domain returns an empty string.
83std::string GroupIdToString(size_t group_id);
84
85// Log the |reason| a user dismissed the password manager UI.
86void LogUIDismissalReason(UIDismissalReason reason);
87
88// Given a ResponseType, log the appropriate UIResponse. We'll use this
89// mapping to migrate from "PasswordManager.InfoBarResponse" to
90// "PasswordManager.UIDismissalReason" so we can accurately evaluate the
91// impact of the bubble UI.
92//
93// TODO(mkwst): Drop this (and the infobar metric itself) once the new metric
94// has rolled out to stable.
95void LogUIDismissalReason(ResponseType type);
96
97// Log the appropriate display disposition.
98void LogUIDisplayDisposition(UIDisplayDisposition disposition);
99
100}  // namespace metrics_util
101
102}  // namespace password_manager
103
104#endif  // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_MANAGER_METRICS_UTIL_H_
105