1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// found in the LICENSE file.
4201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
5201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#ifndef CHROME_BROWSER_AUTOFILL_AUTOFILL_METRICS_H_
6201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#define CHROME_BROWSER_AUTOFILL_AUTOFILL_METRICS_H_
7201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#pragma once
8201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <stddef.h>
1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <string>
1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
1221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "base/basictypes.h"
13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/autofill/field_types.h"
1421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass AutofillMetrics {
1621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen public:
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  enum CreditCardInfoBarMetric {
18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    CREDIT_CARD_INFOBAR_SHOWN = 0,  // We showed an infobar prompting to save
19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                    // credit card info.
20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    CREDIT_CARD_INFOBAR_ACCEPTED,   // The user explicitly accepted the infobar.
21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    CREDIT_CARD_INFOBAR_DENIED,     // The user explicitly denied the infobar.
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    CREDIT_CARD_INFOBAR_IGNORED,    // The user completely ignored the infobar
23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                    // (logged on tab close).
24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NUM_CREDIT_CARD_INFO_BAR_METRICS
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  };
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Metrics measuring how well we predict field types. Exactly one metric from
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // each set is logged for each fillable field in a submitted form.
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  enum HeuristicTypeQualityMetric {
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    HEURISTIC_TYPE_UNKNOWN = 0,  // Our heuristics offered no prediction.
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    HEURISTIC_TYPE_MATCH,        // Our heuristics predicted correctly.
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    HEURISTIC_TYPE_MISMATCH,     // Our heuristics predicted incorrectly.
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NUM_HEURISTIC_TYPE_QUALITY_METRICS
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  };
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  enum ServerTypeQualityMetric {
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    SERVER_TYPE_UNKNOWN = 0,  // The server offered no prediction.
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    SERVER_TYPE_MATCH,        // The server predicted correctly.
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    SERVER_TYPE_MISMATCH,     // The server predicted incorrectly.
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NUM_SERVER_TYPE_QUALITY_METRICS
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  };
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  enum PredictedTypeQualityMetric {
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    PREDICTED_TYPE_UNKNOWN = 0,  // Neither server nor heuristics offered a
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                 // prediction.
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    PREDICTED_TYPE_MATCH,        // Overall, predicted correctly.
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    PREDICTED_TYPE_MISMATCH,     // Overall, predicted incorrectly.
46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NUM_PREDICTED_TYPE_QUALITY_METRICS
4721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  };
4821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
4921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  enum QualityMetric {
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    // Logged for each potentially fillable field in a submitted form.
5121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    FIELD_SUBMITTED = 0,
52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
5321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    // A simple successs metric, logged for each field that returns true for
54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    // |is_autofilled()|.
5521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    FIELD_AUTOFILLED,
56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
5721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    // A simple failure metric, logged for each field that returns false for
58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    // |is_autofilled()| but has a value that is present in the personal data
5921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    // manager.
60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    FIELD_NOT_AUTOFILLED,
61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    // The below are only logged when |FIELD_AUTOFILL_FAILED| is also logged.
63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NOT_AUTOFILLED_HEURISTIC_TYPE_UNKNOWN,
64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NOT_AUTOFILLED_HEURISTIC_TYPE_MATCH,
65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NOT_AUTOFILLED_HEURISTIC_TYPE_MISMATCH,
66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NOT_AUTOFILLED_SERVER_TYPE_UNKNOWN,
67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NOT_AUTOFILLED_SERVER_TYPE_MATCH,
68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NOT_AUTOFILLED_SERVER_TYPE_MISMATCH,
6921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    NUM_QUALITY_METRICS
7021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  };
71201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Each of these is logged at most once per query to the server, which in turn
73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // occurs at most once per page load.
74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  enum ServerQueryMetric {
75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    QUERY_SENT = 0,           // Sent a query to the server.
76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    QUERY_RESPONSE_RECEIVED,  // Received a response.
77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    QUERY_RESPONSE_PARSED,    // Successfully parsed the server response.
78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    // The response was parseable, but provided no improvements relative to our
80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    // heuristics.
81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    QUERY_RESPONSE_MATCHED_LOCAL_HEURISTICS,
82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    // Our heuristics detected at least one auto-fillable field, and the server
84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    // response overrode the type of at least one field.
85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    QUERY_RESPONSE_OVERRODE_LOCAL_HEURISTICS,
86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    // Our heuristics did not detect any auto-fillable fields, but the server
88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    // response did detect at least one.
89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    QUERY_RESPONSE_WITH_NO_LOCAL_HEURISTICS,
90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    NUM_SERVER_QUERY_METRICS
91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  };
92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
93dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  AutofillMetrics();
94dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual ~AutofillMetrics();
95201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void Log(CreditCardInfoBarMetric metric) const;
97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void Log(HeuristicTypeQualityMetric metric,
98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                   AutofillFieldType field_type,
99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                   const std::string& experiment_id) const;
100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void Log(PredictedTypeQualityMetric metric,
101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                   AutofillFieldType field_type,
102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                   const std::string& experiment_id) const;
10372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual void Log(QualityMetric metric,
10472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                   const std::string& experiment_id) const;
105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void Log(ServerQueryMetric metric) const;
106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void Log(ServerTypeQualityMetric metric,
107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                   AutofillFieldType field_type,
108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                   const std::string& experiment_id) const;
109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // This should be called each time a page containing forms is loaded.
111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void LogIsAutofillEnabledAtPageLoad(bool enabled) const;
112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // This should be called each time a new profile is launched.
114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void LogIsAutofillEnabledAtStartup(bool enabled) const;
115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // This should be called each time a new profile is launched.
117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void LogStoredProfileCount(size_t num_profiles) const;
11821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Log the number of Autofill suggestions presented to the user when filling a
120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // form.
121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void LogAddressSuggestionsCount(size_t num_suggestions) const;
122dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
12321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen private:
124dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  DISALLOW_COPY_AND_ASSIGN(AutofillMetrics);
12521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen};
126201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
127201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#endif  // CHROME_BROWSER_AUTOFILL_AUTOFILL_METRICS_H_
128