Home | History | Annotate | Download | only in autofill
      1 // Copyright (c) 2011 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_AUTOFILL_AUTOFILL_METRICS_H_
      6 #define CHROME_BROWSER_AUTOFILL_AUTOFILL_METRICS_H_
      7 #pragma once
      8 
      9 #include <stddef.h>
     10 #include <string>
     11 
     12 #include "base/basictypes.h"
     13 #include "chrome/browser/autofill/field_types.h"
     14 
     15 class AutofillMetrics {
     16  public:
     17   enum CreditCardInfoBarMetric {
     18     CREDIT_CARD_INFOBAR_SHOWN = 0,  // We showed an infobar prompting to save
     19                                     // credit card info.
     20     CREDIT_CARD_INFOBAR_ACCEPTED,   // The user explicitly accepted the infobar.
     21     CREDIT_CARD_INFOBAR_DENIED,     // The user explicitly denied the infobar.
     22     CREDIT_CARD_INFOBAR_IGNORED,    // The user completely ignored the infobar
     23                                     // (logged on tab close).
     24     NUM_CREDIT_CARD_INFO_BAR_METRICS
     25   };
     26 
     27   // Metrics measuring how well we predict field types. Exactly one metric from
     28   // each set is logged for each fillable field in a submitted form.
     29   enum HeuristicTypeQualityMetric {
     30     HEURISTIC_TYPE_UNKNOWN = 0,  // Our heuristics offered no prediction.
     31     HEURISTIC_TYPE_MATCH,        // Our heuristics predicted correctly.
     32     HEURISTIC_TYPE_MISMATCH,     // Our heuristics predicted incorrectly.
     33     NUM_HEURISTIC_TYPE_QUALITY_METRICS
     34   };
     35   enum ServerTypeQualityMetric {
     36     SERVER_TYPE_UNKNOWN = 0,  // The server offered no prediction.
     37     SERVER_TYPE_MATCH,        // The server predicted correctly.
     38     SERVER_TYPE_MISMATCH,     // The server predicted incorrectly.
     39     NUM_SERVER_TYPE_QUALITY_METRICS
     40   };
     41   enum PredictedTypeQualityMetric {
     42     PREDICTED_TYPE_UNKNOWN = 0,  // Neither server nor heuristics offered a
     43                                  // prediction.
     44     PREDICTED_TYPE_MATCH,        // Overall, predicted correctly.
     45     PREDICTED_TYPE_MISMATCH,     // Overall, predicted incorrectly.
     46     NUM_PREDICTED_TYPE_QUALITY_METRICS
     47   };
     48 
     49   enum QualityMetric {
     50     // Logged for each potentially fillable field in a submitted form.
     51     FIELD_SUBMITTED = 0,
     52 
     53     // A simple successs metric, logged for each field that returns true for
     54     // |is_autofilled()|.
     55     FIELD_AUTOFILLED,
     56 
     57     // A simple failure metric, logged for each field that returns false for
     58     // |is_autofilled()| but has a value that is present in the personal data
     59     // manager.
     60     FIELD_NOT_AUTOFILLED,
     61 
     62     // The below are only logged when |FIELD_AUTOFILL_FAILED| is also logged.
     63     NOT_AUTOFILLED_HEURISTIC_TYPE_UNKNOWN,
     64     NOT_AUTOFILLED_HEURISTIC_TYPE_MATCH,
     65     NOT_AUTOFILLED_HEURISTIC_TYPE_MISMATCH,
     66     NOT_AUTOFILLED_SERVER_TYPE_UNKNOWN,
     67     NOT_AUTOFILLED_SERVER_TYPE_MATCH,
     68     NOT_AUTOFILLED_SERVER_TYPE_MISMATCH,
     69     NUM_QUALITY_METRICS
     70   };
     71 
     72   // Each of these is logged at most once per query to the server, which in turn
     73   // occurs at most once per page load.
     74   enum ServerQueryMetric {
     75     QUERY_SENT = 0,           // Sent a query to the server.
     76     QUERY_RESPONSE_RECEIVED,  // Received a response.
     77     QUERY_RESPONSE_PARSED,    // Successfully parsed the server response.
     78 
     79     // The response was parseable, but provided no improvements relative to our
     80     // heuristics.
     81     QUERY_RESPONSE_MATCHED_LOCAL_HEURISTICS,
     82 
     83     // Our heuristics detected at least one auto-fillable field, and the server
     84     // response overrode the type of at least one field.
     85     QUERY_RESPONSE_OVERRODE_LOCAL_HEURISTICS,
     86 
     87     // Our heuristics did not detect any auto-fillable fields, but the server
     88     // response did detect at least one.
     89     QUERY_RESPONSE_WITH_NO_LOCAL_HEURISTICS,
     90     NUM_SERVER_QUERY_METRICS
     91   };
     92 
     93   AutofillMetrics();
     94   virtual ~AutofillMetrics();
     95 
     96   virtual void Log(CreditCardInfoBarMetric metric) const;
     97   virtual void Log(HeuristicTypeQualityMetric metric,
     98                    AutofillFieldType field_type,
     99                    const std::string& experiment_id) const;
    100   virtual void Log(PredictedTypeQualityMetric metric,
    101                    AutofillFieldType field_type,
    102                    const std::string& experiment_id) const;
    103   virtual void Log(QualityMetric metric,
    104                    const std::string& experiment_id) const;
    105   virtual void Log(ServerQueryMetric metric) const;
    106   virtual void Log(ServerTypeQualityMetric metric,
    107                    AutofillFieldType field_type,
    108                    const std::string& experiment_id) const;
    109 
    110   // This should be called each time a page containing forms is loaded.
    111   virtual void LogIsAutofillEnabledAtPageLoad(bool enabled) const;
    112 
    113   // This should be called each time a new profile is launched.
    114   virtual void LogIsAutofillEnabledAtStartup(bool enabled) const;
    115 
    116   // This should be called each time a new profile is launched.
    117   virtual void LogStoredProfileCount(size_t num_profiles) const;
    118 
    119   // Log the number of Autofill suggestions presented to the user when filling a
    120   // form.
    121   virtual void LogAddressSuggestionsCount(size_t num_suggestions) const;
    122 
    123  private:
    124   DISALLOW_COPY_AND_ASSIGN(AutofillMetrics);
    125 };
    126 
    127 #endif  // CHROME_BROWSER_AUTOFILL_AUTOFILL_METRICS_H_
    128