| Index: components/autofill/core/browser/autofill_metrics.cc
|
| diff --git a/components/autofill/core/browser/autofill_metrics.cc b/components/autofill/core/browser/autofill_metrics.cc
|
| index e813b1836f15f987cf2b02cadc879399f5e49b74..5a4dd5ca65108f0e30ba85720a62d9eec60606fa 100644
|
| --- a/components/autofill/core/browser/autofill_metrics.cc
|
| +++ b/components/autofill/core/browser/autofill_metrics.cc
|
| @@ -5,6 +5,7 @@
|
| #include "components/autofill/core/browser/autofill_metrics.h"
|
|
|
| #include <algorithm>
|
| +#include <utility>
|
|
|
| #include "base/logging.h"
|
| #include "base/metrics/histogram_macros.h"
|
| @@ -22,6 +23,17 @@ const char kUKMCardUploadDecisionEntryName[] = "Autofill.CardUploadDecision";
|
| const char kUKMCardUploadDecisionMetricName[] = "UploadDecision";
|
| const char kUKMDeveloperEngagementEntryName[] = "Autofill.DeveloperEngagement";
|
| const char kUKMDeveloperEngagementMetricName[] = "DeveloperEngagement";
|
| +const char kUKMFormInteractionsEntryName[] = "Autofill.FormInteractions";
|
| +const char kUKMFormInteractionsAutofillFormSubmittedStateMetricName[] =
|
| + "AutofillFormSubmittedState";
|
| +const char kUKMFormInteractionsUserHappinessMetricMetricName[] =
|
| + "UserHappinessMetric";
|
| +const char kUKMFormInteractionsAddressFormEventMetricName[] =
|
| + "FormEvent.Address";
|
| +const char kUKMFormInteractionsCreditCardFormEventMetricName[] =
|
| + "FormEvent.CreditCard";
|
| +const char kUKMFormInteractionsUnmaskPromptEventMetricName[] =
|
| + "UnmaskPromptEvent";
|
| } // namespace internal
|
|
|
| namespace autofill {
|
| @@ -745,7 +757,9 @@ bool AutofillMetrics::LogUkm(ukm::UkmService* ukm_service,
|
| return true;
|
| }
|
|
|
| -AutofillMetrics::FormEventLogger::FormEventLogger(bool is_for_credit_card)
|
| +AutofillMetrics::FormEventLogger::FormEventLogger(
|
| + bool is_for_credit_card,
|
| + AutofillMetrics::UkmLogger* ukm_logger)
|
| : is_for_credit_card_(is_for_credit_card),
|
| is_server_data_available_(false),
|
| is_local_data_available_(false),
|
| @@ -757,7 +771,8 @@ AutofillMetrics::FormEventLogger::FormEventLogger(bool is_for_credit_card)
|
| has_logged_will_submit_(false),
|
| has_logged_submitted_(false),
|
| logged_suggestion_filled_was_server_data_(false),
|
| - logged_suggestion_filled_was_masked_server_card_(false) {}
|
| + logged_suggestion_filled_was_masked_server_card_(false),
|
| + ukm_logger_(ukm_logger) {}
|
|
|
| void AutofillMetrics::FormEventLogger::OnDidInteractWithAutofillableForm() {
|
| if (!has_logged_interacted_) {
|
| @@ -946,6 +961,89 @@ void AutofillMetrics::FormEventLogger::Log(FormEvent event) const {
|
| else
|
| name += ".WithBothServerAndLocalData";
|
| LogUMAHistogramEnumeration(name, event, NUM_FORM_EVENTS);
|
| +
|
| + if (is_for_credit_card_)
|
| + ukm_logger_->LogCreditCardFormEvent(event);
|
| + else
|
| + ukm_logger_->LogAddressFormEvent(event);
|
| +}
|
| +
|
| +AutofillMetrics::UkmLogger::UkmLogger(ukm::UkmService* ukm_service)
|
| + : ukm_service_(ukm_service) {}
|
| +
|
| +AutofillMetrics::UkmLogger::~UkmLogger() {
|
| + LogUkm();
|
| +}
|
| +
|
| +void AutofillMetrics::UkmLogger::LogAutofillFormSubmittedState(
|
| + const GURL& source_url,
|
| + AutofillFormSubmittedState state) {
|
| + if (source_url != url_) {
|
| + LOG(ERROR) << "source_url=" << source_url << ", url_=" << url_;
|
| + url_ = source_url;
|
| + }
|
| + metrics_.push_back(
|
| + std::make_pair(AUTOFILL_FORM_SUBMITTED_STATE, static_cast<int>(state)));
|
| +}
|
| +
|
| +void AutofillMetrics::UkmLogger::LogUserHappinessMetric(
|
| + UserHappinessMetric metric) {
|
| + metrics_.push_back(
|
| + std::make_pair(USER_HAPPINESS_METRIC, static_cast<int>(metric)));
|
| +}
|
| +
|
| +void AutofillMetrics::UkmLogger::LogAddressFormEvent(FormEvent event) {
|
| + metrics_.push_back(
|
| + std::make_pair(ADDRESS_FORM_EVENT, static_cast<int>(event)));
|
| +}
|
| +
|
| +void AutofillMetrics::UkmLogger::LogCreditCardFormEvent(FormEvent event) {
|
| + metrics_.push_back(
|
| + std::make_pair(CREDIT_CARD_FORM_EVENT, static_cast<int>(event)));
|
| +}
|
| +
|
| +void AutofillMetrics::UkmLogger::LogUnmaskPromptEvent(UnmaskPromptEvent event) {
|
| + metrics_.push_back(
|
| + std::make_pair(UNMASK_PROMPT_EVENT, static_cast<int>(event)));
|
| +}
|
| +
|
| +void AutofillMetrics::UkmLogger::LogUkm() {
|
| + if (!IsUkmLoggingEnabled() || !ukm_service_ || !url_.is_valid() ||
|
| + metrics_.empty()) {
|
| + return;
|
| + }
|
| +
|
| + int32_t source_id = ukm_service_->GetNewSourceID();
|
| + ukm_service_->UpdateSourceURL(source_id, url_);
|
| + std::unique_ptr<ukm::UkmEntryBuilder> builder = ukm_service_->GetEntryBuilder(
|
| + source_id, internal::kUKMFormInteractionsEntryName);
|
| +
|
| + for (auto it = metrics_.begin(); it != metrics_.end(); ++it) {
|
| + const char* metric_name = nullptr;
|
| + switch (it->first) {
|
| + case AutofillMetrics::UkmLogger::AUTOFILL_FORM_SUBMITTED_STATE:
|
| + metric_name =
|
| + internal::kUKMFormInteractionsAutofillFormSubmittedStateMetricName;
|
| + break;
|
| + case AutofillMetrics::UkmLogger::USER_HAPPINESS_METRIC:
|
| + metric_name =
|
| + internal::kUKMFormInteractionsUserHappinessMetricMetricName;
|
| + break;
|
| + case AutofillMetrics::UkmLogger::ADDRESS_FORM_EVENT:
|
| + metric_name = internal::kUKMFormInteractionsAddressFormEventMetricName;
|
| + break;
|
| + case AutofillMetrics::UkmLogger::CREDIT_CARD_FORM_EVENT:
|
| + metric_name =
|
| + internal::kUKMFormInteractionsCreditCardFormEventMetricName;
|
| + break;
|
| + case AutofillMetrics::UkmLogger::UNMASK_PROMPT_EVENT:
|
| + metric_name = internal::kUKMFormInteractionsUnmaskPromptEventMetricName;
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| + builder->AddMetric(metric_name, it->second);
|
| + }
|
| }
|
|
|
| } // namespace autofill
|
|
|