C++程序  |  128行  |  4.99 KB

// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_AUTOFILL_AUTOFILL_METRICS_H_
#define CHROME_BROWSER_AUTOFILL_AUTOFILL_METRICS_H_
#pragma once

#include <stddef.h>
#include <string>

#include "base/basictypes.h"
#include "chrome/browser/autofill/field_types.h"

class AutofillMetrics {
 public:
  enum CreditCardInfoBarMetric {
    CREDIT_CARD_INFOBAR_SHOWN = 0,  // We showed an infobar prompting to save
                                    // credit card info.
    CREDIT_CARD_INFOBAR_ACCEPTED,   // The user explicitly accepted the infobar.
    CREDIT_CARD_INFOBAR_DENIED,     // The user explicitly denied the infobar.
    CREDIT_CARD_INFOBAR_IGNORED,    // The user completely ignored the infobar
                                    // (logged on tab close).
    NUM_CREDIT_CARD_INFO_BAR_METRICS
  };

  // Metrics measuring how well we predict field types. Exactly one metric from
  // each set is logged for each fillable field in a submitted form.
  enum HeuristicTypeQualityMetric {
    HEURISTIC_TYPE_UNKNOWN = 0,  // Our heuristics offered no prediction.
    HEURISTIC_TYPE_MATCH,        // Our heuristics predicted correctly.
    HEURISTIC_TYPE_MISMATCH,     // Our heuristics predicted incorrectly.
    NUM_HEURISTIC_TYPE_QUALITY_METRICS
  };
  enum ServerTypeQualityMetric {
    SERVER_TYPE_UNKNOWN = 0,  // The server offered no prediction.
    SERVER_TYPE_MATCH,        // The server predicted correctly.
    SERVER_TYPE_MISMATCH,     // The server predicted incorrectly.
    NUM_SERVER_TYPE_QUALITY_METRICS
  };
  enum PredictedTypeQualityMetric {
    PREDICTED_TYPE_UNKNOWN = 0,  // Neither server nor heuristics offered a
                                 // prediction.
    PREDICTED_TYPE_MATCH,        // Overall, predicted correctly.
    PREDICTED_TYPE_MISMATCH,     // Overall, predicted incorrectly.
    NUM_PREDICTED_TYPE_QUALITY_METRICS
  };

  enum QualityMetric {
    // Logged for each potentially fillable field in a submitted form.
    FIELD_SUBMITTED = 0,

    // A simple successs metric, logged for each field that returns true for
    // |is_autofilled()|.
    FIELD_AUTOFILLED,

    // A simple failure metric, logged for each field that returns false for
    // |is_autofilled()| but has a value that is present in the personal data
    // manager.
    FIELD_NOT_AUTOFILLED,

    // The below are only logged when |FIELD_AUTOFILL_FAILED| is also logged.
    NOT_AUTOFILLED_HEURISTIC_TYPE_UNKNOWN,
    NOT_AUTOFILLED_HEURISTIC_TYPE_MATCH,
    NOT_AUTOFILLED_HEURISTIC_TYPE_MISMATCH,
    NOT_AUTOFILLED_SERVER_TYPE_UNKNOWN,
    NOT_AUTOFILLED_SERVER_TYPE_MATCH,
    NOT_AUTOFILLED_SERVER_TYPE_MISMATCH,
    NUM_QUALITY_METRICS
  };

  // Each of these is logged at most once per query to the server, which in turn
  // occurs at most once per page load.
  enum ServerQueryMetric {
    QUERY_SENT = 0,           // Sent a query to the server.
    QUERY_RESPONSE_RECEIVED,  // Received a response.
    QUERY_RESPONSE_PARSED,    // Successfully parsed the server response.

    // The response was parseable, but provided no improvements relative to our
    // heuristics.
    QUERY_RESPONSE_MATCHED_LOCAL_HEURISTICS,

    // Our heuristics detected at least one auto-fillable field, and the server
    // response overrode the type of at least one field.
    QUERY_RESPONSE_OVERRODE_LOCAL_HEURISTICS,

    // Our heuristics did not detect any auto-fillable fields, but the server
    // response did detect at least one.
    QUERY_RESPONSE_WITH_NO_LOCAL_HEURISTICS,
    NUM_SERVER_QUERY_METRICS
  };

  AutofillMetrics();
  virtual ~AutofillMetrics();

  virtual void Log(CreditCardInfoBarMetric metric) const;
  virtual void Log(HeuristicTypeQualityMetric metric,
                   AutofillFieldType field_type,
                   const std::string& experiment_id) const;
  virtual void Log(PredictedTypeQualityMetric metric,
                   AutofillFieldType field_type,
                   const std::string& experiment_id) const;
  virtual void Log(QualityMetric metric,
                   const std::string& experiment_id) const;
  virtual void Log(ServerQueryMetric metric) const;
  virtual void Log(ServerTypeQualityMetric metric,
                   AutofillFieldType field_type,
                   const std::string& experiment_id) const;

  // This should be called each time a page containing forms is loaded.
  virtual void LogIsAutofillEnabledAtPageLoad(bool enabled) const;

  // This should be called each time a new profile is launched.
  virtual void LogIsAutofillEnabledAtStartup(bool enabled) const;

  // This should be called each time a new profile is launched.
  virtual void LogStoredProfileCount(size_t num_profiles) const;

  // Log the number of Autofill suggestions presented to the user when filling a
  // form.
  virtual void LogAddressSuggestionsCount(size_t num_suggestions) const;

 private:
  DISALLOW_COPY_AND_ASSIGN(AutofillMetrics);
};

#endif  // CHROME_BROWSER_AUTOFILL_AUTOFILL_METRICS_H_