OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/autofill/core/browser/autofill_metrics.h" | 5 #include "components/autofill/core/browser/autofill_metrics.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
(...skipping 16 matching lines...) Expand all Loading... |
27 #include "components/autofill/core/browser/autofill_manager.h" | 27 #include "components/autofill/core/browser/autofill_manager.h" |
28 #include "components/autofill/core/browser/autofill_test_utils.h" | 28 #include "components/autofill/core/browser/autofill_test_utils.h" |
29 #include "components/autofill/core/browser/payments/payments_client.h" | 29 #include "components/autofill/core/browser/payments/payments_client.h" |
30 #include "components/autofill/core/browser/personal_data_manager.h" | 30 #include "components/autofill/core/browser/personal_data_manager.h" |
31 #include "components/autofill/core/browser/popup_item_ids.h" | 31 #include "components/autofill/core/browser/popup_item_ids.h" |
32 #include "components/autofill/core/browser/test_autofill_client.h" | 32 #include "components/autofill/core/browser/test_autofill_client.h" |
33 #include "components/autofill/core/browser/test_autofill_driver.h" | 33 #include "components/autofill/core/browser/test_autofill_driver.h" |
34 #include "components/autofill/core/browser/webdata/autofill_webdata_service.h" | 34 #include "components/autofill/core/browser/webdata/autofill_webdata_service.h" |
35 #include "components/autofill/core/common/form_data.h" | 35 #include "components/autofill/core/common/form_data.h" |
36 #include "components/autofill/core/common/form_field_data.h" | 36 #include "components/autofill/core/common/form_field_data.h" |
37 #include "components/metrics/proto/ukm/entry.pb.h" | |
38 #include "components/prefs/pref_service.h" | 37 #include "components/prefs/pref_service.h" |
39 #include "components/rappor/test_rappor_service.h" | 38 #include "components/rappor/test_rappor_service.h" |
40 #include "components/signin/core/browser/account_tracker_service.h" | 39 #include "components/signin/core/browser/account_tracker_service.h" |
41 #include "components/signin/core/browser/fake_signin_manager.h" | 40 #include "components/signin/core/browser/fake_signin_manager.h" |
42 #include "components/signin/core/browser/test_signin_client.h" | 41 #include "components/signin/core/browser/test_signin_client.h" |
43 #include "components/signin/core/common/signin_pref_names.h" | 42 #include "components/signin/core/common/signin_pref_names.h" |
44 #include "components/ukm/test_ukm_service.h" | 43 #include "components/ukm/test_ukm_recorder.h" |
45 #include "components/ukm/ukm_entry.h" | |
46 #include "components/ukm/ukm_source.h" | 44 #include "components/ukm/ukm_source.h" |
47 #include "components/webdata/common/web_data_results.h" | 45 #include "components/webdata/common/web_data_results.h" |
48 #include "testing/gmock/include/gmock/gmock.h" | 46 #include "testing/gmock/include/gmock/gmock.h" |
49 #include "testing/gtest/include/gtest/gtest.h" | 47 #include "testing/gtest/include/gtest/gtest.h" |
50 #include "ui/gfx/geometry/rect.h" | 48 #include "ui/gfx/geometry/rect.h" |
51 #include "url/gurl.h" | 49 #include "url/gurl.h" |
52 | 50 |
53 using base::ASCIIToUTF16; | 51 using base::ASCIIToUTF16; |
54 using base::Bucket; | 52 using base::Bucket; |
55 using base::TimeTicks; | 53 using base::TimeTicks; |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 observed_submission); | 301 observed_submission); |
304 } | 302 } |
305 | 303 |
306 private: | 304 private: |
307 bool autofill_enabled_; | 305 bool autofill_enabled_; |
308 std::unique_ptr<base::RunLoop> run_loop_; | 306 std::unique_ptr<base::RunLoop> run_loop_; |
309 | 307 |
310 DISALLOW_COPY_AND_ASSIGN(TestAutofillManager); | 308 DISALLOW_COPY_AND_ASSIGN(TestAutofillManager); |
311 }; | 309 }; |
312 | 310 |
313 // Finds the specified UKM metric by |name| in the specified UKM |metrics|. | |
314 const ukm::Entry_Metric* FindMetric( | |
315 const char* name, | |
316 const google::protobuf::RepeatedPtrField<ukm::Entry_Metric>& metrics) { | |
317 for (const auto& metric : metrics) { | |
318 if (metric.metric_hash() == base::HashMetricName(name)) | |
319 return &metric; | |
320 } | |
321 return nullptr; | |
322 } | |
323 | |
324 MATCHER(CompareMetrics, "") { | 311 MATCHER(CompareMetrics, "") { |
325 const ukm::Entry_Metric& lhs = ::testing::get<0>(arg); | 312 const ukm::mojom::UkmMetric* lhs = ::testing::get<0>(arg).get(); |
326 const std::pair<const char*, int64_t>& rhs = ::testing::get<1>(arg); | 313 const std::pair<const char*, int64_t>& rhs = ::testing::get<1>(arg); |
327 return lhs.metric_hash() == base::HashMetricName(rhs.first) && | 314 return lhs->metric_hash == base::HashMetricName(rhs.first) && |
328 lhs.value() == rhs.second; | 315 lhs->value == rhs.second; |
329 } | 316 } |
330 | 317 |
331 void VerifyDeveloperEngagementUkm( | 318 void VerifyDeveloperEngagementUkm( |
332 const FormData& form, | 319 const FormData& form, |
333 const ukm::TestUkmService* ukm_service, | 320 const ukm::TestUkmRecorder* ukm_recorder, |
334 const std::vector<int64_t>& expected_metric_values) { | 321 const std::vector<int64_t>& expected_metric_values) { |
335 const ukm::UkmEntry* entry = ukm_service->GetEntryForEntryName( | 322 const ukm::mojom::UkmEntry* entry = ukm_recorder->GetEntryForEntryName( |
336 internal::kUKMDeveloperEngagementEntryName); | 323 internal::kUKMDeveloperEngagementEntryName); |
337 ASSERT_NE(nullptr, entry); | 324 ASSERT_NE(nullptr, entry); |
338 ukm::Entry entry_proto; | |
339 entry->PopulateProto(&entry_proto); | |
340 | |
341 const ukm::UkmSource* source = | 325 const ukm::UkmSource* source = |
342 ukm_service->GetSourceForSourceId(entry_proto.source_id()); | 326 ukm_recorder->GetSourceForSourceId(entry->source_id); |
343 ASSERT_NE(nullptr, source); | 327 ASSERT_NE(nullptr, source); |
344 EXPECT_EQ(form.origin, source->url()); | 328 EXPECT_EQ(form.origin, source->url()); |
345 | 329 |
346 int expected_metric_value = 0; | 330 int expected_metric_value = 0; |
347 for (const auto it : expected_metric_values) | 331 for (const auto it : expected_metric_values) |
348 expected_metric_value |= 1 << it; | 332 expected_metric_value |= 1 << it; |
349 | 333 |
350 const std::vector<std::pair<const char*, int64_t>> expected_metrics{ | 334 const std::vector<std::pair<const char*, int64_t>> expected_metrics{ |
351 {internal::kUKMDeveloperEngagementMetricName, expected_metric_value}}; | 335 {internal::kUKMDeveloperEngagementMetricName, expected_metric_value}}; |
352 | 336 |
353 EXPECT_THAT(entry_proto.metrics(), | 337 EXPECT_THAT(entry->metrics, |
354 UnorderedPointwise(CompareMetrics(), expected_metrics)); | 338 UnorderedPointwise(CompareMetrics(), expected_metrics)); |
355 } | 339 } |
356 | 340 |
357 MATCHER(CompareMetricsIgnoringMillisecondsSinceFormLoaded, "") { | 341 MATCHER(CompareMetricsIgnoringMillisecondsSinceFormLoaded, "") { |
358 const ukm::Entry_Metric& lhs = ::testing::get<0>(arg); | 342 const ukm::mojom::UkmMetric* lhs = ::testing::get<0>(arg).get(); |
359 const std::pair<const char*, int64_t>& rhs = ::testing::get<1>(arg); | 343 const std::pair<const char*, int64_t>& rhs = ::testing::get<1>(arg); |
360 return lhs.metric_hash() == base::HashMetricName(rhs.first) && | 344 return lhs->metric_hash == base::HashMetricName(rhs.first) && |
361 (lhs.value() == rhs.second || | 345 (lhs->value == rhs.second || |
362 (lhs.value() > 0 && | 346 (lhs->value > 0 && |
363 rhs.first == internal::kUKMMillisecondsSinceFormLoadedMetricName)); | 347 rhs.first == internal::kUKMMillisecondsSinceFormLoadedMetricName)); |
364 } | 348 } |
365 | 349 |
366 void VerifyFormInteractionUkm( | 350 void VerifyFormInteractionUkm( |
367 const FormData& form, | 351 const FormData& form, |
368 const ukm::TestUkmService* ukm_service, | 352 const ukm::TestUkmRecorder* ukm_recorder, |
369 const char* event_name, | 353 const char* event_name, |
370 const std::vector<std::vector<std::pair<const char*, int64_t>>>& | 354 const std::vector<std::vector<std::pair<const char*, int64_t>>>& |
371 expected_metrics) { | 355 expected_metrics) { |
372 size_t expected_metrics_index = 0; | 356 size_t expected_metrics_index = 0; |
373 for (size_t i = 0; i < ukm_service->entries_count(); ++i) { | 357 for (size_t i = 0; i < ukm_recorder->entries_count(); ++i) { |
374 const ukm::UkmEntry* entry = ukm_service->GetEntry(i); | 358 const ukm::mojom::UkmEntry* entry = ukm_recorder->GetEntry(i); |
375 if (entry->event_hash() != base::HashMetricName(event_name)) | 359 if (entry->event_hash != base::HashMetricName(event_name)) |
376 continue; | 360 continue; |
377 | 361 |
378 ukm::Entry entry_proto; | |
379 entry->PopulateProto(&entry_proto); | |
380 | |
381 const ukm::UkmSource* source = | 362 const ukm::UkmSource* source = |
382 ukm_service->GetSourceForSourceId(entry_proto.source_id()); | 363 ukm_recorder->GetSourceForSourceId(entry->source_id); |
383 ASSERT_NE(nullptr, source); | 364 ASSERT_NE(nullptr, source); |
384 EXPECT_EQ(form.origin, source->url()); | 365 EXPECT_EQ(form.origin, source->url()); |
385 | 366 |
386 ASSERT_LT(expected_metrics_index, expected_metrics.size()); | 367 ASSERT_LT(expected_metrics_index, expected_metrics.size()); |
387 EXPECT_THAT( | 368 EXPECT_THAT( |
388 entry_proto.metrics(), | 369 entry->metrics, |
389 UnorderedPointwise(CompareMetricsIgnoringMillisecondsSinceFormLoaded(), | 370 UnorderedPointwise(CompareMetricsIgnoringMillisecondsSinceFormLoaded(), |
390 expected_metrics[expected_metrics_index++])); | 371 expected_metrics[expected_metrics_index++])); |
391 } | 372 } |
392 } | 373 } |
393 | 374 |
394 void VerifySubmitFormUkm(const FormData& form, | 375 void VerifySubmitFormUkm(const FormData& form, |
395 const ukm::TestUkmService* ukm_service, | 376 const ukm::TestUkmRecorder* ukm_recorder, |
396 AutofillMetrics::AutofillFormSubmittedState state) { | 377 AutofillMetrics::AutofillFormSubmittedState state) { |
397 VerifyFormInteractionUkm( | 378 VerifyFormInteractionUkm( |
398 form, ukm_service, internal::kUKMFormSubmittedEntryName, | 379 form, ukm_recorder, internal::kUKMFormSubmittedEntryName, |
399 {{{internal::kUKMAutofillFormSubmittedStateMetricName, state}, | 380 {{{internal::kUKMAutofillFormSubmittedStateMetricName, state}, |
400 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); | 381 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); |
401 } | 382 } |
402 | 383 |
403 } // namespace | 384 } // namespace |
404 | 385 |
405 // This is defined in the autofill_metrics.cc implementation file. | 386 // This is defined in the autofill_metrics.cc implementation file. |
406 int GetFieldTypeGroupMetric(ServerFieldType field_type, | 387 int GetFieldTypeGroupMetric(ServerFieldType field_type, |
407 AutofillMetrics::FieldTypeQualityMetric metric); | 388 AutofillMetrics::FieldTypeQualityMetric metric); |
408 | 389 |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
470 // PersonalDataManager to be around when it gets destroyed. | 451 // PersonalDataManager to be around when it gets destroyed. |
471 autofill_manager_.reset(); | 452 autofill_manager_.reset(); |
472 autofill_driver_.reset(); | 453 autofill_driver_.reset(); |
473 personal_data_.reset(); | 454 personal_data_.reset(); |
474 signin_manager_->Shutdown(); | 455 signin_manager_->Shutdown(); |
475 signin_manager_.reset(); | 456 signin_manager_.reset(); |
476 account_tracker_->Shutdown(); | 457 account_tracker_->Shutdown(); |
477 account_tracker_.reset(); | 458 account_tracker_.reset(); |
478 signin_client_.reset(); | 459 signin_client_.reset(); |
479 test::ReenableSystemServices(); | 460 test::ReenableSystemServices(); |
480 autofill_client_.GetTestUkmService()->Purge(); | 461 autofill_client_.GetTestUkmRecorder()->Purge(); |
481 } | 462 } |
482 | 463 |
483 void AutofillMetricsTest::EnableWalletSync() { | 464 void AutofillMetricsTest::EnableWalletSync() { |
484 signin_manager_->SetAuthenticatedAccountInfo("12345", "syncuser@example.com"); | 465 signin_manager_->SetAuthenticatedAccountInfo("12345", "syncuser@example.com"); |
485 } | 466 } |
486 | 467 |
487 void AutofillMetricsTest::EnableUkmLogging() { | 468 void AutofillMetricsTest::EnableUkmLogging() { |
488 scoped_feature_list_.InitAndEnableFeature(kAutofillUkmLogging); | 469 scoped_feature_list_.InitAndEnableFeature(kAutofillUkmLogging); |
489 } | 470 } |
490 | 471 |
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
967 form.fields.push_back(field); | 948 form.fields.push_back(field); |
968 | 949 |
969 // No autocomplete attribute. No metric logged. | 950 // No autocomplete attribute. No metric logged. |
970 test::CreateTestFormField("Address", "address", "", "text", &field); | 951 test::CreateTestFormField("Address", "address", "", "text", &field); |
971 field.autocomplete_attribute = ""; | 952 field.autocomplete_attribute = ""; |
972 form.fields.push_back(field); | 953 form.fields.push_back(field); |
973 | 954 |
974 std::unique_ptr<TestFormStructure> form_structure = | 955 std::unique_ptr<TestFormStructure> form_structure = |
975 base::MakeUnique<TestFormStructure>(form); | 956 base::MakeUnique<TestFormStructure>(form); |
976 TestFormStructure* form_structure_ptr = form_structure.get(); | 957 TestFormStructure* form_structure_ptr = form_structure.get(); |
977 form_structure->DetermineHeuristicTypes(nullptr /* ukm_service */); | 958 form_structure->DetermineHeuristicTypes(nullptr /* ukm_recorder */); |
978 autofill_manager_->form_structures()->push_back(std::move(form_structure)); | 959 autofill_manager_->form_structures()->push_back(std::move(form_structure)); |
979 | 960 |
980 AutofillQueryResponseContents response; | 961 AutofillQueryResponseContents response; |
981 // Server response will match with autocomplete. | 962 // Server response will match with autocomplete. |
982 response.add_field()->set_autofill_type(NAME_LAST); | 963 response.add_field()->set_autofill_type(NAME_LAST); |
983 // Server response will NOT match with autocomplete. | 964 // Server response will NOT match with autocomplete. |
984 response.add_field()->set_autofill_type(NAME_FIRST); | 965 response.add_field()->set_autofill_type(NAME_FIRST); |
985 // Server response will have no data. | 966 // Server response will have no data. |
986 response.add_field()->set_autofill_type(NO_SERVER_DATA); | 967 response.add_field()->set_autofill_type(NO_SERVER_DATA); |
987 // Not logged. | 968 // Not logged. |
(...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1624 | 1605 |
1625 // Simulate form submission. | 1606 // Simulate form submission. |
1626 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 1607 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
1627 | 1608 |
1628 // An autofillable form was submitted, and the number of edited autofilled | 1609 // An autofillable form was submitted, and the number of edited autofilled |
1629 // fields is logged. | 1610 // fields is logged. |
1630 histogram_tester.ExpectUniqueSample( | 1611 histogram_tester.ExpectUniqueSample( |
1631 "Autofill.NumberOfEditedAutofilledFieldsAtSubmission", 2, 1); | 1612 "Autofill.NumberOfEditedAutofilledFieldsAtSubmission", 2, 1); |
1632 | 1613 |
1633 // UKM must not be logged unless enabled. | 1614 // UKM must not be logged unless enabled. |
1634 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 1615 ukm::TestUkmRecorder* ukm_recorder = autofill_client_.GetTestUkmRecorder(); |
1635 EXPECT_EQ(0U, ukm_service->sources_count()); | 1616 EXPECT_EQ(0U, ukm_recorder->sources_count()); |
1636 EXPECT_EQ(0U, ukm_service->entries_count()); | 1617 EXPECT_EQ(0U, ukm_recorder->entries_count()); |
1637 } | 1618 } |
1638 | 1619 |
1639 // Verify that when resetting the autofill manager (such as during a | 1620 // Verify that when resetting the autofill manager (such as during a |
1640 // navigation), the proper number of edited fields is logged. | 1621 // navigation), the proper number of edited fields is logged. |
1641 TEST_F(AutofillMetricsTest, NumberOfEditedAutofilledFields_NoSubmission) { | 1622 TEST_F(AutofillMetricsTest, NumberOfEditedAutofilledFields_NoSubmission) { |
1642 // Construct a fillable form. | 1623 // Construct a fillable form. |
1643 FormData form; | 1624 FormData form; |
1644 form.name = ASCIIToUTF16("TestForm"); | 1625 form.name = ASCIIToUTF16("TestForm"); |
1645 form.origin = GURL("http://example.com/form.html"); | 1626 form.origin = GURL("http://example.com/form.html"); |
1646 form.action = GURL("http://example.com/submit.html"); | 1627 form.action = GURL("http://example.com/submit.html"); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1681 autofill_manager_->RunRunLoop(); | 1662 autofill_manager_->RunRunLoop(); |
1682 | 1663 |
1683 // An autofillable form was uploaded, and the number of edited autofilled | 1664 // An autofillable form was uploaded, and the number of edited autofilled |
1684 // fields is logged. | 1665 // fields is logged. |
1685 histogram_tester.ExpectUniqueSample( | 1666 histogram_tester.ExpectUniqueSample( |
1686 "Autofill.NumberOfEditedAutofilledFieldsAtSubmission.NoSubmission", 1, 1); | 1667 "Autofill.NumberOfEditedAutofilledFieldsAtSubmission.NoSubmission", 1, 1); |
1687 } | 1668 } |
1688 | 1669 |
1689 // Verify that we correctly log metrics regarding developer engagement. | 1670 // Verify that we correctly log metrics regarding developer engagement. |
1690 TEST_F(AutofillMetricsTest, DeveloperEngagement) { | 1671 TEST_F(AutofillMetricsTest, DeveloperEngagement) { |
1691 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 1672 ukm::TestUkmRecorder* ukm_recorder = autofill_client_.GetTestUkmRecorder(); |
1692 | 1673 |
1693 // Start with a non-fillable form. | 1674 // Start with a non-fillable form. |
1694 FormData form; | 1675 FormData form; |
1695 form.name = ASCIIToUTF16("TestForm"); | 1676 form.name = ASCIIToUTF16("TestForm"); |
1696 form.origin = GURL("http://example.com/form.html"); | 1677 form.origin = GURL("http://example.com/form.html"); |
1697 form.action = GURL("http://example.com/submit.html"); | 1678 form.action = GURL("http://example.com/submit.html"); |
1698 | 1679 |
1699 FormFieldData field; | 1680 FormFieldData field; |
1700 test::CreateTestFormField("Name", "name", "", "text", &field); | 1681 test::CreateTestFormField("Name", "name", "", "text", &field); |
1701 form.fields.push_back(field); | 1682 form.fields.push_back(field); |
1702 test::CreateTestFormField("Email", "email", "", "text", &field); | 1683 test::CreateTestFormField("Email", "email", "", "text", &field); |
1703 form.fields.push_back(field); | 1684 form.fields.push_back(field); |
1704 | 1685 |
1705 std::vector<FormData> forms(1, form); | 1686 std::vector<FormData> forms(1, form); |
1706 | 1687 |
1707 // Ensure no metrics are logged when loading a non-fillable form. | 1688 // Ensure no metrics are logged when loading a non-fillable form. |
1708 { | 1689 { |
1709 base::HistogramTester histogram_tester; | 1690 base::HistogramTester histogram_tester; |
1710 autofill_manager_->OnFormsSeen(forms, TimeTicks()); | 1691 autofill_manager_->OnFormsSeen(forms, TimeTicks()); |
1711 autofill_manager_->Reset(); | 1692 autofill_manager_->Reset(); |
1712 histogram_tester.ExpectTotalCount("Autofill.DeveloperEngagement", 0); | 1693 histogram_tester.ExpectTotalCount("Autofill.DeveloperEngagement", 0); |
1713 | 1694 |
1714 // UKM must not be logged unless enabled. | 1695 // UKM must not be logged unless enabled. |
1715 EXPECT_EQ(0U, ukm_service->sources_count()); | 1696 EXPECT_EQ(0U, ukm_recorder->sources_count()); |
1716 EXPECT_EQ(0U, ukm_service->entries_count()); | 1697 EXPECT_EQ(0U, ukm_recorder->entries_count()); |
1717 } | 1698 } |
1718 | 1699 |
1719 // Add another field to the form, so that it becomes fillable. | 1700 // Add another field to the form, so that it becomes fillable. |
1720 test::CreateTestFormField("Phone", "phone", "", "text", &field); | 1701 test::CreateTestFormField("Phone", "phone", "", "text", &field); |
1721 forms.back().fields.push_back(field); | 1702 forms.back().fields.push_back(field); |
1722 | 1703 |
1723 // Expect the "form parsed without hints" metric to be logged. | 1704 // Expect the "form parsed without hints" metric to be logged. |
1724 { | 1705 { |
1725 base::HistogramTester histogram_tester; | 1706 base::HistogramTester histogram_tester; |
1726 autofill_manager_->OnFormsSeen(forms, TimeTicks()); | 1707 autofill_manager_->OnFormsSeen(forms, TimeTicks()); |
1727 autofill_manager_->Reset(); | 1708 autofill_manager_->Reset(); |
1728 histogram_tester.ExpectUniqueSample( | 1709 histogram_tester.ExpectUniqueSample( |
1729 "Autofill.DeveloperEngagement", | 1710 "Autofill.DeveloperEngagement", |
1730 AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS, 1); | 1711 AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS, 1); |
1731 | 1712 |
1732 // UKM must not be logged unless enabled. | 1713 // UKM must not be logged unless enabled. |
1733 EXPECT_EQ(0U, ukm_service->sources_count()); | 1714 EXPECT_EQ(0U, ukm_recorder->sources_count()); |
1734 EXPECT_EQ(0U, ukm_service->entries_count()); | 1715 EXPECT_EQ(0U, ukm_recorder->entries_count()); |
1735 } | 1716 } |
1736 | 1717 |
1737 // Add some fields with an author-specified field type to the form. | 1718 // Add some fields with an author-specified field type to the form. |
1738 // We need to add at least three fields, because a form must have at least | 1719 // We need to add at least three fields, because a form must have at least |
1739 // three fillable fields to be considered to be autofillable; and if at least | 1720 // three fillable fields to be considered to be autofillable; and if at least |
1740 // one field specifies an explicit type hint, we don't apply any of our usual | 1721 // one field specifies an explicit type hint, we don't apply any of our usual |
1741 // local heuristics to detect field types in the rest of the form. | 1722 // local heuristics to detect field types in the rest of the form. |
1742 test::CreateTestFormField("", "", "", "text", &field); | 1723 test::CreateTestFormField("", "", "", "text", &field); |
1743 field.autocomplete_attribute = "given-name"; | 1724 field.autocomplete_attribute = "given-name"; |
1744 forms.back().fields.push_back(field); | 1725 forms.back().fields.push_back(field); |
1745 test::CreateTestFormField("", "", "", "text", &field); | 1726 test::CreateTestFormField("", "", "", "text", &field); |
1746 field.autocomplete_attribute = "email"; | 1727 field.autocomplete_attribute = "email"; |
1747 forms.back().fields.push_back(field); | 1728 forms.back().fields.push_back(field); |
1748 test::CreateTestFormField("", "", "", "text", &field); | 1729 test::CreateTestFormField("", "", "", "text", &field); |
1749 field.autocomplete_attribute = "address-line1"; | 1730 field.autocomplete_attribute = "address-line1"; |
1750 forms.back().fields.push_back(field); | 1731 forms.back().fields.push_back(field); |
1751 | 1732 |
1752 // Expect the "form parsed with field type hints" metric to be logged. | 1733 // Expect the "form parsed with field type hints" metric to be logged. |
1753 { | 1734 { |
1754 base::HistogramTester histogram_tester; | 1735 base::HistogramTester histogram_tester; |
1755 autofill_manager_->OnFormsSeen(forms, TimeTicks()); | 1736 autofill_manager_->OnFormsSeen(forms, TimeTicks()); |
1756 autofill_manager_->Reset(); | 1737 autofill_manager_->Reset(); |
1757 histogram_tester.ExpectBucketCount( | 1738 histogram_tester.ExpectBucketCount( |
1758 "Autofill.DeveloperEngagement", | 1739 "Autofill.DeveloperEngagement", |
1759 AutofillMetrics::FILLABLE_FORM_PARSED_WITH_TYPE_HINTS, 1); | 1740 AutofillMetrics::FILLABLE_FORM_PARSED_WITH_TYPE_HINTS, 1); |
1760 | 1741 |
1761 // UKM must not be logged unless enabled. | 1742 // UKM must not be logged unless enabled. |
1762 EXPECT_EQ(0U, ukm_service->sources_count()); | 1743 EXPECT_EQ(0U, ukm_recorder->sources_count()); |
1763 EXPECT_EQ(0U, ukm_service->entries_count()); | 1744 EXPECT_EQ(0U, ukm_recorder->entries_count()); |
1764 | 1745 |
1765 histogram_tester.ExpectBucketCount( | 1746 histogram_tester.ExpectBucketCount( |
1766 "Autofill.DeveloperEngagement", | 1747 "Autofill.DeveloperEngagement", |
1767 AutofillMetrics::FORM_CONTAINS_UPI_VPA_HINT, 0); | 1748 AutofillMetrics::FORM_CONTAINS_UPI_VPA_HINT, 0); |
1768 } | 1749 } |
1769 | 1750 |
1770 // Add a field with an author-specified UPI-VPA field type in the form. | 1751 // Add a field with an author-specified UPI-VPA field type in the form. |
1771 test::CreateTestFormField("", "", "", "text", &field); | 1752 test::CreateTestFormField("", "", "", "text", &field); |
1772 field.autocomplete_attribute = "upi-vpa"; | 1753 field.autocomplete_attribute = "upi-vpa"; |
1773 forms.back().fields.push_back(field); | 1754 forms.back().fields.push_back(field); |
(...skipping 11 matching lines...) Expand all Loading... |
1785 "Autofill.DeveloperEngagement", | 1766 "Autofill.DeveloperEngagement", |
1786 AutofillMetrics::FORM_CONTAINS_UPI_VPA_HINT, 1); | 1767 AutofillMetrics::FORM_CONTAINS_UPI_VPA_HINT, 1); |
1787 } | 1768 } |
1788 } | 1769 } |
1789 | 1770 |
1790 // Verify that we correctly log UKM for form parsed without type hints regarding | 1771 // Verify that we correctly log UKM for form parsed without type hints regarding |
1791 // developer engagement. | 1772 // developer engagement. |
1792 TEST_F(AutofillMetricsTest, | 1773 TEST_F(AutofillMetricsTest, |
1793 UkmDeveloperEngagement_LogFillableFormParsedWithoutTypeHints) { | 1774 UkmDeveloperEngagement_LogFillableFormParsedWithoutTypeHints) { |
1794 EnableUkmLogging(); | 1775 EnableUkmLogging(); |
1795 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 1776 ukm::TestUkmRecorder* ukm_recorder = autofill_client_.GetTestUkmRecorder(); |
1796 | 1777 |
1797 // Start with a non-fillable form. | 1778 // Start with a non-fillable form. |
1798 FormData form; | 1779 FormData form; |
1799 form.name = ASCIIToUTF16("TestForm"); | 1780 form.name = ASCIIToUTF16("TestForm"); |
1800 form.origin = GURL("http://example.com/form.html"); | 1781 form.origin = GURL("http://example.com/form.html"); |
1801 form.action = GURL("http://example.com/submit.html"); | 1782 form.action = GURL("http://example.com/submit.html"); |
1802 | 1783 |
1803 FormFieldData field; | 1784 FormFieldData field; |
1804 test::CreateTestFormField("Name", "name", "", "text", &field); | 1785 test::CreateTestFormField("Name", "name", "", "text", &field); |
1805 form.fields.push_back(field); | 1786 form.fields.push_back(field); |
1806 test::CreateTestFormField("Email", "email", "", "text", &field); | 1787 test::CreateTestFormField("Email", "email", "", "text", &field); |
1807 form.fields.push_back(field); | 1788 form.fields.push_back(field); |
1808 | 1789 |
1809 std::vector<FormData> forms(1, form); | 1790 std::vector<FormData> forms(1, form); |
1810 | 1791 |
1811 // Ensure no metrics are logged when loading a non-fillable form. | 1792 // Ensure no metrics are logged when loading a non-fillable form. |
1812 { | 1793 { |
1813 autofill_manager_->OnFormsSeen(forms, TimeTicks::Now()); | 1794 autofill_manager_->OnFormsSeen(forms, TimeTicks::Now()); |
1814 autofill_manager_->Reset(); | 1795 autofill_manager_->Reset(); |
1815 | 1796 |
1816 EXPECT_EQ(0U, ukm_service->sources_count()); | 1797 EXPECT_EQ(0U, ukm_recorder->sources_count()); |
1817 EXPECT_EQ(0U, ukm_service->entries_count()); | 1798 EXPECT_EQ(0U, ukm_recorder->entries_count()); |
1818 } | 1799 } |
1819 | 1800 |
1820 // Add another field to the form, so that it becomes fillable. | 1801 // Add another field to the form, so that it becomes fillable. |
1821 test::CreateTestFormField("Phone", "phone", "", "text", &field); | 1802 test::CreateTestFormField("Phone", "phone", "", "text", &field); |
1822 forms.back().fields.push_back(field); | 1803 forms.back().fields.push_back(field); |
1823 | 1804 |
1824 // Expect the "form parsed without field type hints" metric and the | 1805 // Expect the "form parsed without field type hints" metric and the |
1825 // "form loaded" form interaction event to be logged. | 1806 // "form loaded" form interaction event to be logged. |
1826 { | 1807 { |
1827 autofill_manager_->OnFormsSeen(forms, TimeTicks::Now()); | 1808 autofill_manager_->OnFormsSeen(forms, TimeTicks::Now()); |
1828 autofill_manager_->Reset(); | 1809 autofill_manager_->Reset(); |
1829 | 1810 |
1830 ASSERT_EQ(1U, ukm_service->entries_count()); | 1811 ASSERT_EQ(1U, ukm_recorder->entries_count()); |
1831 ASSERT_EQ(1U, ukm_service->sources_count()); | 1812 ASSERT_EQ(1U, ukm_recorder->sources_count()); |
1832 VerifyDeveloperEngagementUkm( | 1813 VerifyDeveloperEngagementUkm( |
1833 form, ukm_service, | 1814 form, ukm_recorder, |
1834 {AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS}); | 1815 {AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS}); |
1835 } | 1816 } |
1836 } | 1817 } |
1837 | 1818 |
1838 // Verify that we correctly log UKM for form parsed with type hints regarding | 1819 // Verify that we correctly log UKM for form parsed with type hints regarding |
1839 // developer engagement. | 1820 // developer engagement. |
1840 TEST_F(AutofillMetricsTest, | 1821 TEST_F(AutofillMetricsTest, |
1841 UkmDeveloperEngagement_LogFillableFormParsedWithTypeHints) { | 1822 UkmDeveloperEngagement_LogFillableFormParsedWithTypeHints) { |
1842 EnableUkmLogging(); | 1823 EnableUkmLogging(); |
1843 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 1824 ukm::TestUkmRecorder* ukm_recorder = autofill_client_.GetTestUkmRecorder(); |
1844 | 1825 |
1845 FormData form; | 1826 FormData form; |
1846 form.name = ASCIIToUTF16("TestForm"); | 1827 form.name = ASCIIToUTF16("TestForm"); |
1847 form.origin = GURL("http://example.com/form.html"); | 1828 form.origin = GURL("http://example.com/form.html"); |
1848 form.action = GURL("http://example.com/submit.html"); | 1829 form.action = GURL("http://example.com/submit.html"); |
1849 | 1830 |
1850 FormFieldData field; | 1831 FormFieldData field; |
1851 test::CreateTestFormField("Name", "name", "", "text", &field); | 1832 test::CreateTestFormField("Name", "name", "", "text", &field); |
1852 form.fields.push_back(field); | 1833 form.fields.push_back(field); |
1853 test::CreateTestFormField("Email", "email", "", "text", &field); | 1834 test::CreateTestFormField("Email", "email", "", "text", &field); |
(...skipping 19 matching lines...) Expand all Loading... |
1873 test::CreateTestFormField("", "", "", "text", &field); | 1854 test::CreateTestFormField("", "", "", "text", &field); |
1874 field.autocomplete_attribute = "address-line1"; | 1855 field.autocomplete_attribute = "address-line1"; |
1875 forms.back().fields.push_back(field); | 1856 forms.back().fields.push_back(field); |
1876 | 1857 |
1877 // Expect the "form parsed without field type hints" metric and the | 1858 // Expect the "form parsed without field type hints" metric and the |
1878 // "form loaded" form interaction event to be logged. | 1859 // "form loaded" form interaction event to be logged. |
1879 { | 1860 { |
1880 autofill_manager_->OnFormsSeen(forms, TimeTicks::Now()); | 1861 autofill_manager_->OnFormsSeen(forms, TimeTicks::Now()); |
1881 autofill_manager_->Reset(); | 1862 autofill_manager_->Reset(); |
1882 | 1863 |
1883 ASSERT_EQ(1U, ukm_service->entries_count()); | 1864 ASSERT_EQ(1U, ukm_recorder->entries_count()); |
1884 ASSERT_EQ(1U, ukm_service->sources_count()); | 1865 ASSERT_EQ(1U, ukm_recorder->sources_count()); |
1885 VerifyDeveloperEngagementUkm( | 1866 VerifyDeveloperEngagementUkm( |
1886 form, ukm_service, | 1867 form, ukm_recorder, |
1887 {AutofillMetrics::FILLABLE_FORM_PARSED_WITH_TYPE_HINTS}); | 1868 {AutofillMetrics::FILLABLE_FORM_PARSED_WITH_TYPE_HINTS}); |
1888 } | 1869 } |
1889 } | 1870 } |
1890 | 1871 |
1891 // Verify that we correctly log UKM for form parsed with type hints regarding | 1872 // Verify that we correctly log UKM for form parsed with type hints regarding |
1892 // developer engagement. | 1873 // developer engagement. |
1893 TEST_F(AutofillMetricsTest, UkmDeveloperEngagement_LogUpiVpaTypeHint) { | 1874 TEST_F(AutofillMetricsTest, UkmDeveloperEngagement_LogUpiVpaTypeHint) { |
1894 EnableUkmLogging(); | 1875 EnableUkmLogging(); |
1895 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 1876 ukm::TestUkmRecorder* ukm_recorder = autofill_client_.GetTestUkmRecorder(); |
1896 | 1877 |
1897 FormData form; | 1878 FormData form; |
1898 form.name = ASCIIToUTF16("TestForm"); | 1879 form.name = ASCIIToUTF16("TestForm"); |
1899 form.origin = GURL("http://example.com/form.html"); | 1880 form.origin = GURL("http://example.com/form.html"); |
1900 form.action = GURL("http://example.com/submit.html"); | 1881 form.action = GURL("http://example.com/submit.html"); |
1901 | 1882 |
1902 FormFieldData field; | 1883 FormFieldData field; |
1903 test::CreateTestFormField("Name", "name", "", "text", &field); | 1884 test::CreateTestFormField("Name", "name", "", "text", &field); |
1904 form.fields.push_back(field); | 1885 form.fields.push_back(field); |
1905 test::CreateTestFormField("Email", "email", "", "text", &field); | 1886 test::CreateTestFormField("Email", "email", "", "text", &field); |
1906 form.fields.push_back(field); | 1887 form.fields.push_back(field); |
1907 test::CreateTestFormField("Payment", "payment", "", "text", &field); | 1888 test::CreateTestFormField("Payment", "payment", "", "text", &field); |
1908 field.autocomplete_attribute = "upi-vpa"; | 1889 field.autocomplete_attribute = "upi-vpa"; |
1909 form.fields.push_back(field); | 1890 form.fields.push_back(field); |
1910 | 1891 |
1911 std::vector<FormData> forms(1, form); | 1892 std::vector<FormData> forms(1, form); |
1912 | 1893 |
1913 // Expect the "upi-vpa hint" metric to be logged and the "form loaded" form | 1894 // Expect the "upi-vpa hint" metric to be logged and the "form loaded" form |
1914 // interaction event to be logged. | 1895 // interaction event to be logged. |
1915 { | 1896 { |
1916 autofill_manager_->OnFormsSeen(forms, TimeTicks::Now()); | 1897 autofill_manager_->OnFormsSeen(forms, TimeTicks::Now()); |
1917 autofill_manager_->Reset(); | 1898 autofill_manager_->Reset(); |
1918 | 1899 |
1919 ASSERT_EQ(1U, ukm_service->entries_count()); | 1900 ASSERT_EQ(1U, ukm_recorder->entries_count()); |
1920 ASSERT_EQ(1U, ukm_service->sources_count()); | 1901 ASSERT_EQ(1U, ukm_recorder->sources_count()); |
1921 VerifyDeveloperEngagementUkm(form, ukm_service, | 1902 VerifyDeveloperEngagementUkm(form, ukm_recorder, |
1922 {AutofillMetrics::FORM_CONTAINS_UPI_VPA_HINT}); | 1903 {AutofillMetrics::FORM_CONTAINS_UPI_VPA_HINT}); |
1923 ukm_service->Purge(); | 1904 ukm_recorder->Purge(); |
1924 } | 1905 } |
1925 | 1906 |
1926 // Add another field with an author-specified field type to the form. | 1907 // Add another field with an author-specified field type to the form. |
1927 test::CreateTestFormField("", "", "", "text", &field); | 1908 test::CreateTestFormField("", "", "", "text", &field); |
1928 field.autocomplete_attribute = "address-line1"; | 1909 field.autocomplete_attribute = "address-line1"; |
1929 forms.back().fields.push_back(field); | 1910 forms.back().fields.push_back(field); |
1930 | 1911 |
1931 { | 1912 { |
1932 autofill_manager_->OnFormsSeen(forms, TimeTicks::Now()); | 1913 autofill_manager_->OnFormsSeen(forms, TimeTicks::Now()); |
1933 autofill_manager_->Reset(); | 1914 autofill_manager_->Reset(); |
1934 | 1915 |
1935 VerifyDeveloperEngagementUkm( | 1916 VerifyDeveloperEngagementUkm( |
1936 form, ukm_service, | 1917 form, ukm_recorder, |
1937 {AutofillMetrics::FILLABLE_FORM_PARSED_WITH_TYPE_HINTS, | 1918 {AutofillMetrics::FILLABLE_FORM_PARSED_WITH_TYPE_HINTS, |
1938 AutofillMetrics::FORM_CONTAINS_UPI_VPA_HINT}); | 1919 AutofillMetrics::FORM_CONTAINS_UPI_VPA_HINT}); |
1939 } | 1920 } |
1940 } | 1921 } |
1941 | 1922 |
1942 // Test that the profile count is logged correctly. | 1923 // Test that the profile count is logged correctly. |
1943 TEST_F(AutofillMetricsTest, StoredProfileCount) { | 1924 TEST_F(AutofillMetricsTest, StoredProfileCount) { |
1944 // The metric should be logged when the profiles are first loaded. | 1925 // The metric should be logged when the profiles are first loaded. |
1945 { | 1926 { |
1946 base::HistogramTester histogram_tester; | 1927 base::HistogramTester histogram_tester; |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2112 form.fields[0].is_autofilled = true; | 2093 form.fields[0].is_autofilled = true; |
2113 base::HistogramTester histogram_tester; | 2094 base::HistogramTester histogram_tester; |
2114 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 2095 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
2115 histogram_tester.ExpectTotalCount("Autofill.AddressSuggestionsCount", 0); | 2096 histogram_tester.ExpectTotalCount("Autofill.AddressSuggestionsCount", 0); |
2116 } | 2097 } |
2117 } | 2098 } |
2118 | 2099 |
2119 // Test that the credit card checkout flow user actions are correctly logged. | 2100 // Test that the credit card checkout flow user actions are correctly logged. |
2120 TEST_F(AutofillMetricsTest, CreditCardCheckoutFlowUserActions) { | 2101 TEST_F(AutofillMetricsTest, CreditCardCheckoutFlowUserActions) { |
2121 EnableUkmLogging(); | 2102 EnableUkmLogging(); |
2122 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 2103 ukm::TestUkmRecorder* ukm_recorder = autofill_client_.GetTestUkmRecorder(); |
2123 | 2104 |
2124 personal_data_->RecreateCreditCards( | 2105 personal_data_->RecreateCreditCards( |
2125 true /* include_local_credit_card */, | 2106 true /* include_local_credit_card */, |
2126 false /* include_masked_server_credit_card */, | 2107 false /* include_masked_server_credit_card */, |
2127 false /* include_full_server_credit_card */); | 2108 false /* include_full_server_credit_card */); |
2128 | 2109 |
2129 // Set up our form data. | 2110 // Set up our form data. |
2130 FormData form; | 2111 FormData form; |
2131 form.name = ASCIIToUTF16("TestForm"); | 2112 form.name = ASCIIToUTF16("TestForm"); |
2132 form.origin = GURL("http://example.com/form.html"); | 2113 form.origin = GURL("http://example.com/form.html"); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2191 base::UserActionTester user_action_tester; | 2172 base::UserActionTester user_action_tester; |
2192 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 2173 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
2193 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 2174 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
2194 EXPECT_EQ(1, | 2175 EXPECT_EQ(1, |
2195 user_action_tester.GetActionCount("Autofill_OnWillSubmitForm")); | 2176 user_action_tester.GetActionCount("Autofill_OnWillSubmitForm")); |
2196 EXPECT_EQ(1, user_action_tester.GetActionCount( | 2177 EXPECT_EQ(1, user_action_tester.GetActionCount( |
2197 "Autofill_FormSubmitted_NonFillable")); | 2178 "Autofill_FormSubmitted_NonFillable")); |
2198 } | 2179 } |
2199 | 2180 |
2200 VerifyFormInteractionUkm( | 2181 VerifyFormInteractionUkm( |
2201 form, ukm_service, internal::kUKMSuggestionsShownEntryName, | 2182 form, ukm_recorder, internal::kUKMSuggestionsShownEntryName, |
2202 {{{internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); | 2183 {{{internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); |
2203 // Expect 2 |FORM_EVENT_LOCAL_SUGGESTION_FILLED| events. First, from | 2184 // Expect 2 |FORM_EVENT_LOCAL_SUGGESTION_FILLED| events. First, from |
2204 // call to |external_delegate_->DidAcceptSuggestion|. Second, from call to | 2185 // call to |external_delegate_->DidAcceptSuggestion|. Second, from call to |
2205 // |autofill_manager_->FillOrPreviewForm|. | 2186 // |autofill_manager_->FillOrPreviewForm|. |
2206 VerifyFormInteractionUkm( | 2187 VerifyFormInteractionUkm( |
2207 form, ukm_service, internal::kUKMSuggestionFilledEntryName, | 2188 form, ukm_recorder, internal::kUKMSuggestionFilledEntryName, |
2208 {{{internal::kUKMRecordTypeMetricName, CreditCard::LOCAL_CARD}, | 2189 {{{internal::kUKMRecordTypeMetricName, CreditCard::LOCAL_CARD}, |
2209 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}, | 2190 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}, |
2210 {{internal::kUKMRecordTypeMetricName, CreditCard::LOCAL_CARD}, | 2191 {{internal::kUKMRecordTypeMetricName, CreditCard::LOCAL_CARD}, |
2211 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); | 2192 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); |
2212 // Expect |NON_FILLABLE_FORM_OR_NEW_DATA| in |AutofillFormSubmittedState| | 2193 // Expect |NON_FILLABLE_FORM_OR_NEW_DATA| in |AutofillFormSubmittedState| |
2213 // because |field.value| is empty in |DeterminePossibleFieldTypesForUpload|. | 2194 // because |field.value| is empty in |DeterminePossibleFieldTypesForUpload|. |
2214 VerifySubmitFormUkm(form, ukm_service, | 2195 VerifySubmitFormUkm(form, ukm_recorder, |
2215 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); | 2196 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); |
2216 } | 2197 } |
2217 | 2198 |
2218 // Test that the profile checkout flow user actions are correctly logged. | 2199 // Test that the profile checkout flow user actions are correctly logged. |
2219 TEST_F(AutofillMetricsTest, ProfileCheckoutFlowUserActions) { | 2200 TEST_F(AutofillMetricsTest, ProfileCheckoutFlowUserActions) { |
2220 EnableUkmLogging(); | 2201 EnableUkmLogging(); |
2221 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 2202 ukm::TestUkmRecorder* ukm_recorder = autofill_client_.GetTestUkmRecorder(); |
2222 | 2203 |
2223 // Create a profile. | 2204 // Create a profile. |
2224 personal_data_->RecreateProfile(); | 2205 personal_data_->RecreateProfile(); |
2225 | 2206 |
2226 // Set up our form data. | 2207 // Set up our form data. |
2227 FormData form; | 2208 FormData form; |
2228 form.name = ASCIIToUTF16("TestForm"); | 2209 form.name = ASCIIToUTF16("TestForm"); |
2229 form.origin = GURL("http://example.com/form.html"); | 2210 form.origin = GURL("http://example.com/form.html"); |
2230 form.action = GURL("http://example.com/submit.html"); | 2211 form.action = GURL("http://example.com/submit.html"); |
2231 | 2212 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2288 base::UserActionTester user_action_tester; | 2269 base::UserActionTester user_action_tester; |
2289 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 2270 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
2290 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 2271 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
2291 EXPECT_EQ(1, | 2272 EXPECT_EQ(1, |
2292 user_action_tester.GetActionCount("Autofill_OnWillSubmitForm")); | 2273 user_action_tester.GetActionCount("Autofill_OnWillSubmitForm")); |
2293 EXPECT_EQ(1, user_action_tester.GetActionCount( | 2274 EXPECT_EQ(1, user_action_tester.GetActionCount( |
2294 "Autofill_FormSubmitted_NonFillable")); | 2275 "Autofill_FormSubmitted_NonFillable")); |
2295 } | 2276 } |
2296 | 2277 |
2297 VerifyFormInteractionUkm( | 2278 VerifyFormInteractionUkm( |
2298 form, ukm_service, internal::kUKMSuggestionsShownEntryName, | 2279 form, ukm_recorder, internal::kUKMSuggestionsShownEntryName, |
2299 {{{internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); | 2280 {{{internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); |
2300 // Expect 2 |FORM_EVENT_LOCAL_SUGGESTION_FILLED| events. First, from | 2281 // Expect 2 |FORM_EVENT_LOCAL_SUGGESTION_FILLED| events. First, from |
2301 // call to |external_delegate_->DidAcceptSuggestion|. Second, from call to | 2282 // call to |external_delegate_->DidAcceptSuggestion|. Second, from call to |
2302 // |autofill_manager_->FillOrPreviewForm|. | 2283 // |autofill_manager_->FillOrPreviewForm|. |
2303 VerifyFormInteractionUkm( | 2284 VerifyFormInteractionUkm( |
2304 form, ukm_service, internal::kUKMSuggestionFilledEntryName, | 2285 form, ukm_recorder, internal::kUKMSuggestionFilledEntryName, |
2305 {{{internal::kUKMRecordTypeMetricName, AutofillProfile::LOCAL_PROFILE}, | 2286 {{{internal::kUKMRecordTypeMetricName, AutofillProfile::LOCAL_PROFILE}, |
2306 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}, | 2287 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}, |
2307 {{internal::kUKMRecordTypeMetricName, AutofillProfile::LOCAL_PROFILE}, | 2288 {{internal::kUKMRecordTypeMetricName, AutofillProfile::LOCAL_PROFILE}, |
2308 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); | 2289 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); |
2309 // Expect |NON_FILLABLE_FORM_OR_NEW_DATA| in |AutofillFormSubmittedState| | 2290 // Expect |NON_FILLABLE_FORM_OR_NEW_DATA| in |AutofillFormSubmittedState| |
2310 // because |field.value| is empty in |DeterminePossibleFieldTypesForUpload|. | 2291 // because |field.value| is empty in |DeterminePossibleFieldTypesForUpload|. |
2311 VerifySubmitFormUkm(form, ukm_service, | 2292 VerifySubmitFormUkm(form, ukm_recorder, |
2312 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); | 2293 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); |
2313 } | 2294 } |
2314 | 2295 |
2315 // Tests that the Autofill_PolledCreditCardSuggestions user action is only | 2296 // Tests that the Autofill_PolledCreditCardSuggestions user action is only |
2316 // logged once if the field is queried repeatedly. | 2297 // logged once if the field is queried repeatedly. |
2317 TEST_F(AutofillMetricsTest, PolledCreditCardSuggestions_DebounceLogs) { | 2298 TEST_F(AutofillMetricsTest, PolledCreditCardSuggestions_DebounceLogs) { |
2318 personal_data_->RecreateCreditCards( | 2299 personal_data_->RecreateCreditCards( |
2319 true /* include_local_credit_card */, | 2300 true /* include_local_credit_card */, |
2320 false /* include_masked_server_credit_card */, | 2301 false /* include_masked_server_credit_card */, |
2321 false /* include_full_server_credit_card */); | 2302 false /* include_full_server_credit_card */); |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2594 field); | 2575 field); |
2595 histogram_tester.ExpectBucketCount( | 2576 histogram_tester.ExpectBucketCount( |
2596 "Autofill.FormEvents.CreditCard", | 2577 "Autofill.FormEvents.CreditCard", |
2597 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN, 0); | 2578 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN, 0); |
2598 histogram_tester.ExpectBucketCount( | 2579 histogram_tester.ExpectBucketCount( |
2599 "Autofill.FormEvents.CreditCard", | 2580 "Autofill.FormEvents.CreditCard", |
2600 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN_ONCE, 0); | 2581 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN_ONCE, 0); |
2601 } | 2582 } |
2602 | 2583 |
2603 // UKM must not be logged unless enabled. | 2584 // UKM must not be logged unless enabled. |
2604 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 2585 ukm::TestUkmRecorder* ukm_recorder = autofill_client_.GetTestUkmRecorder(); |
2605 EXPECT_EQ(0U, ukm_service->sources_count()); | 2586 EXPECT_EQ(0U, ukm_recorder->sources_count()); |
2606 EXPECT_EQ(0U, ukm_service->entries_count()); | 2587 EXPECT_EQ(0U, ukm_recorder->entries_count()); |
2607 } | 2588 } |
2608 | 2589 |
2609 // Test that we log selected form event for credit cards. | 2590 // Test that we log selected form event for credit cards. |
2610 TEST_F(AutofillMetricsTest, CreditCardSelectedFormEvents) { | 2591 TEST_F(AutofillMetricsTest, CreditCardSelectedFormEvents) { |
2611 EnableWalletSync(); | 2592 EnableWalletSync(); |
2612 // Creating all kinds of cards. | 2593 // Creating all kinds of cards. |
2613 personal_data_->RecreateCreditCards( | 2594 personal_data_->RecreateCreditCards( |
2614 true /* include_local_credit_card */, | 2595 true /* include_local_credit_card */, |
2615 true /* include_masked_server_credit_card */, | 2596 true /* include_masked_server_credit_card */, |
2616 true /* include_full_server_credit_card */); | 2597 true /* include_full_server_credit_card */); |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2864 histogram_tester.ExpectTotalCount( | 2845 histogram_tester.ExpectTotalCount( |
2865 "Autofill.UnmaskPrompt.GetRealPanDuration", 1); | 2846 "Autofill.UnmaskPrompt.GetRealPanDuration", 1); |
2866 histogram_tester.ExpectTotalCount( | 2847 histogram_tester.ExpectTotalCount( |
2867 "Autofill.UnmaskPrompt.GetRealPanDuration.Failure", 1); | 2848 "Autofill.UnmaskPrompt.GetRealPanDuration.Failure", 1); |
2868 } | 2849 } |
2869 } | 2850 } |
2870 | 2851 |
2871 // Test that we log submitted form events for credit cards. | 2852 // Test that we log submitted form events for credit cards. |
2872 TEST_F(AutofillMetricsTest, CreditCardSubmittedFormEvents) { | 2853 TEST_F(AutofillMetricsTest, CreditCardSubmittedFormEvents) { |
2873 EnableUkmLogging(); | 2854 EnableUkmLogging(); |
2874 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 2855 ukm::TestUkmRecorder* ukm_recorder = autofill_client_.GetTestUkmRecorder(); |
2875 | 2856 |
2876 EnableWalletSync(); | 2857 EnableWalletSync(); |
2877 // Creating all kinds of cards. | 2858 // Creating all kinds of cards. |
2878 personal_data_->RecreateCreditCards( | 2859 personal_data_->RecreateCreditCards( |
2879 true /* include_local_credit_card */, | 2860 true /* include_local_credit_card */, |
2880 true /* include_masked_server_credit_card */, | 2861 true /* include_masked_server_credit_card */, |
2881 true /* include_full_server_credit_card */); | 2862 true /* include_full_server_credit_card */); |
2882 // Set up our form data. | 2863 // Set up our form data. |
2883 FormData form; | 2864 FormData form; |
2884 form.name = ASCIIToUTF16("TestForm"); | 2865 form.name = ASCIIToUTF16("TestForm"); |
(...skipping 21 matching lines...) Expand all Loading... |
2906 base::HistogramTester histogram_tester; | 2887 base::HistogramTester histogram_tester; |
2907 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 2888 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
2908 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 2889 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
2909 histogram_tester.ExpectBucketCount( | 2890 histogram_tester.ExpectBucketCount( |
2910 "Autofill.FormEvents.CreditCard", | 2891 "Autofill.FormEvents.CreditCard", |
2911 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_WILL_SUBMIT_ONCE, 1); | 2892 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_WILL_SUBMIT_ONCE, 1); |
2912 histogram_tester.ExpectBucketCount( | 2893 histogram_tester.ExpectBucketCount( |
2913 "Autofill.FormEvents.CreditCard", | 2894 "Autofill.FormEvents.CreditCard", |
2914 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_SUBMITTED_ONCE, 1); | 2895 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_SUBMITTED_ONCE, 1); |
2915 | 2896 |
2916 VerifySubmitFormUkm(form, ukm_service, | 2897 VerifySubmitFormUkm(form, ukm_recorder, |
2917 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); | 2898 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); |
2918 } | 2899 } |
2919 | 2900 |
2920 // Reset the autofill manager state and purge UKM logs. | 2901 // Reset the autofill manager state and purge UKM logs. |
2921 autofill_manager_->Reset(); | 2902 autofill_manager_->Reset(); |
2922 ukm_service->Purge(); | 2903 ukm_recorder->Purge(); |
2923 | 2904 |
2924 autofill_manager_->AddSeenForm(form, field_types, field_types); | 2905 autofill_manager_->AddSeenForm(form, field_types, field_types); |
2925 | 2906 |
2926 { | 2907 { |
2927 // Simulating submission with suggestion shown. | 2908 // Simulating submission with suggestion shown. |
2928 base::HistogramTester histogram_tester; | 2909 base::HistogramTester histogram_tester; |
2929 autofill_manager_->DidShowSuggestions(true /* is_new_popup */, form, field); | 2910 autofill_manager_->DidShowSuggestions(true /* is_new_popup */, form, field); |
2930 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 2911 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
2931 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 2912 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
2932 histogram_tester.ExpectBucketCount( | 2913 histogram_tester.ExpectBucketCount( |
2933 "Autofill.FormEvents.CreditCard", | 2914 "Autofill.FormEvents.CreditCard", |
2934 AutofillMetrics::FORM_EVENT_SUGGESTION_SHOWN_SUBMITTED_ONCE, 1); | 2915 AutofillMetrics::FORM_EVENT_SUGGESTION_SHOWN_SUBMITTED_ONCE, 1); |
2935 histogram_tester.ExpectBucketCount( | 2916 histogram_tester.ExpectBucketCount( |
2936 "Autofill.FormEvents.CreditCard", | 2917 "Autofill.FormEvents.CreditCard", |
2937 AutofillMetrics::FORM_EVENT_SUGGESTION_SHOWN_WILL_SUBMIT_ONCE, 1); | 2918 AutofillMetrics::FORM_EVENT_SUGGESTION_SHOWN_WILL_SUBMIT_ONCE, 1); |
2938 | 2919 |
2939 VerifyFormInteractionUkm( | 2920 VerifyFormInteractionUkm( |
2940 form, ukm_service, internal::kUKMSuggestionsShownEntryName, | 2921 form, ukm_recorder, internal::kUKMSuggestionsShownEntryName, |
2941 {{{internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); | 2922 {{{internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); |
2942 VerifySubmitFormUkm(form, ukm_service, | 2923 VerifySubmitFormUkm(form, ukm_recorder, |
2943 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); | 2924 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); |
2944 } | 2925 } |
2945 | 2926 |
2946 // Reset the autofill manager state and purge UKM logs. | 2927 // Reset the autofill manager state and purge UKM logs. |
2947 autofill_manager_->Reset(); | 2928 autofill_manager_->Reset(); |
2948 ukm_service->Purge(); | 2929 ukm_recorder->Purge(); |
2949 | 2930 |
2950 autofill_manager_->AddSeenForm(form, field_types, field_types); | 2931 autofill_manager_->AddSeenForm(form, field_types, field_types); |
2951 | 2932 |
2952 { | 2933 { |
2953 // Simulating submission with filled local data. | 2934 // Simulating submission with filled local data. |
2954 base::HistogramTester histogram_tester; | 2935 base::HistogramTester histogram_tester; |
2955 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 2936 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
2956 std::string guid("10000000-0000-0000-0000-000000000001"); // local card | 2937 std::string guid("10000000-0000-0000-0000-000000000001"); // local card |
2957 autofill_manager_->FillOrPreviewForm( | 2938 autofill_manager_->FillOrPreviewForm( |
2958 AutofillDriver::FORM_DATA_ACTION_FILL, 0, form, form.fields.front(), | 2939 AutofillDriver::FORM_DATA_ACTION_FILL, 0, form, form.fields.front(), |
2959 autofill_manager_->MakeFrontendID(guid, std::string())); | 2940 autofill_manager_->MakeFrontendID(guid, std::string())); |
2960 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 2941 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
2961 histogram_tester.ExpectBucketCount( | 2942 histogram_tester.ExpectBucketCount( |
2962 "Autofill.FormEvents.CreditCard", | 2943 "Autofill.FormEvents.CreditCard", |
2963 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_WILL_SUBMIT_ONCE, 1); | 2944 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_WILL_SUBMIT_ONCE, 1); |
2964 histogram_tester.ExpectBucketCount( | 2945 histogram_tester.ExpectBucketCount( |
2965 "Autofill.FormEvents.CreditCard", | 2946 "Autofill.FormEvents.CreditCard", |
2966 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_SUBMITTED_ONCE, 1); | 2947 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_SUBMITTED_ONCE, 1); |
2967 | 2948 |
2968 VerifyFormInteractionUkm( | 2949 VerifyFormInteractionUkm( |
2969 form, ukm_service, internal::kUKMSuggestionFilledEntryName, | 2950 form, ukm_recorder, internal::kUKMSuggestionFilledEntryName, |
2970 {{{internal::kUKMRecordTypeMetricName, CreditCard::LOCAL_CARD}, | 2951 {{{internal::kUKMRecordTypeMetricName, CreditCard::LOCAL_CARD}, |
2971 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); | 2952 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); |
2972 VerifySubmitFormUkm(form, ukm_service, | 2953 VerifySubmitFormUkm(form, ukm_recorder, |
2973 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); | 2954 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); |
2974 } | 2955 } |
2975 | 2956 |
2976 // Reset the autofill manager state and purge UKM logs. | 2957 // Reset the autofill manager state and purge UKM logs. |
2977 autofill_manager_->Reset(); | 2958 autofill_manager_->Reset(); |
2978 ukm_service->Purge(); | 2959 ukm_recorder->Purge(); |
2979 | 2960 |
2980 autofill_manager_->AddSeenForm(form, field_types, field_types); | 2961 autofill_manager_->AddSeenForm(form, field_types, field_types); |
2981 | 2962 |
2982 { | 2963 { |
2983 // Simulating submission with filled server data. | 2964 // Simulating submission with filled server data. |
2984 base::HistogramTester histogram_tester; | 2965 base::HistogramTester histogram_tester; |
2985 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 2966 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
2986 std::string guid( | 2967 std::string guid( |
2987 "10000000-0000-0000-0000-000000000003"); // full server card | 2968 "10000000-0000-0000-0000-000000000003"); // full server card |
2988 autofill_manager_->FillOrPreviewForm( | 2969 autofill_manager_->FillOrPreviewForm( |
2989 AutofillDriver::FORM_DATA_ACTION_FILL, 0, form, form.fields.front(), | 2970 AutofillDriver::FORM_DATA_ACTION_FILL, 0, form, form.fields.front(), |
2990 autofill_manager_->MakeFrontendID(guid, std::string())); | 2971 autofill_manager_->MakeFrontendID(guid, std::string())); |
2991 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 2972 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
2992 histogram_tester.ExpectBucketCount( | 2973 histogram_tester.ExpectBucketCount( |
2993 "Autofill.FormEvents.CreditCard", | 2974 "Autofill.FormEvents.CreditCard", |
2994 AutofillMetrics::FORM_EVENT_SERVER_SUGGESTION_WILL_SUBMIT_ONCE, 1); | 2975 AutofillMetrics::FORM_EVENT_SERVER_SUGGESTION_WILL_SUBMIT_ONCE, 1); |
2995 histogram_tester.ExpectBucketCount( | 2976 histogram_tester.ExpectBucketCount( |
2996 "Autofill.FormEvents.CreditCard", | 2977 "Autofill.FormEvents.CreditCard", |
2997 AutofillMetrics::FORM_EVENT_SERVER_SUGGESTION_SUBMITTED_ONCE, 1); | 2978 AutofillMetrics::FORM_EVENT_SERVER_SUGGESTION_SUBMITTED_ONCE, 1); |
2998 | 2979 |
2999 VerifyFormInteractionUkm( | 2980 VerifyFormInteractionUkm( |
3000 form, ukm_service, internal::kUKMSuggestionFilledEntryName, | 2981 form, ukm_recorder, internal::kUKMSuggestionFilledEntryName, |
3001 {{{internal::kUKMRecordTypeMetricName, CreditCard::FULL_SERVER_CARD}, | 2982 {{{internal::kUKMRecordTypeMetricName, CreditCard::FULL_SERVER_CARD}, |
3002 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); | 2983 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); |
3003 VerifySubmitFormUkm(form, ukm_service, | 2984 VerifySubmitFormUkm(form, ukm_recorder, |
3004 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); | 2985 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); |
3005 } | 2986 } |
3006 | 2987 |
3007 // Reset the autofill manager state and purge UKM logs. | 2988 // Reset the autofill manager state and purge UKM logs. |
3008 autofill_manager_->Reset(); | 2989 autofill_manager_->Reset(); |
3009 ukm_service->Purge(); | 2990 ukm_recorder->Purge(); |
3010 | 2991 |
3011 autofill_manager_->AddSeenForm(form, field_types, field_types); | 2992 autofill_manager_->AddSeenForm(form, field_types, field_types); |
3012 | 2993 |
3013 { | 2994 { |
3014 // Simulating submission with a masked card server suggestion. | 2995 // Simulating submission with a masked card server suggestion. |
3015 base::HistogramTester histogram_tester; | 2996 base::HistogramTester histogram_tester; |
3016 std::string guid( | 2997 std::string guid( |
3017 "10000000-0000-0000-0000-000000000002"); // masked server card | 2998 "10000000-0000-0000-0000-000000000002"); // masked server card |
3018 autofill_manager_->FillOrPreviewForm( | 2999 autofill_manager_->FillOrPreviewForm( |
3019 AutofillDriver::FORM_DATA_ACTION_FILL, 0, form, form.fields.back(), | 3000 AutofillDriver::FORM_DATA_ACTION_FILL, 0, form, form.fields.back(), |
3020 autofill_manager_->MakeFrontendID(guid, std::string())); | 3001 autofill_manager_->MakeFrontendID(guid, std::string())); |
3021 autofill_manager_->OnDidGetRealPan(AutofillClient::SUCCESS, | 3002 autofill_manager_->OnDidGetRealPan(AutofillClient::SUCCESS, |
3022 "6011000990139424"); | 3003 "6011000990139424"); |
3023 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 3004 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
3024 histogram_tester.ExpectBucketCount( | 3005 histogram_tester.ExpectBucketCount( |
3025 "Autofill.FormEvents.CreditCard", | 3006 "Autofill.FormEvents.CreditCard", |
3026 AutofillMetrics::FORM_EVENT_MASKED_SERVER_CARD_SUGGESTION_FILLED, 1); | 3007 AutofillMetrics::FORM_EVENT_MASKED_SERVER_CARD_SUGGESTION_FILLED, 1); |
3027 histogram_tester.ExpectBucketCount( | 3008 histogram_tester.ExpectBucketCount( |
3028 "Autofill.FormEvents.CreditCard", | 3009 "Autofill.FormEvents.CreditCard", |
3029 AutofillMetrics::FORM_EVENT_MASKED_SERVER_CARD_SUGGESTION_FILLED_ONCE, | 3010 AutofillMetrics::FORM_EVENT_MASKED_SERVER_CARD_SUGGESTION_FILLED_ONCE, |
3030 1); | 3011 1); |
3031 | 3012 |
3032 VerifyFormInteractionUkm( | 3013 VerifyFormInteractionUkm( |
3033 form, ukm_service, internal::kUKMSuggestionFilledEntryName, | 3014 form, ukm_recorder, internal::kUKMSuggestionFilledEntryName, |
3034 {{{internal::kUKMRecordTypeMetricName, CreditCard::MASKED_SERVER_CARD}, | 3015 {{{internal::kUKMRecordTypeMetricName, CreditCard::MASKED_SERVER_CARD}, |
3035 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); | 3016 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); |
3036 VerifyFormInteractionUkm( | 3017 VerifyFormInteractionUkm( |
3037 form, ukm_service, internal::kUKMSelectedMaskedServerCardEntryName, | 3018 form, ukm_recorder, internal::kUKMSelectedMaskedServerCardEntryName, |
3038 {{{internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); | 3019 {{{internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); |
3039 VerifySubmitFormUkm(form, ukm_service, | 3020 VerifySubmitFormUkm(form, ukm_recorder, |
3040 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); | 3021 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); |
3041 } | 3022 } |
3042 | 3023 |
3043 // Reset the autofill manager state and purge UKM logs. | 3024 // Reset the autofill manager state and purge UKM logs. |
3044 autofill_manager_->Reset(); | 3025 autofill_manager_->Reset(); |
3045 ukm_service->Purge(); | 3026 ukm_recorder->Purge(); |
3046 | 3027 |
3047 // Recreating cards as the previous test should have upgraded the masked | 3028 // Recreating cards as the previous test should have upgraded the masked |
3048 // card to a full card. | 3029 // card to a full card. |
3049 personal_data_->RecreateCreditCards( | 3030 personal_data_->RecreateCreditCards( |
3050 true /* include_local_credit_card */, | 3031 true /* include_local_credit_card */, |
3051 true /* include_masked_server_credit_card */, | 3032 true /* include_masked_server_credit_card */, |
3052 true /* include_full_server_credit_card */); | 3033 true /* include_full_server_credit_card */); |
3053 | 3034 |
3054 // Reset the autofill manager state. | 3035 // Reset the autofill manager state. |
3055 autofill_manager_->Reset(); | 3036 autofill_manager_->Reset(); |
3056 autofill_manager_->AddSeenForm(form, field_types, field_types); | 3037 autofill_manager_->AddSeenForm(form, field_types, field_types); |
3057 | 3038 |
3058 { | 3039 { |
3059 // Simulating multiple submissions. | 3040 // Simulating multiple submissions. |
3060 base::HistogramTester histogram_tester; | 3041 base::HistogramTester histogram_tester; |
3061 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 3042 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
3062 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 3043 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
3063 | 3044 |
3064 VerifyFormInteractionUkm( | 3045 VerifyFormInteractionUkm( |
3065 form, ukm_service, internal::kUKMFormSubmittedEntryName, | 3046 form, ukm_recorder, internal::kUKMFormSubmittedEntryName, |
3066 {{{internal::kUKMAutofillFormSubmittedStateMetricName, | 3047 {{{internal::kUKMAutofillFormSubmittedStateMetricName, |
3067 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}, | 3048 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}, |
3068 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); | 3049 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); |
3069 | 3050 |
3070 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 3051 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
3071 | 3052 |
3072 VerifyFormInteractionUkm( | 3053 VerifyFormInteractionUkm( |
3073 form, ukm_service, internal::kUKMFormSubmittedEntryName, | 3054 form, ukm_recorder, internal::kUKMFormSubmittedEntryName, |
3074 {{{internal::kUKMAutofillFormSubmittedStateMetricName, | 3055 {{{internal::kUKMAutofillFormSubmittedStateMetricName, |
3075 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}, | 3056 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}, |
3076 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}, | 3057 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}, |
3077 {{internal::kUKMAutofillFormSubmittedStateMetricName, | 3058 {{internal::kUKMAutofillFormSubmittedStateMetricName, |
3078 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}, | 3059 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}, |
3079 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); | 3060 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); |
3080 | 3061 |
3081 histogram_tester.ExpectBucketCount( | 3062 histogram_tester.ExpectBucketCount( |
3082 "Autofill.FormEvents.CreditCard", | 3063 "Autofill.FormEvents.CreditCard", |
3083 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_WILL_SUBMIT_ONCE, 1); | 3064 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_WILL_SUBMIT_ONCE, 1); |
(...skipping 25 matching lines...) Expand all Loading... |
3109 AutofillMetrics::FORM_EVENT_SERVER_SUGGESTION_SUBMITTED_ONCE, 0); | 3090 AutofillMetrics::FORM_EVENT_SERVER_SUGGESTION_SUBMITTED_ONCE, 0); |
3110 histogram_tester.ExpectBucketCount( | 3091 histogram_tester.ExpectBucketCount( |
3111 "Autofill.FormEvents.CreditCard", | 3092 "Autofill.FormEvents.CreditCard", |
3112 AutofillMetrics:: | 3093 AutofillMetrics:: |
3113 FORM_EVENT_MASKED_SERVER_CARD_SUGGESTION_SUBMITTED_ONCE, | 3094 FORM_EVENT_MASKED_SERVER_CARD_SUGGESTION_SUBMITTED_ONCE, |
3114 0); | 3095 0); |
3115 } | 3096 } |
3116 | 3097 |
3117 // Reset the autofill manager state and purge UKM logs. | 3098 // Reset the autofill manager state and purge UKM logs. |
3118 autofill_manager_->Reset(); | 3099 autofill_manager_->Reset(); |
3119 ukm_service->Purge(); | 3100 ukm_recorder->Purge(); |
3120 | 3101 |
3121 autofill_manager_->AddSeenForm(form, field_types, field_types); | 3102 autofill_manager_->AddSeenForm(form, field_types, field_types); |
3122 | 3103 |
3123 { | 3104 { |
3124 // Simulating submission with suggestion shown but without previous | 3105 // Simulating submission with suggestion shown but without previous |
3125 // interaction. | 3106 // interaction. |
3126 base::HistogramTester histogram_tester; | 3107 base::HistogramTester histogram_tester; |
3127 autofill_manager_->DidShowSuggestions(true /* is_new_popup */, form, field); | 3108 autofill_manager_->DidShowSuggestions(true /* is_new_popup */, form, field); |
3128 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 3109 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
3129 histogram_tester.ExpectBucketCount( | 3110 histogram_tester.ExpectBucketCount( |
(...skipping 25 matching lines...) Expand all Loading... |
3155 histogram_tester.ExpectBucketCount( | 3136 histogram_tester.ExpectBucketCount( |
3156 "Autofill.FormEvents.CreditCard", | 3137 "Autofill.FormEvents.CreditCard", |
3157 AutofillMetrics::FORM_EVENT_SERVER_SUGGESTION_WILL_SUBMIT_ONCE, 0); | 3138 AutofillMetrics::FORM_EVENT_SERVER_SUGGESTION_WILL_SUBMIT_ONCE, 0); |
3158 histogram_tester.ExpectBucketCount( | 3139 histogram_tester.ExpectBucketCount( |
3159 "Autofill.FormEvents.CreditCard", | 3140 "Autofill.FormEvents.CreditCard", |
3160 AutofillMetrics:: | 3141 AutofillMetrics:: |
3161 FORM_EVENT_MASKED_SERVER_CARD_SUGGESTION_WILL_SUBMIT_ONCE, | 3142 FORM_EVENT_MASKED_SERVER_CARD_SUGGESTION_WILL_SUBMIT_ONCE, |
3162 0); | 3143 0); |
3163 | 3144 |
3164 VerifyFormInteractionUkm( | 3145 VerifyFormInteractionUkm( |
3165 form, ukm_service, internal::kUKMSuggestionsShownEntryName, | 3146 form, ukm_recorder, internal::kUKMSuggestionsShownEntryName, |
3166 {{{internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); | 3147 {{{internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); |
3167 VerifySubmitFormUkm(form, ukm_service, | 3148 VerifySubmitFormUkm(form, ukm_recorder, |
3168 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); | 3149 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); |
3169 } | 3150 } |
3170 } | 3151 } |
3171 | 3152 |
3172 // Test that we log "will submit" (but not submitted) form events for credit | 3153 // Test that we log "will submit" (but not submitted) form events for credit |
3173 // cards. Mirrors CreditCardSubmittedFormEvents test but does not expect any | 3154 // cards. Mirrors CreditCardSubmittedFormEvents test but does not expect any |
3174 // "submitted" metrics. | 3155 // "submitted" metrics. |
3175 TEST_F(AutofillMetricsTest, CreditCardWillSubmitFormEvents) { | 3156 TEST_F(AutofillMetricsTest, CreditCardWillSubmitFormEvents) { |
3176 EnableWalletSync(); | 3157 EnableWalletSync(); |
3177 // Creating all kinds of cards. | 3158 // Creating all kinds of cards. |
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3581 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_FILLED, 2); | 3562 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_FILLED, 2); |
3582 histogram_tester.ExpectBucketCount( | 3563 histogram_tester.ExpectBucketCount( |
3583 "Autofill.FormEvents.Address", | 3564 "Autofill.FormEvents.Address", |
3584 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_FILLED_ONCE, 1); | 3565 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_FILLED_ONCE, 1); |
3585 } | 3566 } |
3586 } | 3567 } |
3587 | 3568 |
3588 // Test that we log submitted form events for address. | 3569 // Test that we log submitted form events for address. |
3589 TEST_F(AutofillMetricsTest, AddressSubmittedFormEvents) { | 3570 TEST_F(AutofillMetricsTest, AddressSubmittedFormEvents) { |
3590 EnableUkmLogging(); | 3571 EnableUkmLogging(); |
3591 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 3572 ukm::TestUkmRecorder* ukm_recorder = autofill_client_.GetTestUkmRecorder(); |
3592 | 3573 |
3593 EnableWalletSync(); | 3574 EnableWalletSync(); |
3594 // Create a profile. | 3575 // Create a profile. |
3595 personal_data_->RecreateProfile(); | 3576 personal_data_->RecreateProfile(); |
3596 // Set up our form data. | 3577 // Set up our form data. |
3597 FormData form; | 3578 FormData form; |
3598 form.name = ASCIIToUTF16("TestForm"); | 3579 form.name = ASCIIToUTF16("TestForm"); |
3599 form.origin = GURL("http://example.com/form.html"); | 3580 form.origin = GURL("http://example.com/form.html"); |
3600 form.action = GURL("http://example.com/submit.html"); | 3581 form.action = GURL("http://example.com/submit.html"); |
3601 | 3582 |
(...skipping 18 matching lines...) Expand all Loading... |
3620 base::HistogramTester histogram_tester; | 3601 base::HistogramTester histogram_tester; |
3621 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 3602 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
3622 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 3603 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
3623 histogram_tester.ExpectBucketCount( | 3604 histogram_tester.ExpectBucketCount( |
3624 "Autofill.FormEvents.Address", | 3605 "Autofill.FormEvents.Address", |
3625 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_WILL_SUBMIT_ONCE, 1); | 3606 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_WILL_SUBMIT_ONCE, 1); |
3626 histogram_tester.ExpectBucketCount( | 3607 histogram_tester.ExpectBucketCount( |
3627 "Autofill.FormEvents.Address", | 3608 "Autofill.FormEvents.Address", |
3628 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_SUBMITTED_ONCE, 1); | 3609 AutofillMetrics::FORM_EVENT_NO_SUGGESTION_SUBMITTED_ONCE, 1); |
3629 | 3610 |
3630 VerifySubmitFormUkm(form, ukm_service, | 3611 VerifySubmitFormUkm(form, ukm_recorder, |
3631 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); | 3612 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); |
3632 } | 3613 } |
3633 | 3614 |
3634 // Reset the autofill manager state and purge UKM logs. | 3615 // Reset the autofill manager state and purge UKM logs. |
3635 autofill_manager_->Reset(); | 3616 autofill_manager_->Reset(); |
3636 ukm_service->Purge(); | 3617 ukm_recorder->Purge(); |
3637 | 3618 |
3638 autofill_manager_->AddSeenForm(form, field_types, field_types); | 3619 autofill_manager_->AddSeenForm(form, field_types, field_types); |
3639 | 3620 |
3640 { | 3621 { |
3641 // Simulating submission with suggestion shown. | 3622 // Simulating submission with suggestion shown. |
3642 base::HistogramTester histogram_tester; | 3623 base::HistogramTester histogram_tester; |
3643 autofill_manager_->DidShowSuggestions(true /* is_new_popup */, form, field); | 3624 autofill_manager_->DidShowSuggestions(true /* is_new_popup */, form, field); |
3644 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 3625 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
3645 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 3626 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
3646 histogram_tester.ExpectBucketCount( | 3627 histogram_tester.ExpectBucketCount( |
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4122 AutofillProfile profile; | 4103 AutofillProfile profile; |
4123 profile.set_use_date(base::Time::Now() - base::TimeDelta::FromDays(13)); | 4104 profile.set_use_date(base::Time::Now() - base::TimeDelta::FromDays(13)); |
4124 profile.RecordAndLogUse(); | 4105 profile.RecordAndLogUse(); |
4125 histogram_tester.ExpectBucketCount("Autofill.DaysSinceLastUse.Profile", 13, | 4106 histogram_tester.ExpectBucketCount("Autofill.DaysSinceLastUse.Profile", 13, |
4126 1); | 4107 1); |
4127 } | 4108 } |
4128 | 4109 |
4129 // Verify that we correctly log the submitted form's state. | 4110 // Verify that we correctly log the submitted form's state. |
4130 TEST_F(AutofillMetricsTest, AutofillFormSubmittedState) { | 4111 TEST_F(AutofillMetricsTest, AutofillFormSubmittedState) { |
4131 EnableUkmLogging(); | 4112 EnableUkmLogging(); |
4132 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 4113 ukm::TestUkmRecorder* ukm_recorder = autofill_client_.GetTestUkmRecorder(); |
4133 | 4114 |
4134 // Start with a form with insufficiently many fields. | 4115 // Start with a form with insufficiently many fields. |
4135 FormData form; | 4116 FormData form; |
4136 form.name = ASCIIToUTF16("TestForm"); | 4117 form.name = ASCIIToUTF16("TestForm"); |
4137 form.origin = GURL("http://example.com/form.html"); | 4118 form.origin = GURL("http://example.com/form.html"); |
4138 form.action = GURL("http://example.com/submit.html"); | 4119 form.action = GURL("http://example.com/submit.html"); |
4139 | 4120 |
4140 FormFieldData field; | 4121 FormFieldData field; |
4141 test::CreateTestFormField("Name", "name", "", "text", &field); | 4122 test::CreateTestFormField("Name", "name", "", "text", &field); |
4142 form.fields.push_back(field); | 4123 form.fields.push_back(field); |
(...skipping 24 matching lines...) Expand all Loading... |
4167 base::UserActionTester user_action_tester; | 4148 base::UserActionTester user_action_tester; |
4168 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 4149 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
4169 histogram_tester.ExpectUniqueSample( | 4150 histogram_tester.ExpectUniqueSample( |
4170 "Autofill.FormSubmittedState", | 4151 "Autofill.FormSubmittedState", |
4171 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA, 1); | 4152 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA, 1); |
4172 EXPECT_EQ(1, user_action_tester.GetActionCount( | 4153 EXPECT_EQ(1, user_action_tester.GetActionCount( |
4173 "Autofill_FormSubmitted_NonFillable")); | 4154 "Autofill_FormSubmitted_NonFillable")); |
4174 | 4155 |
4175 // Expect an entry for |DeveloperEngagement| and an entry for form | 4156 // Expect an entry for |DeveloperEngagement| and an entry for form |
4176 // interactions. Both entries are for the same URL. | 4157 // interactions. Both entries are for the same URL. |
4177 ASSERT_EQ(2U, ukm_service->entries_count()); | 4158 ASSERT_EQ(2U, ukm_recorder->entries_count()); |
4178 ASSERT_EQ(2U, ukm_service->sources_count()); | 4159 ASSERT_EQ(2U, ukm_recorder->sources_count()); |
4179 VerifyDeveloperEngagementUkm( | 4160 VerifyDeveloperEngagementUkm( |
4180 form, ukm_service, | 4161 form, ukm_recorder, |
4181 {AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS}); | 4162 {AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS}); |
4182 VerifyFormInteractionUkm(form, ukm_service, | 4163 VerifyFormInteractionUkm(form, ukm_recorder, |
4183 internal::kUKMFormSubmittedEntryName, | 4164 internal::kUKMFormSubmittedEntryName, |
4184 expected_form_submission_ukm_metrics); | 4165 expected_form_submission_ukm_metrics); |
4185 } | 4166 } |
4186 | 4167 |
4187 // Non fillable form. | 4168 // Non fillable form. |
4188 form.fields[0].value = ASCIIToUTF16("Elvis Aaron Presley"); | 4169 form.fields[0].value = ASCIIToUTF16("Elvis Aaron Presley"); |
4189 form.fields[1].value = ASCIIToUTF16("theking@gmail.com"); | 4170 form.fields[1].value = ASCIIToUTF16("theking@gmail.com"); |
4190 forms.front() = form; | 4171 forms.front() = form; |
4191 | 4172 |
4192 { | 4173 { |
4193 base::HistogramTester histogram_tester; | 4174 base::HistogramTester histogram_tester; |
4194 base::UserActionTester user_action_tester; | 4175 base::UserActionTester user_action_tester; |
4195 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 4176 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
4196 histogram_tester.ExpectUniqueSample( | 4177 histogram_tester.ExpectUniqueSample( |
4197 "Autofill.FormSubmittedState", | 4178 "Autofill.FormSubmittedState", |
4198 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA, 1); | 4179 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA, 1); |
4199 EXPECT_EQ(1, user_action_tester.GetActionCount( | 4180 EXPECT_EQ(1, user_action_tester.GetActionCount( |
4200 "Autofill_FormSubmitted_NonFillable")); | 4181 "Autofill_FormSubmitted_NonFillable")); |
4201 | 4182 |
4202 expected_form_submission_ukm_metrics.push_back( | 4183 expected_form_submission_ukm_metrics.push_back( |
4203 {{internal::kUKMAutofillFormSubmittedStateMetricName, | 4184 {{internal::kUKMAutofillFormSubmittedStateMetricName, |
4204 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}, | 4185 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}, |
4205 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}); | 4186 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}); |
4206 VerifyFormInteractionUkm(form, ukm_service, | 4187 VerifyFormInteractionUkm(form, ukm_recorder, |
4207 internal::kUKMFormSubmittedEntryName, | 4188 internal::kUKMFormSubmittedEntryName, |
4208 expected_form_submission_ukm_metrics); | 4189 expected_form_submission_ukm_metrics); |
4209 } | 4190 } |
4210 | 4191 |
4211 // Fill in the third field. | 4192 // Fill in the third field. |
4212 form.fields[2].value = ASCIIToUTF16("12345678901"); | 4193 form.fields[2].value = ASCIIToUTF16("12345678901"); |
4213 forms.front() = form; | 4194 forms.front() = form; |
4214 | 4195 |
4215 // Autofilled none with no suggestions shown. | 4196 // Autofilled none with no suggestions shown. |
4216 { | 4197 { |
4217 base::HistogramTester histogram_tester; | 4198 base::HistogramTester histogram_tester; |
4218 base::UserActionTester user_action_tester; | 4199 base::UserActionTester user_action_tester; |
4219 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 4200 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
4220 histogram_tester.ExpectUniqueSample( | 4201 histogram_tester.ExpectUniqueSample( |
4221 "Autofill.FormSubmittedState", | 4202 "Autofill.FormSubmittedState", |
4222 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_NONE_DID_NOT_SHOW_SUGGESTIONS, | 4203 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_NONE_DID_NOT_SHOW_SUGGESTIONS, |
4223 1); | 4204 1); |
4224 EXPECT_EQ(1, user_action_tester.GetActionCount( | 4205 EXPECT_EQ(1, user_action_tester.GetActionCount( |
4225 "Autofill_FormSubmitted_FilledNone_SuggestionsNotShown")); | 4206 "Autofill_FormSubmitted_FilledNone_SuggestionsNotShown")); |
4226 | 4207 |
4227 expected_form_submission_ukm_metrics.push_back( | 4208 expected_form_submission_ukm_metrics.push_back( |
4228 {{internal::kUKMAutofillFormSubmittedStateMetricName, | 4209 {{internal::kUKMAutofillFormSubmittedStateMetricName, |
4229 AutofillMetrics:: | 4210 AutofillMetrics:: |
4230 FILLABLE_FORM_AUTOFILLED_NONE_DID_NOT_SHOW_SUGGESTIONS}, | 4211 FILLABLE_FORM_AUTOFILLED_NONE_DID_NOT_SHOW_SUGGESTIONS}, |
4231 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}); | 4212 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}); |
4232 VerifyFormInteractionUkm(form, ukm_service, | 4213 VerifyFormInteractionUkm(form, ukm_recorder, |
4233 internal::kUKMFormSubmittedEntryName, | 4214 internal::kUKMFormSubmittedEntryName, |
4234 expected_form_submission_ukm_metrics); | 4215 expected_form_submission_ukm_metrics); |
4235 } | 4216 } |
4236 | 4217 |
4237 // Autofilled none with suggestions shown. | 4218 // Autofilled none with suggestions shown. |
4238 autofill_manager_->DidShowSuggestions(true, form, form.fields[2]); | 4219 autofill_manager_->DidShowSuggestions(true, form, form.fields[2]); |
4239 { | 4220 { |
4240 base::HistogramTester histogram_tester; | 4221 base::HistogramTester histogram_tester; |
4241 base::UserActionTester user_action_tester; | 4222 base::UserActionTester user_action_tester; |
4242 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 4223 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
4243 histogram_tester.ExpectUniqueSample( | 4224 histogram_tester.ExpectUniqueSample( |
4244 "Autofill.FormSubmittedState", | 4225 "Autofill.FormSubmittedState", |
4245 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_NONE_DID_SHOW_SUGGESTIONS, 1); | 4226 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_NONE_DID_SHOW_SUGGESTIONS, 1); |
4246 EXPECT_EQ(1, user_action_tester.GetActionCount( | 4227 EXPECT_EQ(1, user_action_tester.GetActionCount( |
4247 "Autofill_FormSubmitted_FilledNone_SuggestionsShown")); | 4228 "Autofill_FormSubmitted_FilledNone_SuggestionsShown")); |
4248 | 4229 |
4249 VerifyFormInteractionUkm( | 4230 VerifyFormInteractionUkm( |
4250 form, ukm_service, internal::kUKMSuggestionsShownEntryName, | 4231 form, ukm_recorder, internal::kUKMSuggestionsShownEntryName, |
4251 {{{internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); | 4232 {{{internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); |
4252 expected_form_submission_ukm_metrics.push_back( | 4233 expected_form_submission_ukm_metrics.push_back( |
4253 {{internal::kUKMAutofillFormSubmittedStateMetricName, | 4234 {{internal::kUKMAutofillFormSubmittedStateMetricName, |
4254 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_NONE_DID_SHOW_SUGGESTIONS}, | 4235 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_NONE_DID_SHOW_SUGGESTIONS}, |
4255 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}); | 4236 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}); |
4256 VerifyFormInteractionUkm(form, ukm_service, | 4237 VerifyFormInteractionUkm(form, ukm_recorder, |
4257 internal::kUKMFormSubmittedEntryName, | 4238 internal::kUKMFormSubmittedEntryName, |
4258 expected_form_submission_ukm_metrics); | 4239 expected_form_submission_ukm_metrics); |
4259 } | 4240 } |
4260 | 4241 |
4261 // Mark one of the fields as autofilled. | 4242 // Mark one of the fields as autofilled. |
4262 form.fields[1].is_autofilled = true; | 4243 form.fields[1].is_autofilled = true; |
4263 forms.front() = form; | 4244 forms.front() = form; |
4264 | 4245 |
4265 // Autofilled some of the fields. | 4246 // Autofilled some of the fields. |
4266 { | 4247 { |
4267 base::HistogramTester histogram_tester; | 4248 base::HistogramTester histogram_tester; |
4268 base::UserActionTester user_action_tester; | 4249 base::UserActionTester user_action_tester; |
4269 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 4250 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
4270 histogram_tester.ExpectUniqueSample( | 4251 histogram_tester.ExpectUniqueSample( |
4271 "Autofill.FormSubmittedState", | 4252 "Autofill.FormSubmittedState", |
4272 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_SOME, 1); | 4253 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_SOME, 1); |
4273 EXPECT_EQ(1, user_action_tester.GetActionCount( | 4254 EXPECT_EQ(1, user_action_tester.GetActionCount( |
4274 "Autofill_FormSubmitted_FilledSome")); | 4255 "Autofill_FormSubmitted_FilledSome")); |
4275 | 4256 |
4276 expected_form_submission_ukm_metrics.push_back( | 4257 expected_form_submission_ukm_metrics.push_back( |
4277 {{internal::kUKMAutofillFormSubmittedStateMetricName, | 4258 {{internal::kUKMAutofillFormSubmittedStateMetricName, |
4278 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_SOME}, | 4259 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_SOME}, |
4279 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}); | 4260 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}); |
4280 VerifyFormInteractionUkm(form, ukm_service, | 4261 VerifyFormInteractionUkm(form, ukm_recorder, |
4281 internal::kUKMFormSubmittedEntryName, | 4262 internal::kUKMFormSubmittedEntryName, |
4282 expected_form_submission_ukm_metrics); | 4263 expected_form_submission_ukm_metrics); |
4283 } | 4264 } |
4284 | 4265 |
4285 // Mark all of the fillable fields as autofilled. | 4266 // Mark all of the fillable fields as autofilled. |
4286 form.fields[0].is_autofilled = true; | 4267 form.fields[0].is_autofilled = true; |
4287 form.fields[2].is_autofilled = true; | 4268 form.fields[2].is_autofilled = true; |
4288 forms.front() = form; | 4269 forms.front() = form; |
4289 | 4270 |
4290 // Autofilled all the fields. | 4271 // Autofilled all the fields. |
4291 { | 4272 { |
4292 base::HistogramTester histogram_tester; | 4273 base::HistogramTester histogram_tester; |
4293 base::UserActionTester user_action_tester; | 4274 base::UserActionTester user_action_tester; |
4294 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 4275 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
4295 histogram_tester.ExpectUniqueSample( | 4276 histogram_tester.ExpectUniqueSample( |
4296 "Autofill.FormSubmittedState", | 4277 "Autofill.FormSubmittedState", |
4297 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_ALL, 1); | 4278 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_ALL, 1); |
4298 EXPECT_EQ(1, user_action_tester.GetActionCount( | 4279 EXPECT_EQ(1, user_action_tester.GetActionCount( |
4299 "Autofill_FormSubmitted_FilledAll")); | 4280 "Autofill_FormSubmitted_FilledAll")); |
4300 | 4281 |
4301 expected_form_submission_ukm_metrics.push_back( | 4282 expected_form_submission_ukm_metrics.push_back( |
4302 {{internal::kUKMAutofillFormSubmittedStateMetricName, | 4283 {{internal::kUKMAutofillFormSubmittedStateMetricName, |
4303 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_ALL}, | 4284 AutofillMetrics::FILLABLE_FORM_AUTOFILLED_ALL}, |
4304 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}); | 4285 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}); |
4305 VerifyFormInteractionUkm(form, ukm_service, | 4286 VerifyFormInteractionUkm(form, ukm_recorder, |
4306 internal::kUKMFormSubmittedEntryName, | 4287 internal::kUKMFormSubmittedEntryName, |
4307 expected_form_submission_ukm_metrics); | 4288 expected_form_submission_ukm_metrics); |
4308 } | 4289 } |
4309 | 4290 |
4310 // Clear out the third field's value. | 4291 // Clear out the third field's value. |
4311 form.fields[2].value = base::string16(); | 4292 form.fields[2].value = base::string16(); |
4312 forms.front() = form; | 4293 forms.front() = form; |
4313 | 4294 |
4314 // Non fillable form. | 4295 // Non fillable form. |
4315 { | 4296 { |
4316 base::HistogramTester histogram_tester; | 4297 base::HistogramTester histogram_tester; |
4317 base::UserActionTester user_action_tester; | 4298 base::UserActionTester user_action_tester; |
4318 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 4299 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
4319 histogram_tester.ExpectUniqueSample( | 4300 histogram_tester.ExpectUniqueSample( |
4320 "Autofill.FormSubmittedState", | 4301 "Autofill.FormSubmittedState", |
4321 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA, 1); | 4302 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA, 1); |
4322 EXPECT_EQ(1, user_action_tester.GetActionCount( | 4303 EXPECT_EQ(1, user_action_tester.GetActionCount( |
4323 "Autofill_FormSubmitted_NonFillable")); | 4304 "Autofill_FormSubmitted_NonFillable")); |
4324 | 4305 |
4325 expected_form_submission_ukm_metrics.push_back( | 4306 expected_form_submission_ukm_metrics.push_back( |
4326 {{internal::kUKMAutofillFormSubmittedStateMetricName, | 4307 {{internal::kUKMAutofillFormSubmittedStateMetricName, |
4327 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}, | 4308 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA}, |
4328 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}); | 4309 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}); |
4329 VerifyFormInteractionUkm(form, ukm_service, | 4310 VerifyFormInteractionUkm(form, ukm_recorder, |
4330 internal::kUKMFormSubmittedEntryName, | 4311 internal::kUKMFormSubmittedEntryName, |
4331 expected_form_submission_ukm_metrics); | 4312 expected_form_submission_ukm_metrics); |
4332 } | 4313 } |
4333 } | 4314 } |
4334 | 4315 |
4335 // Verify that we correctly log user happiness metrics dealing with form | 4316 // Verify that we correctly log user happiness metrics dealing with form |
4336 // interaction. | 4317 // interaction. |
4337 TEST_F(AutofillMetricsTest, UserHappinessFormInteraction) { | 4318 TEST_F(AutofillMetricsTest, UserHappinessFormInteraction) { |
4338 EnableUkmLogging(); | 4319 EnableUkmLogging(); |
4339 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 4320 ukm::TestUkmRecorder* ukm_recorder = autofill_client_.GetTestUkmRecorder(); |
4340 | 4321 |
4341 // Load a fillable form. | 4322 // Load a fillable form. |
4342 FormData form; | 4323 FormData form; |
4343 form.name = ASCIIToUTF16("TestForm"); | 4324 form.name = ASCIIToUTF16("TestForm"); |
4344 form.origin = GURL("http://example.com/form.html"); | 4325 form.origin = GURL("http://example.com/form.html"); |
4345 form.action = GURL("http://example.com/submit.html"); | 4326 form.action = GURL("http://example.com/submit.html"); |
4346 | 4327 |
4347 FormFieldData field; | 4328 FormFieldData field; |
4348 test::CreateTestFormField("Name", "name", "", "text", &field); | 4329 test::CreateTestFormField("Name", "name", "", "text", &field); |
4349 form.fields.push_back(field); | 4330 form.fields.push_back(field); |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4434 base::HistogramTester histogram_tester; | 4415 base::HistogramTester histogram_tester; |
4435 autofill_manager_->OnTextFieldDidChange(form, form.fields[1], TimeTicks()); | 4416 autofill_manager_->OnTextFieldDidChange(form, form.fields[1], TimeTicks()); |
4436 histogram_tester.ExpectUniqueSample( | 4417 histogram_tester.ExpectUniqueSample( |
4437 "Autofill.UserHappiness", | 4418 "Autofill.UserHappiness", |
4438 AutofillMetrics::USER_DID_EDIT_AUTOFILLED_FIELD, 1); | 4419 AutofillMetrics::USER_DID_EDIT_AUTOFILLED_FIELD, 1); |
4439 } | 4420 } |
4440 | 4421 |
4441 autofill_manager_->Reset(); | 4422 autofill_manager_->Reset(); |
4442 | 4423 |
4443 VerifyFormInteractionUkm( | 4424 VerifyFormInteractionUkm( |
4444 form, ukm_service, internal::kUKMInteractedWithFormEntryName, | 4425 form, ukm_recorder, internal::kUKMInteractedWithFormEntryName, |
4445 {{{internal::kUKMIsForCreditCardMetricName, false}, | 4426 {{{internal::kUKMIsForCreditCardMetricName, false}, |
4446 {internal::kUKMLocalRecordTypeCountMetricName, 0}, | 4427 {internal::kUKMLocalRecordTypeCountMetricName, 0}, |
4447 {internal::kUKMServerRecordTypeCountMetricName, 0}}}); | 4428 {internal::kUKMServerRecordTypeCountMetricName, 0}}}); |
4448 VerifyFormInteractionUkm( | 4429 VerifyFormInteractionUkm( |
4449 form, ukm_service, internal::kUKMSuggestionsShownEntryName, | 4430 form, ukm_recorder, internal::kUKMSuggestionsShownEntryName, |
4450 {{{internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}, | 4431 {{{internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}, |
4451 {{internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); | 4432 {{internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); |
4452 VerifyFormInteractionUkm( | 4433 VerifyFormInteractionUkm( |
4453 form, ukm_service, internal::kUKMSuggestionFilledEntryName, | 4434 form, ukm_recorder, internal::kUKMSuggestionFilledEntryName, |
4454 {{{internal::kUKMRecordTypeMetricName, AutofillProfile::LOCAL_PROFILE}, | 4435 {{{internal::kUKMRecordTypeMetricName, AutofillProfile::LOCAL_PROFILE}, |
4455 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}, | 4436 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}, |
4456 {{internal::kUKMRecordTypeMetricName, AutofillProfile::LOCAL_PROFILE}, | 4437 {{internal::kUKMRecordTypeMetricName, AutofillProfile::LOCAL_PROFILE}, |
4457 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); | 4438 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}}); |
4458 VerifyFormInteractionUkm( | 4439 VerifyFormInteractionUkm( |
4459 form, ukm_service, internal::kUKMTextFieldDidChangeEntryName, | 4440 form, ukm_recorder, internal::kUKMTextFieldDidChangeEntryName, |
4460 {{{internal::kUKMFieldTypeGroupMetricName, NAME}, | 4441 {{{internal::kUKMFieldTypeGroupMetricName, NAME}, |
4461 {internal::kUKMHeuristicTypeMetricName, NAME_FULL}, | 4442 {internal::kUKMHeuristicTypeMetricName, NAME_FULL}, |
4462 {internal::kUKMServerTypeMetricName, NO_SERVER_DATA}, | 4443 {internal::kUKMServerTypeMetricName, NO_SERVER_DATA}, |
4463 {internal::kUKMHtmlFieldTypeMetricName, HTML_TYPE_UNSPECIFIED}, | 4444 {internal::kUKMHtmlFieldTypeMetricName, HTML_TYPE_UNSPECIFIED}, |
4464 {internal::kUKMHtmlFieldModeMetricName, HTML_MODE_NONE}, | 4445 {internal::kUKMHtmlFieldModeMetricName, HTML_MODE_NONE}, |
4465 {internal::kUKMIsAutofilledMetricName, false}, | 4446 {internal::kUKMIsAutofilledMetricName, false}, |
4466 {internal::kUKMIsEmptyMetricName, true}, | 4447 {internal::kUKMIsEmptyMetricName, true}, |
4467 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}, | 4448 {internal::kUKMMillisecondsSinceFormLoadedMetricName, 0}}, |
4468 {{internal::kUKMFieldTypeGroupMetricName, NAME}, | 4449 {{internal::kUKMFieldTypeGroupMetricName, NAME}, |
4469 {internal::kUKMHeuristicTypeMetricName, NAME_FULL}, | 4450 {internal::kUKMHeuristicTypeMetricName, NAME_FULL}, |
(...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5048 // can't be used here because it expects the histogram to exist. | 5029 // can't be used here because it expects the histogram to exist. |
5049 EXPECT_EQ( | 5030 EXPECT_EQ( |
5050 0, histograms.GetTotalCountsForPrefix("Autofill.FormEvents.CreditCard") | 5031 0, histograms.GetTotalCountsForPrefix("Autofill.FormEvents.CreditCard") |
5051 ["Autofill.FormEvents.CreditCard.OnNonsecurePage"]); | 5032 ["Autofill.FormEvents.CreditCard.OnNonsecurePage"]); |
5052 } | 5033 } |
5053 } | 5034 } |
5054 | 5035 |
5055 // Tests that logging CardUploadDecision UKM works as expected. | 5036 // Tests that logging CardUploadDecision UKM works as expected. |
5056 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric) { | 5037 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric) { |
5057 EnableUkmLogging(); | 5038 EnableUkmLogging(); |
5058 ukm::UkmServiceTestingHarness ukm_service_test_harness; | 5039 ukm::TestUkmRecorder test_ukm_recorder; |
5059 GURL url("https://www.google.com"); | 5040 GURL url("https://www.google.com"); |
5060 int upload_decision = 1; | 5041 int upload_decision = 1; |
5061 std::vector<std::pair<const char*, int>> metrics = { | 5042 std::vector<std::pair<const char*, int>> metrics = { |
5062 {internal::kUKMCardUploadDecisionMetricName, upload_decision}}; | 5043 {internal::kUKMCardUploadDecisionMetricName, upload_decision}}; |
5063 | 5044 |
5064 EXPECT_TRUE(AutofillMetrics::LogUkm( | 5045 EXPECT_TRUE(AutofillMetrics::LogUkm(&test_ukm_recorder, url, |
5065 ukm_service_test_harness.test_ukm_service(), url, | 5046 internal::kUKMCardUploadDecisionEntryName, |
5066 internal::kUKMCardUploadDecisionEntryName, metrics)); | 5047 metrics)); |
5067 | 5048 |
5068 // Make sure that the UKM was logged correctly. | 5049 // Make sure that the UKM was logged correctly. |
5069 ukm::TestUkmService* ukm_service = | 5050 ukm::TestUkmRecorder* ukm_recorder = &test_ukm_recorder; |
5070 ukm_service_test_harness.test_ukm_service(); | |
5071 | 5051 |
5072 ASSERT_EQ(1U, ukm_service->sources_count()); | 5052 ASSERT_EQ(1U, ukm_recorder->sources_count()); |
5073 const ukm::UkmSource* source = | 5053 const ukm::UkmSource* source = |
5074 ukm_service->GetSourceForUrl(url.spec().c_str()); | 5054 ukm_recorder->GetSourceForUrl(url.spec().c_str()); |
5075 EXPECT_EQ(url.spec(), source->url().spec()); | 5055 EXPECT_EQ(url.spec(), source->url().spec()); |
5076 | 5056 |
5077 ASSERT_EQ(1U, ukm_service->entries_count()); | 5057 ASSERT_EQ(1U, ukm_recorder->entries_count()); |
5078 const ukm::UkmEntry* entry = ukm_service->GetEntry(0); | 5058 const ukm::mojom::UkmEntry* entry = ukm_recorder->GetEntry(0); |
5079 EXPECT_EQ(source->id(), entry->source_id()); | |
5080 | 5059 |
5081 // Make sure that a card upload decision entry was logged. | 5060 // Make sure that a card upload decision entry was logged. |
5082 ukm::Entry entry_proto; | 5061 EXPECT_EQ(source->id(), entry->source_id); |
5083 entry->PopulateProto(&entry_proto); | |
5084 EXPECT_EQ(source->id(), entry_proto.source_id()); | |
5085 EXPECT_EQ(base::HashMetricName(internal::kUKMCardUploadDecisionEntryName), | 5062 EXPECT_EQ(base::HashMetricName(internal::kUKMCardUploadDecisionEntryName), |
5086 entry_proto.event_hash()); | 5063 entry->event_hash); |
5087 EXPECT_EQ(1, entry_proto.metrics_size()); | 5064 EXPECT_EQ(1U, entry->metrics.size()); |
5088 | 5065 |
5089 // Make sure that the correct upload decision was logged. | 5066 // Make sure that the correct upload decision was logged. |
5090 const ukm::Entry_Metric* metric = FindMetric( | 5067 const ukm::mojom::UkmMetric* metric = ukm::TestUkmRecorder::FindMetric( |
5091 internal::kUKMCardUploadDecisionMetricName, entry_proto.metrics()); | 5068 entry, internal::kUKMCardUploadDecisionMetricName); |
5092 ASSERT_NE(nullptr, metric); | 5069 ASSERT_NE(nullptr, metric); |
5093 EXPECT_EQ(upload_decision, metric->value()); | 5070 EXPECT_EQ(upload_decision, metric->value); |
5094 } | 5071 } |
5095 | 5072 |
5096 // Tests that logging DeveloperEngagement UKM works as expected. | 5073 // Tests that logging DeveloperEngagement UKM works as expected. |
5097 TEST_F(AutofillMetricsTest, RecordDeveloperEngagementMetric) { | 5074 TEST_F(AutofillMetricsTest, RecordDeveloperEngagementMetric) { |
5098 EnableUkmLogging(); | 5075 EnableUkmLogging(); |
5099 ukm::UkmServiceTestingHarness ukm_service_test_harness; | 5076 ukm::TestUkmRecorder test_ukm_recorder; |
5100 GURL url("https://www.google.com"); | 5077 GURL url("https://www.google.com"); |
5101 int form_structure_metric = 1; | 5078 int form_structure_metric = 1; |
5102 std::vector<std::pair<const char*, int>> metrics = { | 5079 std::vector<std::pair<const char*, int>> metrics = { |
5103 {internal::kUKMDeveloperEngagementMetricName, form_structure_metric}}; | 5080 {internal::kUKMDeveloperEngagementMetricName, form_structure_metric}}; |
5104 | 5081 |
5105 EXPECT_TRUE(AutofillMetrics::LogUkm( | 5082 EXPECT_TRUE(AutofillMetrics::LogUkm( |
5106 ukm_service_test_harness.test_ukm_service(), url, | 5083 &test_ukm_recorder, url, internal::kUKMDeveloperEngagementEntryName, |
5107 internal::kUKMDeveloperEngagementEntryName, metrics)); | 5084 metrics)); |
5108 | 5085 |
5109 // Make sure that the UKM was logged correctly. | 5086 // Make sure that the UKM was logged correctly. |
5110 ukm::TestUkmService* ukm_service = | 5087 ukm::TestUkmRecorder* ukm_recorder = &test_ukm_recorder; |
5111 ukm_service_test_harness.test_ukm_service(); | |
5112 | 5088 |
5113 ASSERT_EQ(1U, ukm_service->sources_count()); | 5089 ASSERT_EQ(1U, ukm_recorder->sources_count()); |
5114 const ukm::UkmSource* source = | 5090 const ukm::UkmSource* source = |
5115 ukm_service->GetSourceForUrl(url.spec().c_str()); | 5091 ukm_recorder->GetSourceForUrl(url.spec().c_str()); |
5116 EXPECT_EQ(url.spec(), source->url().spec()); | 5092 EXPECT_EQ(url.spec(), source->url().spec()); |
5117 | 5093 |
5118 ASSERT_EQ(1U, ukm_service->entries_count()); | 5094 ASSERT_EQ(1U, ukm_recorder->entries_count()); |
5119 const ukm::UkmEntry* entry = ukm_service->GetEntry(0); | 5095 const ukm::mojom::UkmEntry* entry = ukm_recorder->GetEntry(0); |
5120 EXPECT_EQ(source->id(), entry->source_id()); | |
5121 | 5096 |
5122 // Make sure that a developer engagement entry was logged. | 5097 // Make sure that a developer engagement entry was logged. |
5123 ukm::Entry entry_proto; | 5098 EXPECT_EQ(source->id(), entry->source_id); |
5124 entry->PopulateProto(&entry_proto); | |
5125 EXPECT_EQ(source->id(), entry_proto.source_id()); | |
5126 EXPECT_EQ(base::HashMetricName(internal::kUKMDeveloperEngagementEntryName), | 5099 EXPECT_EQ(base::HashMetricName(internal::kUKMDeveloperEngagementEntryName), |
5127 entry_proto.event_hash()); | 5100 entry->event_hash); |
5128 EXPECT_EQ(1, entry_proto.metrics_size()); | 5101 EXPECT_EQ(1U, entry->metrics.size()); |
5129 | 5102 |
5130 // Make sure that the correct developer engagement metric was logged. | 5103 // Make sure that the correct developer engagement metric was logged. |
5131 const ukm::Entry_Metric* metric = FindMetric( | 5104 const ukm::mojom::UkmMetric* metric = ukm::TestUkmRecorder::FindMetric( |
5132 internal::kUKMDeveloperEngagementMetricName, entry_proto.metrics()); | 5105 entry, internal::kUKMDeveloperEngagementMetricName); |
5133 ASSERT_NE(nullptr, metric); | 5106 ASSERT_NE(nullptr, metric); |
5134 EXPECT_EQ(form_structure_metric, metric->value()); | 5107 EXPECT_EQ(form_structure_metric, metric->value); |
5135 } | 5108 } |
5136 | 5109 |
5137 // Tests that no UKM is logged when the URL is not valid. | 5110 // Tests that no UKM is logged when the URL is not valid. |
5138 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_InvalidUrl) { | 5111 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_InvalidUrl) { |
5139 EnableUkmLogging(); | 5112 EnableUkmLogging(); |
5140 ukm::UkmServiceTestingHarness ukm_service_test_harness; | 5113 ukm::TestUkmRecorder test_ukm_recorder; |
5141 GURL url(""); | 5114 GURL url(""); |
5142 std::vector<std::pair<const char*, int>> metrics = {{"metric", 1}}; | 5115 std::vector<std::pair<const char*, int>> metrics = {{"metric", 1}}; |
5143 | 5116 |
5144 EXPECT_FALSE(AutofillMetrics::LogUkm( | 5117 EXPECT_FALSE( |
5145 ukm_service_test_harness.test_ukm_service(), url, "test_ukm", metrics)); | 5118 AutofillMetrics::LogUkm(&test_ukm_recorder, url, "test_ukm", metrics)); |
5146 EXPECT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); | 5119 EXPECT_EQ(0U, test_ukm_recorder.sources_count()); |
5147 } | 5120 } |
5148 | 5121 |
5149 // Tests that no UKM is logged when the metrics map is empty. | 5122 // Tests that no UKM is logged when the metrics map is empty. |
5150 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_NoMetrics) { | 5123 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_NoMetrics) { |
5151 EnableUkmLogging(); | 5124 EnableUkmLogging(); |
5152 ukm::UkmServiceTestingHarness ukm_service_test_harness; | 5125 ukm::TestUkmRecorder test_ukm_recorder; |
5153 GURL url("https://www.google.com"); | 5126 GURL url("https://www.google.com"); |
5154 std::vector<std::pair<const char*, int>> metrics; | 5127 std::vector<std::pair<const char*, int>> metrics; |
5155 | 5128 |
5156 EXPECT_FALSE(AutofillMetrics::LogUkm( | 5129 EXPECT_FALSE( |
5157 ukm_service_test_harness.test_ukm_service(), url, "test_ukm", metrics)); | 5130 AutofillMetrics::LogUkm(&test_ukm_recorder, url, "test_ukm", metrics)); |
5158 EXPECT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); | 5131 EXPECT_EQ(0U, test_ukm_recorder.sources_count()); |
5159 } | 5132 } |
5160 | 5133 |
5161 // Tests that no UKM is logged when the ukm service is null. | 5134 // Tests that no UKM is logged when the ukm service is null. |
5162 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_NoUkmService) { | 5135 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_NoUkmRecorder) { |
5163 EnableUkmLogging(); | 5136 EnableUkmLogging(); |
5164 ukm::UkmServiceTestingHarness ukm_service_test_harness; | 5137 ukm::TestUkmRecorder test_ukm_recorder; |
5165 GURL url("https://www.google.com"); | 5138 GURL url("https://www.google.com"); |
5166 std::vector<std::pair<const char*, int>> metrics = {{"metric", 1}}; | 5139 std::vector<std::pair<const char*, int>> metrics = {{"metric", 1}}; |
5167 | 5140 |
5168 EXPECT_FALSE(AutofillMetrics::LogUkm(nullptr, url, "test_ukm", metrics)); | 5141 EXPECT_FALSE(AutofillMetrics::LogUkm(nullptr, url, "test_ukm", metrics)); |
5169 ASSERT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); | 5142 ASSERT_EQ(0U, test_ukm_recorder.sources_count()); |
5170 } | 5143 } |
5171 | 5144 |
5172 // Tests that no UKM is logged when the ukm logging feature is disabled. | 5145 // Tests that no UKM is logged when the ukm logging feature is disabled. |
5173 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_FeatureDisabled) { | 5146 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_FeatureDisabled) { |
5174 ukm::UkmServiceTestingHarness ukm_service_test_harness; | 5147 ukm::TestUkmRecorder test_ukm_recorder; |
5175 GURL url("https://www.google.com"); | 5148 GURL url("https://www.google.com"); |
5176 std::vector<std::pair<const char*, int>> metrics = {{"metric", 1}}; | 5149 std::vector<std::pair<const char*, int>> metrics = {{"metric", 1}}; |
5177 | 5150 |
5178 EXPECT_FALSE(AutofillMetrics::LogUkm( | 5151 EXPECT_FALSE( |
5179 ukm_service_test_harness.test_ukm_service(), url, "test_ukm", metrics)); | 5152 AutofillMetrics::LogUkm(&test_ukm_recorder, url, "test_ukm", metrics)); |
5180 EXPECT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); | 5153 EXPECT_EQ(0U, test_ukm_recorder.sources_count()); |
5181 } | 5154 } |
5182 | 5155 |
5183 } // namespace autofill | 5156 } // namespace autofill |
OLD | NEW |