Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / profiles / profile_metrics.h
1 // Copyright (c) 2012 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 CHROME_BROWSER_PROFILES_PROFILE_METRICS_H_
6 #define CHROME_BROWSER_PROFILES_PROFILE_METRICS_H_
7
8 #include <stddef.h>
9 #include <string>
10
11 #include "base/basictypes.h"
12 #include "chrome/browser/signin/signin_header_helper.h"
13
14 class Profile;
15 class ProfileManager;
16
17 namespace base {
18 class FilePath;
19 }
20
21 class ProfileMetrics {
22  public:
23   struct ProfileCounts {
24     size_t total;
25     size_t signedin;
26     size_t supervised;
27     size_t unused;
28     size_t gaia_icon;
29
30     ProfileCounts()
31         : total(0), signedin(0), supervised(0), unused(0), gaia_icon(0) {}
32   };
33
34   // Enum for counting the ways users were added.
35   enum ProfileAdd {
36     ADD_NEW_USER_ICON = 0,      // User adds new user from icon menu
37     ADD_NEW_USER_MENU,          // User adds new user from menu bar
38     ADD_NEW_USER_DIALOG,        // User adds new user from create-profile dialog
39     ADD_NEW_USER_MANAGER,       // User adds new user from User Manager
40     ADD_NEW_USER_LAST_DELETED,  // Auto-created after deleting last user
41     NUM_PROFILE_ADD_METRICS
42   };
43
44   enum ProfileDelete {
45     DELETE_PROFILE_SETTINGS = 0,  // Delete profile from settings page.
46     DELETE_PROFILE_USER_MANAGER,  // Delete profile from User Manager.
47     NUM_DELETE_PROFILE_METRICS
48   };
49
50   // Enum for counting the ways user profiles and menus were opened.
51   enum ProfileOpen {
52     NTP_AVATAR_BUBBLE = 0,    // User opens avatar icon menu from NTP
53     ICON_AVATAR_BUBBLE,       // User opens avatar icon menu from icon
54     SWITCH_PROFILE_ICON,      // User switches profiles from icon menu
55     SWITCH_PROFILE_MENU,      // User switches profiles from menu bar
56     SWITCH_PROFILE_DOCK,      // User switches profiles from dock (Mac-only)
57     OPEN_USER_MANAGER,        // User opens the User Manager
58     SWITCH_PROFILE_MANAGER,   // User switches profiles from the User Manager
59     SWITCH_PROFILE_UNLOCK,    // User switches to lockd profile via User Manager
60     SWITCH_PROFILE_GUEST,     // User switches to guest profile
61     NUM_PROFILE_OPEN_METRICS
62   };
63
64   // Enum for getting net counts for adding and deleting users.
65   enum ProfileNetUserCounts {
66     ADD_NEW_USER = 0,         // Total count of add new user
67     PROFILE_DELETED,          // User deleted a profile
68     NUM_PROFILE_NET_METRICS
69   };
70
71   // Sign in is logged once the user has entered their GAIA information.
72   // The options for sync are logged after the user has submitted the options
73   // form. See sync_setup_handler.h.
74   enum ProfileSync {
75     SYNC_CUSTOMIZE = 0,       // User decided to customize sync
76     SYNC_CHOOSE,              // User chose what to sync
77     SYNC_ENCRYPT,             // User has chosen to encrypt all data
78     SYNC_PASSPHRASE,          // User is using a passphrase
79     NUM_PROFILE_SYNC_METRICS
80   };
81
82   enum ProfileType {
83     ORIGINAL = 0,             // Refers to the original/default profile
84     SECONDARY,                // Refers to a user-created profile
85     NUM_PROFILE_TYPE_METRICS
86   };
87
88   enum ProfileGaia {
89     GAIA_OPT_IN = 0,          // User changed to GAIA photo as avatar
90     GAIA_OPT_OUT,             // User changed to not use GAIA photo as avatar
91     NUM_PROFILE_GAIA_METRICS
92   };
93
94   enum ProfileAuth {
95     AUTH_UNNECESSARY,     // Profile was not locked
96     AUTH_LOCAL,           // Profile was authenticated locally
97     AUTH_ONLINE,          // Profile was authenticated on-line
98     AUTH_FAILED,          // Profile failed authentication
99     AUTH_FAILED_OFFLINE,  // Profile failed authentication and was offline
100     NUM_PROFILE_AUTH_METRICS
101   };
102
103   // Enum for tracking user interactions with the user menu and user manager.
104   // Interactions initiated from the content area are logged into a different
105   // histogram from those that were initiated from the avatar button.
106   // An example of the interaction beginning in the content area is
107   // clicking "Manage Accounts" within account selection on a Google property.
108   enum ProfileDesktopMenu {
109     // User opened the user menu, and clicked lock.
110     PROFILE_DESKTOP_MENU_LOCK = 0,
111     // User opened the user menu, and removed an account.
112     PROFILE_DESKTOP_MENU_REMOVE_ACCT,
113     // User opened the user menu, and started adding an account.
114     PROFILE_DESKTOP_MENU_ADD_ACCT,
115     // User opened the user menu, and changed the profile name.
116     PROFILE_DESKTOP_MENU_EDIT_NAME,
117     // User opened the user menu, and started selecting a new profile image.
118     PROFILE_DESKTOP_MENU_EDIT_IMAGE,
119     // User opened the user menu, and opened the user manager.
120     PROFILE_DESKTOP_MENU_OPEN_USER_MANAGER,
121     NUM_PROFILE_DESKTOP_MENU_METRICS,
122   };
123
124 #if defined(OS_ANDROID)
125   // TODO(aruslan): http://crbug.com/379987 Move to a generator.
126   // Enum for tracking user interactions with the account management menu
127   // on Android.
128   // This should match its counterpart in AccountManagementScreenHelper.java.
129   enum ProfileAndroidAccountManagementMenu {
130     // User arrived at the Account management screen.
131     PROFILE_ANDROID_ACCOUNT_MANAGEMENT_MENU_VIEW = 0,
132     // User arrived at the Account management screen, and clicked Add account.
133     PROFILE_ANDROID_ACCOUNT_MANAGEMENT_MENU_ADD_ACCOUNT,
134     // User arrived at the Account management screen, and clicked Go incognito.
135     PROFILE_ANDROID_ACCOUNT_MANAGEMENT_MENU_GO_INCOGNITO,
136     // User arrived at the Account management screen, and clicked on primary.
137     PROFILE_ANDROID_ACCOUNT_MANAGEMENT_MENU_CLICK_PRIMARY_ACCOUNT,
138     // User arrived at the Account management screen, and clicked on secondary.
139     PROFILE_ANDROID_ACCOUNT_MANAGEMENT_MENU_CLICK_SECONDARY_ACCOUNT,
140     // User arrived at the Account management screen, toggled Chrome signout.
141     PROFILE_ANDROID_ACCOUNT_MANAGEMENT_MENU_TOGGLE_SIGNOUT,
142     // User toggled Chrome signout, and clicked Signout.
143     PROFILE_ANDROID_ACCOUNT_MANAGEMENT_MENU_SIGNOUT_SIGNOUT,
144     // User toggled Chrome signout, and clicked Cancel.
145     PROFILE_ANDROID_ACCOUNT_MANAGEMENT_MENU_SIGNOUT_CANCEL,
146     NUM_PROFILE_ANDROID_ACCOUNT_MANAGEMENT_MENU_METRICS,
147   };
148 #endif  // defined(OS_ANDROID)
149
150   // Enum for tracking user interactions with the 'Not You?' bubble that users
151   // can navigate to from the Upgrade bubble after upgrade.
152   enum ProfileNewAvatarMenuNotYou {
153     // User views the 'Not You?' bubble.
154     PROFILE_AVATAR_MENU_NOT_YOU_VIEW = 0,
155     // User selects back from within the 'Not You?' bubble.
156     PROFILE_AVATAR_MENU_NOT_YOU_BACK,
157     // User adds a person from within the 'Not You?' bubble.
158     PROFILE_AVATAR_MENU_NOT_YOU_ADD_PERSON,
159     // User chooses to disconnect (sign out) from within the 'Not You?' bubble.
160     PROFILE_AVATAR_MENU_NOT_YOU_DISCONNECT,
161     NUM_PROFILE_AVATAR_MENU_NOT_YOU_METRICS,
162   };
163
164   // Enum for tracking user interactions with the signin bubble that appears
165   // in the New Avatar Menu after using the Inline Signin flow.
166   enum ProfileNewAvatarMenuSignin {
167     // User viewed the signin bubble after successfully using the inline signin.
168     PROFILE_AVATAR_MENU_SIGNIN_VIEW = 0,
169     // User selected ok to dismiss the signin bubble.
170     PROFILE_AVATAR_MENU_SIGNIN_OK,
171     // User opened the settings from the signin bubble.
172     PROFILE_AVATAR_MENU_SIGNIN_SETTINGS,
173     NUM_PROFILE_AVATAR_MENU_SIGNIN_METRICS,
174   };
175
176   // Enum for tracking user interactions with the bubble that appears for all
177   // users in the new avatar menu after upgrading.
178   enum ProfileNewAvatarMenuUpgrade {
179     // User views the upgrade bubble.
180     PROFILE_AVATAR_MENU_UPGRADE_VIEW = 0,
181     // User dismissed the upgrade bubble.
182     PROFILE_AVATAR_MENU_UPGRADE_DISMISS,
183     // User selects 'What's New' in the upgrade bubble.
184     PROFILE_AVATAR_MENU_UPGRADE_WHATS_NEW,
185     // User selects 'Not You?' in the upgrade bubble.
186     PROFILE_AVATAR_MENU_UPGRADE_NOT_YOU,
187     NUM_PROFILE_AVATAR_MENU_UPGRADE_METRICS,
188   };
189
190   static void UpdateReportedProfilesStatistics(ProfileManager* manager);
191   // Count and return summary information about the profiles currently in the
192   // |manager|. This information is returned in the output variable |counts|.
193   static bool CountProfileInformation(ProfileManager* manager,
194                                       ProfileCounts* counts);
195
196   static void LogNumberOfProfiles(ProfileManager* manager);
197   static void LogProfileAddNewUser(ProfileAdd metric);
198   static void LogProfileAvatarSelection(size_t icon_index);
199   static void LogProfileDeleteUser(ProfileDelete metric);
200   static void LogProfileOpenMethod(ProfileOpen metric);
201   static void LogProfileSwitchGaia(ProfileGaia metric);
202   static void LogProfileSwitchUser(ProfileOpen metric);
203   static void LogProfileSyncInfo(ProfileSync metric);
204   static void LogProfileAuthResult(ProfileAuth metric);
205   static void LogProfileDesktopMenu(ProfileDesktopMenu metric,
206                                     signin::GAIAServiceType gaia_service);
207   static void LogProfileDelete(bool profile_was_signed_in);
208   static void LogProfileNewAvatarMenuNotYou(ProfileNewAvatarMenuNotYou metric);
209   static void LogProfileNewAvatarMenuSignin(ProfileNewAvatarMenuSignin metric);
210   static void LogProfileNewAvatarMenuUpgrade(
211       ProfileNewAvatarMenuUpgrade metric);
212
213 #if defined(OS_ANDROID)
214   static void LogProfileAndroidAccountManagementMenu(
215       ProfileAndroidAccountManagementMenu metric,
216       signin::GAIAServiceType gaia_service);
217 #endif  // defined(OS_ANDROID)
218
219   // These functions should only be called on the UI thread because they hook
220   // into g_browser_process through a helper function.
221   static void LogProfileLaunch(Profile* profile);
222   static void LogProfileSyncSignIn(const base::FilePath& profile_path);
223   static void LogProfileUpdate(const base::FilePath& profile_path);
224 };
225
226
227 #endif  // CHROME_BROWSER_PROFILES_PROFILE_METRICS_H_