Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(375)

Unified Diff: components/autofill/core/browser/autofill_metrics_unittest.cc

Issue 2940983003: [autofill] Add UKM for field type prediction quality and autofill outcome. (Closed)
Patch Set: fix a comment Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/autofill/core/browser/autofill_metrics_unittest.cc
diff --git a/components/autofill/core/browser/autofill_metrics_unittest.cc b/components/autofill/core/browser/autofill_metrics_unittest.cc
index 30543c4d879551ba523a5f519e861ff882c2e971..140539564e2c8065ab97d87a46ad88ab2f1b59eb 100644
--- a/components/autofill/core/browser/autofill_metrics_unittest.cc
+++ b/components/autofill/core/browser/autofill_metrics_unittest.cc
@@ -59,6 +59,9 @@ using ::testing::UnorderedPointwise;
namespace autofill {
namespace {
+using ExpectedUkmMetrics =
+ std::vector<std::vector<std::pair<const char*, int64_t>>>;
+
class TestPersonalDataManager : public PersonalDataManager {
public:
TestPersonalDataManager()
@@ -343,14 +346,14 @@ MATCHER(CompareMetrics, "") {
}
void VerifyDeveloperEngagementUkm(
+ const ukm::TestUkmRecorder& ukm_recorder,
const FormData& form,
- const ukm::TestUkmRecorder* ukm_recorder,
const std::vector<int64_t>& expected_metric_values) {
- const ukm::mojom::UkmEntry* entry = ukm_recorder->GetEntryForEntryName(
+ const ukm::mojom::UkmEntry* entry = ukm_recorder.GetEntryForEntryName(
internal::kUKMDeveloperEngagementEntryName);
ASSERT_NE(nullptr, entry);
const ukm::UkmSource* source =
- ukm_recorder->GetSourceForSourceId(entry->source_id);
+ ukm_recorder.GetSourceForSourceId(entry->source_id);
ASSERT_NE(nullptr, source);
EXPECT_EQ(form.origin, source->url());
@@ -374,20 +377,18 @@ MATCHER(CompareMetricsIgnoringMillisecondsSinceFormParsed, "") {
rhs.first == internal::kUKMMillisecondsSinceFormParsedMetricName));
}
-void VerifyFormInteractionUkm(
- const FormData& form,
- const ukm::TestUkmRecorder* ukm_recorder,
- const char* event_name,
- const std::vector<std::vector<std::pair<const char*, int64_t>>>&
- expected_metrics) {
+void VerifyFormInteractionUkm(const ukm::TestUkmRecorder& ukm_recorder,
+ const FormData& form,
+ const char* event_name,
+ const ExpectedUkmMetrics& expected_metrics) {
size_t expected_metrics_index = 0;
- for (size_t i = 0; i < ukm_recorder->entries_count(); ++i) {
- const ukm::mojom::UkmEntry* entry = ukm_recorder->GetEntry(i);
+ for (size_t i = 0; i < ukm_recorder.entries_count(); ++i) {
+ const ukm::mojom::UkmEntry* entry = ukm_recorder.GetEntry(i);
if (entry->event_hash != base::HashMetricName(event_name))
continue;
const ukm::UkmSource* source =
- ukm_recorder->GetSourceForSourceId(entry->source_id);
+ ukm_recorder.GetSourceForSourceId(entry->source_id);
ASSERT_NE(nullptr, source);
EXPECT_EQ(form.origin, source->url());
@@ -399,15 +400,68 @@ void VerifyFormInteractionUkm(
}
}
-void VerifySubmitFormUkm(const FormData& form,
- const ukm::TestUkmRecorder* ukm_recorder,
+void VerifySubmitFormUkm(const ukm::TestUkmRecorder& ukm_recorder,
+ const FormData& form,
AutofillMetrics::AutofillFormSubmittedState state) {
VerifyFormInteractionUkm(
- form, ukm_recorder, internal::kUKMFormSubmittedEntryName,
+ ukm_recorder, form, internal::kUKMFormSubmittedEntryName,
{{{internal::kUKMAutofillFormSubmittedStateMetricName, state},
{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}}});
}
+void AppendFieldFillStatusUkm(const FormData& form,
+ ExpectedUkmMetrics* expected_metrics) {
+ int64_t form_signature = static_cast<int64_t>(CalculateFormSignature(form));
+ int64_t metric_type = static_cast<int64_t>(AutofillMetrics::TYPE_SUBMISSION);
+ for (const FormFieldData& field : form.fields) {
+ int64_t field_signature =
+ static_cast<int64_t>(CalculateFieldSignatureForField(field));
+ expected_metrics->push_back(
+ {{internal::kUKMMillisecondsSinceFormParsedMetricName, 0},
+ {internal::kUKMFormSignatureMetricName, form_signature},
+ {internal::kUKMFieldSignatureMetricName, field_signature},
+ {internal::kUKMValidationEventMetricName, metric_type},
+ {internal::kUKMIsAutofilledMetricName, field.is_autofilled ? 1 : 0},
+ {internal::kUKMWasPreviouslyAutofilledMetricName, 0}});
+ }
+}
+
+void AppendFieldTypeUkm(const FormData& form,
+ const std::vector<ServerFieldType>& heuristic_types,
+ const std::vector<ServerFieldType>& server_types,
+ const std::vector<ServerFieldType>& actual_types,
+ ExpectedUkmMetrics* expected_metrics) {
+ ASSERT_EQ(heuristic_types.size(), form.fields.size());
+ ASSERT_EQ(server_types.size(), form.fields.size());
+ ASSERT_EQ(actual_types.size(), form.fields.size());
+ int64_t form_signature = static_cast<int64_t>(CalculateFormSignature(form));
+ int64_t metric_type = static_cast<int64_t>(AutofillMetrics::TYPE_SUBMISSION);
+ std::vector<int64_t> prediction_sources{
+ AutofillMetrics::PREDICTION_SOURCE_HEURISTIC,
+ AutofillMetrics::PREDICTION_SOURCE_SERVER,
+ AutofillMetrics::PREDICTION_SOURCE_OVERALL};
+ for (size_t i = 0; i < form.fields.size(); ++i) {
+ const FormFieldData& field = form.fields[i];
+ int64_t field_signature =
+ static_cast<int64_t>(CalculateFieldSignatureForField(field));
+ for (int64_t source : prediction_sources) {
+ int64_t predicted_type = static_cast<int64_t>(
+ (source == AutofillMetrics::PREDICTION_SOURCE_SERVER
+ ? server_types
+ : heuristic_types)[i]);
+ int64_t actual_type = static_cast<int64_t>(actual_types[i]);
+ expected_metrics->push_back(
+ {{internal::kUKMMillisecondsSinceFormParsedMetricName, 0},
+ {internal::kUKMFormSignatureMetricName, form_signature},
+ {internal::kUKMFieldSignatureMetricName, field_signature},
+ {internal::kUKMValidationEventMetricName, metric_type},
+ {internal::kUKMPredictionSourceMetricName, source},
+ {internal::kUKMPredictedTypeMetricName, predicted_type},
+ {internal::kUKMActualTypeMetricName, actual_type}});
+ }
+ }
+}
+
} // namespace
// This is defined in the autofill_metrics.cc implementation file.
@@ -809,7 +863,7 @@ TEST_P(QualityMetricsTest, Classification) {
form.origin = GURL("http://example.com/form.html");
form.action = GURL("http://example.com/submit.html");
- std::vector<ServerFieldType> heuristic_types, server_types;
+ std::vector<ServerFieldType> heuristic_types, server_types, actual_types;
AutofillField field;
// Add a first name field, that is predicted correctly.
@@ -818,6 +872,7 @@ TEST_P(QualityMetricsTest, Classification) {
form.fields.push_back(field);
heuristic_types.push_back(NAME_FIRST);
server_types.push_back(NAME_FIRST);
+ actual_types.push_back(NAME_FIRST);
// Add a last name field, that is predicted correctly.
test::CreateTestFormField("last", "last", ValueForType(NAME_LAST), "test",
@@ -825,6 +880,7 @@ TEST_P(QualityMetricsTest, Classification) {
form.fields.push_back(field);
heuristic_types.push_back(NAME_LAST);
server_types.push_back(NAME_LAST);
+ actual_types.push_back(NAME_LAST);
// Add an empty or unknown field, that is predicted as per the test params.
test::CreateTestFormField("Unknown", "Unknown",
@@ -833,6 +889,12 @@ TEST_P(QualityMetricsTest, Classification) {
heuristic_types.push_back(predicted_type);
server_types.push_back(predicted_type == UNKNOWN_TYPE ? NO_SERVER_DATA
: predicted_type);
+ // Resolve any field type ambiguity.
+ if (actual_field_type == AMBIGUOUS_TYPE) {
+ if (predicted_type == COMPANY_NAME || predicted_type == NAME_MIDDLE)
+ actual_field_type = predicted_type;
+ }
+ actual_types.push_back(actual_field_type);
// Simulate having seen this form on page load.
autofill_manager_->AddSeenForm(form, heuristic_types, server_types);
@@ -841,11 +903,12 @@ TEST_P(QualityMetricsTest, Classification) {
base::HistogramTester histogram_tester;
autofill_manager_->SubmitForm(form, TimeTicks::Now());
- // Resolve any field type ambiguity.
- if (actual_field_type == AMBIGUOUS_TYPE) {
- if (predicted_type == COMPANY_NAME || predicted_type == NAME_MIDDLE)
- actual_field_type = predicted_type;
- }
+ ExpectedUkmMetrics expected_ukm_metrics;
+ AppendFieldTypeUkm(form, heuristic_types, server_types, actual_types,
+ &expected_ukm_metrics);
+ VerifyFormInteractionUkm(test_ukm_recorder_, form,
+ internal::kUKMFieldTypeEntryName,
+ expected_ukm_metrics);
// Validate the total samples and the crossed (predicted-to-actual) samples.
for (const auto& source : prediction_sources) {
@@ -1790,7 +1853,7 @@ TEST_F(AutofillMetricsTest,
ASSERT_EQ(1U, test_ukm_recorder_.entries_count());
ASSERT_EQ(1U, test_ukm_recorder_.sources_count());
VerifyDeveloperEngagementUkm(
- form, &test_ukm_recorder_,
+ test_ukm_recorder_, form,
{AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS});
}
}
@@ -1840,7 +1903,7 @@ TEST_F(AutofillMetricsTest,
ASSERT_EQ(1U, test_ukm_recorder_.entries_count());
ASSERT_EQ(1U, test_ukm_recorder_.sources_count());
VerifyDeveloperEngagementUkm(
- form, &test_ukm_recorder_,
+ test_ukm_recorder_, form,
{AutofillMetrics::FILLABLE_FORM_PARSED_WITH_TYPE_HINTS});
}
}
@@ -1872,7 +1935,7 @@ TEST_F(AutofillMetricsTest, UkmDeveloperEngagement_LogUpiVpaTypeHint) {
ASSERT_EQ(1U, test_ukm_recorder_.entries_count());
ASSERT_EQ(1U, test_ukm_recorder_.sources_count());
- VerifyDeveloperEngagementUkm(form, &test_ukm_recorder_,
+ VerifyDeveloperEngagementUkm(test_ukm_recorder_, form,
{AutofillMetrics::FORM_CONTAINS_UPI_VPA_HINT});
test_ukm_recorder_.Purge();
}
@@ -1887,7 +1950,7 @@ TEST_F(AutofillMetricsTest, UkmDeveloperEngagement_LogUpiVpaTypeHint) {
autofill_manager_->Reset();
VerifyDeveloperEngagementUkm(
- form, &test_ukm_recorder_,
+ test_ukm_recorder_, form,
{AutofillMetrics::FILLABLE_FORM_PARSED_WITH_TYPE_HINTS,
AutofillMetrics::FORM_CONTAINS_UPI_VPA_HINT});
}
@@ -2160,7 +2223,7 @@ TEST_F(AutofillMetricsTest, CreditCardCheckoutFlowUserActions) {
}
VerifyFormInteractionUkm(
- form, &test_ukm_recorder_, internal::kUKMSuggestionsShownEntryName,
+ test_ukm_recorder_, form, internal::kUKMSuggestionsShownEntryName,
{{{internal::kUKMMillisecondsSinceFormParsedMetricName, 0},
{internal::kUKMHeuristicTypeMetricName, CREDIT_CARD_NAME_FULL},
{internal::kUKMHtmlFieldTypeMetricName, HTML_TYPE_UNSPECIFIED},
@@ -2173,14 +2236,14 @@ TEST_F(AutofillMetricsTest, CreditCardCheckoutFlowUserActions) {
// call to |external_delegate_->DidAcceptSuggestion|. Second, from call to
// |autofill_manager_->FillOrPreviewForm|.
VerifyFormInteractionUkm(
- form, &test_ukm_recorder_, internal::kUKMSuggestionFilledEntryName,
+ test_ukm_recorder_, form, internal::kUKMSuggestionFilledEntryName,
{{{internal::kUKMRecordTypeMetricName, CreditCard::LOCAL_CARD},
{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}},
{{internal::kUKMRecordTypeMetricName, CreditCard::LOCAL_CARD},
{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}}});
// Expect |NON_FILLABLE_FORM_OR_NEW_DATA| in |AutofillFormSubmittedState|
// because |field.value| is empty in |DeterminePossibleFieldTypesForUpload|.
- VerifySubmitFormUkm(form, &test_ukm_recorder_,
+ VerifySubmitFormUkm(test_ukm_recorder_, form,
AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA);
}
@@ -2271,7 +2334,7 @@ TEST_F(AutofillMetricsTest, ProfileCheckoutFlowUserActions) {
}
VerifyFormInteractionUkm(
- form, &test_ukm_recorder_, internal::kUKMSuggestionsShownEntryName,
+ test_ukm_recorder_, form, internal::kUKMSuggestionsShownEntryName,
{{{internal::kUKMMillisecondsSinceFormParsedMetricName, 0},
{internal::kUKMHeuristicTypeMetricName, ADDRESS_HOME_STATE},
{internal::kUKMHtmlFieldTypeMetricName, HTML_TYPE_UNSPECIFIED},
@@ -2284,14 +2347,14 @@ TEST_F(AutofillMetricsTest, ProfileCheckoutFlowUserActions) {
// call to |external_delegate_->DidAcceptSuggestion|. Second, from call to
// |autofill_manager_->FillOrPreviewForm|.
VerifyFormInteractionUkm(
- form, &test_ukm_recorder_, internal::kUKMSuggestionFilledEntryName,
+ test_ukm_recorder_, form, internal::kUKMSuggestionFilledEntryName,
{{{internal::kUKMRecordTypeMetricName, AutofillProfile::LOCAL_PROFILE},
{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}},
{{internal::kUKMRecordTypeMetricName, AutofillProfile::LOCAL_PROFILE},
{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}}});
// Expect |NON_FILLABLE_FORM_OR_NEW_DATA| in |AutofillFormSubmittedState|
// because |field.value| is empty in |DeterminePossibleFieldTypesForUpload|.
- VerifySubmitFormUkm(form, &test_ukm_recorder_,
+ VerifySubmitFormUkm(test_ukm_recorder_, form,
AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA);
}
@@ -3002,7 +3065,7 @@ TEST_F(AutofillMetricsTest, CreditCardSubmittedFormEvents) {
"Autofill.FormEvents.CreditCard",
AutofillMetrics::FORM_EVENT_NO_SUGGESTION_SUBMITTED_ONCE, 1);
- VerifySubmitFormUkm(form, &test_ukm_recorder_,
+ VerifySubmitFormUkm(test_ukm_recorder_, form,
AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA);
}
@@ -3026,12 +3089,12 @@ TEST_F(AutofillMetricsTest, CreditCardSubmittedFormEvents) {
AutofillMetrics::FORM_EVENT_SUGGESTION_SHOWN_WILL_SUBMIT_ONCE, 1);
VerifyFormInteractionUkm(
- form, &test_ukm_recorder_, internal::kUKMSuggestionsShownEntryName,
+ test_ukm_recorder_, form, internal::kUKMSuggestionsShownEntryName,
{{{internal::kUKMMillisecondsSinceFormParsedMetricName, 0},
{internal::kUKMHeuristicTypeMetricName, CREDIT_CARD_NUMBER},
{internal::kUKMHtmlFieldTypeMetricName, HTML_TYPE_UNSPECIFIED},
{internal::kUKMServerTypeMetricName, CREDIT_CARD_NUMBER}}});
- VerifySubmitFormUkm(form, &test_ukm_recorder_,
+ VerifySubmitFormUkm(test_ukm_recorder_, form,
AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA);
}
@@ -3058,10 +3121,10 @@ TEST_F(AutofillMetricsTest, CreditCardSubmittedFormEvents) {
AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_SUBMITTED_ONCE, 1);
VerifyFormInteractionUkm(
- form, &test_ukm_recorder_, internal::kUKMSuggestionFilledEntryName,
+ test_ukm_recorder_, form, internal::kUKMSuggestionFilledEntryName,
{{{internal::kUKMRecordTypeMetricName, CreditCard::LOCAL_CARD},
{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}}});
- VerifySubmitFormUkm(form, &test_ukm_recorder_,
+ VerifySubmitFormUkm(test_ukm_recorder_, form,
AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA);
}
@@ -3089,10 +3152,10 @@ TEST_F(AutofillMetricsTest, CreditCardSubmittedFormEvents) {
AutofillMetrics::FORM_EVENT_SERVER_SUGGESTION_SUBMITTED_ONCE, 1);
VerifyFormInteractionUkm(
- form, &test_ukm_recorder_, internal::kUKMSuggestionFilledEntryName,
+ test_ukm_recorder_, form, internal::kUKMSuggestionFilledEntryName,
{{{internal::kUKMRecordTypeMetricName, CreditCard::FULL_SERVER_CARD},
{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}}});
- VerifySubmitFormUkm(form, &test_ukm_recorder_,
+ VerifySubmitFormUkm(test_ukm_recorder_, form,
AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA);
}
@@ -3122,14 +3185,14 @@ TEST_F(AutofillMetricsTest, CreditCardSubmittedFormEvents) {
1);
VerifyFormInteractionUkm(
- form, &test_ukm_recorder_, internal::kUKMSuggestionFilledEntryName,
+ test_ukm_recorder_, form, internal::kUKMSuggestionFilledEntryName,
{{{internal::kUKMRecordTypeMetricName, CreditCard::MASKED_SERVER_CARD},
{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}}});
VerifyFormInteractionUkm(
- form, &test_ukm_recorder_,
+ test_ukm_recorder_, form,
internal::kUKMSelectedMaskedServerCardEntryName,
{{{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}}});
- VerifySubmitFormUkm(form, &test_ukm_recorder_,
+ VerifySubmitFormUkm(test_ukm_recorder_, form,
AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA);
}
@@ -3155,7 +3218,7 @@ TEST_F(AutofillMetricsTest, CreditCardSubmittedFormEvents) {
autofill_manager_->SubmitForm(form, TimeTicks::Now());
VerifyFormInteractionUkm(
- form, &test_ukm_recorder_, internal::kUKMFormSubmittedEntryName,
+ test_ukm_recorder_, form, internal::kUKMFormSubmittedEntryName,
{{{internal::kUKMAutofillFormSubmittedStateMetricName,
AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA},
{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}}});
@@ -3163,7 +3226,7 @@ TEST_F(AutofillMetricsTest, CreditCardSubmittedFormEvents) {
autofill_manager_->SubmitForm(form, TimeTicks::Now());
VerifyFormInteractionUkm(
- form, &test_ukm_recorder_, internal::kUKMFormSubmittedEntryName,
+ test_ukm_recorder_, form, internal::kUKMFormSubmittedEntryName,
{{{internal::kUKMAutofillFormSubmittedStateMetricName,
AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA},
{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}},
@@ -3255,12 +3318,12 @@ TEST_F(AutofillMetricsTest, CreditCardSubmittedFormEvents) {
0);
VerifyFormInteractionUkm(
- form, &test_ukm_recorder_, internal::kUKMSuggestionsShownEntryName,
+ test_ukm_recorder_, form, internal::kUKMSuggestionsShownEntryName,
{{{internal::kUKMMillisecondsSinceFormParsedMetricName, 0},
{internal::kUKMHeuristicTypeMetricName, CREDIT_CARD_NUMBER},
{internal::kUKMHtmlFieldTypeMetricName, HTML_TYPE_UNSPECIFIED},
{internal::kUKMServerTypeMetricName, CREDIT_CARD_NUMBER}}});
- VerifySubmitFormUkm(form, &test_ukm_recorder_,
+ VerifySubmitFormUkm(test_ukm_recorder_, form,
AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA);
}
}
@@ -3735,7 +3798,7 @@ TEST_F(AutofillMetricsTest, AddressSubmittedFormEvents) {
"Autofill.FormEvents.Address",
AutofillMetrics::FORM_EVENT_NO_SUGGESTION_SUBMITTED_ONCE, 1);
- VerifySubmitFormUkm(form, &test_ukm_recorder_,
+ VerifySubmitFormUkm(test_ukm_recorder_, form,
AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA);
}
@@ -4258,13 +4321,17 @@ TEST_F(AutofillMetricsTest, AutofillFormSubmittedState) {
base::HistogramTester histogram_tester;
autofill_manager_->OnFormsSeen(forms, TimeTicks::Now());
histogram_tester.ExpectTotalCount("Autofill.FormSubmittedState", 0);
+
+ EXPECT_EQ(1U, test_ukm_recorder_.entries_count());
+ EXPECT_EQ(1U, test_ukm_recorder_.sources_count());
+
+ VerifyDeveloperEngagementUkm(
+ test_ukm_recorder_, form,
+ {AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS});
}
- std::vector<std::vector<std::pair<const char*, int64_t>>>
- expected_form_submission_ukm_metrics = {
- {{internal::kUKMAutofillFormSubmittedStateMetricName,
- AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA},
- {internal::kUKMMillisecondsSinceFormParsedMetricName, 0}}};
+ ExpectedUkmMetrics expected_form_submission_ukm_metrics;
+ ExpectedUkmMetrics expected_field_fill_status_ukm_metrics;
// No data entered in the form.
{
@@ -4277,16 +4344,18 @@ TEST_F(AutofillMetricsTest, AutofillFormSubmittedState) {
EXPECT_EQ(1, user_action_tester.GetActionCount(
"Autofill_FormSubmitted_NonFillable"));
- // Expect an entry for |DeveloperEngagement| and an entry for form
- // interactions. Both entries are for the same URL.
- ASSERT_EQ(2U, test_ukm_recorder_.entries_count());
- ASSERT_EQ(2U, test_ukm_recorder_.sources_count());
- VerifyDeveloperEngagementUkm(
- form, &test_ukm_recorder_,
- {AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS});
- VerifyFormInteractionUkm(form, &test_ukm_recorder_,
+ expected_form_submission_ukm_metrics.push_back(
+ {{internal::kUKMAutofillFormSubmittedStateMetricName,
+ AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA},
+ {internal::kUKMMillisecondsSinceFormParsedMetricName, 0}});
+ VerifyFormInteractionUkm(test_ukm_recorder_, form,
internal::kUKMFormSubmittedEntryName,
expected_form_submission_ukm_metrics);
+
+ AppendFieldFillStatusUkm(form, &expected_field_fill_status_ukm_metrics);
+ VerifyFormInteractionUkm(test_ukm_recorder_, form,
+ internal::kUKMFieldFillStatusEntryName,
+ expected_field_fill_status_ukm_metrics);
}
// Non fillable form.
@@ -4308,9 +4377,14 @@ TEST_F(AutofillMetricsTest, AutofillFormSubmittedState) {
{{internal::kUKMAutofillFormSubmittedStateMetricName,
AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA},
{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}});
- VerifyFormInteractionUkm(form, &test_ukm_recorder_,
+ VerifyFormInteractionUkm(test_ukm_recorder_, form,
internal::kUKMFormSubmittedEntryName,
expected_form_submission_ukm_metrics);
+
+ AppendFieldFillStatusUkm(form, &expected_field_fill_status_ukm_metrics);
+ VerifyFormInteractionUkm(test_ukm_recorder_, form,
+ internal::kUKMFieldFillStatusEntryName,
+ expected_field_fill_status_ukm_metrics);
}
// Fill in the third field.
@@ -4334,9 +4408,15 @@ TEST_F(AutofillMetricsTest, AutofillFormSubmittedState) {
AutofillMetrics::
FILLABLE_FORM_AUTOFILLED_NONE_DID_NOT_SHOW_SUGGESTIONS},
{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}});
- VerifyFormInteractionUkm(form, &test_ukm_recorder_,
+
+ VerifyFormInteractionUkm(test_ukm_recorder_, form,
internal::kUKMFormSubmittedEntryName,
expected_form_submission_ukm_metrics);
+
+ AppendFieldFillStatusUkm(form, &expected_field_fill_status_ukm_metrics);
+ VerifyFormInteractionUkm(test_ukm_recorder_, form,
+ internal::kUKMFieldFillStatusEntryName,
+ expected_field_fill_status_ukm_metrics);
}
// Autofilled none with suggestions shown.
@@ -4352,18 +4432,24 @@ TEST_F(AutofillMetricsTest, AutofillFormSubmittedState) {
"Autofill_FormSubmitted_FilledNone_SuggestionsShown"));
VerifyFormInteractionUkm(
- form, &test_ukm_recorder_, internal::kUKMSuggestionsShownEntryName,
+ test_ukm_recorder_, form, internal::kUKMSuggestionsShownEntryName,
{{{internal::kUKMMillisecondsSinceFormParsedMetricName, 0},
{internal::kUKMHeuristicTypeMetricName, PHONE_HOME_WHOLE_NUMBER},
{internal::kUKMHtmlFieldTypeMetricName, HTML_TYPE_UNSPECIFIED},
{internal::kUKMServerTypeMetricName, NO_SERVER_DATA}}});
+
expected_form_submission_ukm_metrics.push_back(
{{internal::kUKMAutofillFormSubmittedStateMetricName,
AutofillMetrics::FILLABLE_FORM_AUTOFILLED_NONE_DID_SHOW_SUGGESTIONS},
{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}});
- VerifyFormInteractionUkm(form, &test_ukm_recorder_,
+ VerifyFormInteractionUkm(test_ukm_recorder_, form,
internal::kUKMFormSubmittedEntryName,
expected_form_submission_ukm_metrics);
+
+ AppendFieldFillStatusUkm(form, &expected_field_fill_status_ukm_metrics);
+ VerifyFormInteractionUkm(test_ukm_recorder_, form,
+ internal::kUKMFieldFillStatusEntryName,
+ expected_field_fill_status_ukm_metrics);
}
// Mark one of the fields as autofilled.
@@ -4385,9 +4471,14 @@ TEST_F(AutofillMetricsTest, AutofillFormSubmittedState) {
{{internal::kUKMAutofillFormSubmittedStateMetricName,
AutofillMetrics::FILLABLE_FORM_AUTOFILLED_SOME},
{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}});
- VerifyFormInteractionUkm(form, &test_ukm_recorder_,
+ VerifyFormInteractionUkm(test_ukm_recorder_, form,
internal::kUKMFormSubmittedEntryName,
expected_form_submission_ukm_metrics);
+
+ AppendFieldFillStatusUkm(form, &expected_field_fill_status_ukm_metrics);
+ VerifyFormInteractionUkm(test_ukm_recorder_, form,
+ internal::kUKMFieldFillStatusEntryName,
+ expected_field_fill_status_ukm_metrics);
}
// Mark all of the fillable fields as autofilled.
@@ -4410,9 +4501,14 @@ TEST_F(AutofillMetricsTest, AutofillFormSubmittedState) {
{{internal::kUKMAutofillFormSubmittedStateMetricName,
AutofillMetrics::FILLABLE_FORM_AUTOFILLED_ALL},
{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}});
- VerifyFormInteractionUkm(form, &test_ukm_recorder_,
+ VerifyFormInteractionUkm(test_ukm_recorder_, form,
internal::kUKMFormSubmittedEntryName,
expected_form_submission_ukm_metrics);
+
+ AppendFieldFillStatusUkm(form, &expected_field_fill_status_ukm_metrics);
+ VerifyFormInteractionUkm(test_ukm_recorder_, form,
+ internal::kUKMFieldFillStatusEntryName,
+ expected_field_fill_status_ukm_metrics);
}
// Clear out the third field's value.
@@ -4434,9 +4530,14 @@ TEST_F(AutofillMetricsTest, AutofillFormSubmittedState) {
{{internal::kUKMAutofillFormSubmittedStateMetricName,
AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA},
{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}});
- VerifyFormInteractionUkm(form, &test_ukm_recorder_,
+ VerifyFormInteractionUkm(test_ukm_recorder_, form,
internal::kUKMFormSubmittedEntryName,
expected_form_submission_ukm_metrics);
+
+ AppendFieldFillStatusUkm(form, &expected_field_fill_status_ukm_metrics);
+ VerifyFormInteractionUkm(test_ukm_recorder_, form,
+ internal::kUKMFieldFillStatusEntryName,
+ expected_field_fill_status_ukm_metrics);
}
}
@@ -4547,12 +4648,12 @@ TEST_F(AutofillMetricsTest, UserHappinessFormInteraction) {
autofill_manager_->Reset();
VerifyFormInteractionUkm(
- form, &test_ukm_recorder_, internal::kUKMInteractedWithFormEntryName,
+ test_ukm_recorder_, form, internal::kUKMInteractedWithFormEntryName,
{{{internal::kUKMIsForCreditCardMetricName, false},
{internal::kUKMLocalRecordTypeCountMetricName, 0},
{internal::kUKMServerRecordTypeCountMetricName, 0}}});
VerifyFormInteractionUkm(
- form, &test_ukm_recorder_, internal::kUKMSuggestionsShownEntryName,
+ test_ukm_recorder_, form, internal::kUKMSuggestionsShownEntryName,
{{{internal::kUKMMillisecondsSinceFormParsedMetricName, 0},
{internal::kUKMHeuristicTypeMetricName, PHONE_HOME_WHOLE_NUMBER},
{internal::kUKMHtmlFieldTypeMetricName, HTML_TYPE_UNSPECIFIED},
@@ -4562,13 +4663,13 @@ TEST_F(AutofillMetricsTest, UserHappinessFormInteraction) {
{internal::kUKMHtmlFieldTypeMetricName, HTML_TYPE_UNSPECIFIED},
{internal::kUKMServerTypeMetricName, NO_SERVER_DATA}}});
VerifyFormInteractionUkm(
- form, &test_ukm_recorder_, internal::kUKMSuggestionFilledEntryName,
+ test_ukm_recorder_, form, internal::kUKMSuggestionFilledEntryName,
{{{internal::kUKMRecordTypeMetricName, AutofillProfile::LOCAL_PROFILE},
{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}},
{{internal::kUKMRecordTypeMetricName, AutofillProfile::LOCAL_PROFILE},
{internal::kUKMMillisecondsSinceFormParsedMetricName, 0}}});
VerifyFormInteractionUkm(
- form, &test_ukm_recorder_, internal::kUKMTextFieldDidChangeEntryName,
+ test_ukm_recorder_, form, internal::kUKMTextFieldDidChangeEntryName,
{{{internal::kUKMFieldTypeGroupMetricName, NAME},
{internal::kUKMHeuristicTypeMetricName, NAME_FULL},
{internal::kUKMServerTypeMetricName, NO_SERVER_DATA},
« no previous file with comments | « components/autofill/core/browser/autofill_metrics.cc ('k') | components/autofill/core/browser/form_structure.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698