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