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 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
408 | 408 |
409 class AutofillMetricsTest : public testing::Test { | 409 class AutofillMetricsTest : public testing::Test { |
410 public: | 410 public: |
411 ~AutofillMetricsTest() override; | 411 ~AutofillMetricsTest() override; |
412 | 412 |
413 void SetUp() override; | 413 void SetUp() override; |
414 void TearDown() override; | 414 void TearDown() override; |
415 | 415 |
416 protected: | 416 protected: |
417 void EnableWalletSync(); | 417 void EnableWalletSync(); |
| 418 void EnableUkmLogging(); |
418 | 419 |
419 base::test::ScopedTaskEnvironment scoped_task_environment_; | 420 base::test::ScopedTaskEnvironment scoped_task_environment_; |
420 TestAutofillClient autofill_client_; | 421 TestAutofillClient autofill_client_; |
421 std::unique_ptr<AccountTrackerService> account_tracker_; | 422 std::unique_ptr<AccountTrackerService> account_tracker_; |
422 std::unique_ptr<FakeSigninManagerBase> signin_manager_; | 423 std::unique_ptr<FakeSigninManagerBase> signin_manager_; |
423 std::unique_ptr<TestSigninClient> signin_client_; | 424 std::unique_ptr<TestSigninClient> signin_client_; |
424 std::unique_ptr<TestAutofillDriver> autofill_driver_; | 425 std::unique_ptr<TestAutofillDriver> autofill_driver_; |
425 std::unique_ptr<TestAutofillManager> autofill_manager_; | 426 std::unique_ptr<TestAutofillManager> autofill_manager_; |
426 std::unique_ptr<TestPersonalDataManager> personal_data_; | 427 std::unique_ptr<TestPersonalDataManager> personal_data_; |
427 std::unique_ptr<AutofillExternalDelegate> external_delegate_; | 428 std::unique_ptr<AutofillExternalDelegate> external_delegate_; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
476 account_tracker_.reset(); | 477 account_tracker_.reset(); |
477 signin_client_.reset(); | 478 signin_client_.reset(); |
478 test::ReenableSystemServices(); | 479 test::ReenableSystemServices(); |
479 autofill_client_.GetTestUkmService()->Purge(); | 480 autofill_client_.GetTestUkmService()->Purge(); |
480 } | 481 } |
481 | 482 |
482 void AutofillMetricsTest::EnableWalletSync() { | 483 void AutofillMetricsTest::EnableWalletSync() { |
483 signin_manager_->SetAuthenticatedAccountInfo("12345", "syncuser@example.com"); | 484 signin_manager_->SetAuthenticatedAccountInfo("12345", "syncuser@example.com"); |
484 } | 485 } |
485 | 486 |
| 487 void AutofillMetricsTest::EnableUkmLogging() { |
| 488 scoped_feature_list_.InitAndEnableFeature(kAutofillUkmLogging); |
| 489 } |
| 490 |
486 // Test that we log quality metrics appropriately. | 491 // Test that we log quality metrics appropriately. |
487 TEST_F(AutofillMetricsTest, QualityMetrics) { | 492 TEST_F(AutofillMetricsTest, QualityMetrics) { |
488 // Set up our form data. | 493 // Set up our form data. |
489 FormData form; | 494 FormData form; |
490 form.name = ASCIIToUTF16("TestForm"); | 495 form.name = ASCIIToUTF16("TestForm"); |
491 form.origin = GURL("http://example.com/form.html"); | 496 form.origin = GURL("http://example.com/form.html"); |
492 form.action = GURL("http://example.com/submit.html"); | 497 form.action = GURL("http://example.com/submit.html"); |
493 | 498 |
494 std::vector<ServerFieldType> heuristic_types, server_types; | 499 std::vector<ServerFieldType> heuristic_types, server_types; |
495 FormFieldData field; | 500 FormFieldData field; |
(...skipping 1121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1617 autofill_manager_->OnTextFieldDidChange(form, form.fields[0], TimeTicks()); | 1622 autofill_manager_->OnTextFieldDidChange(form, form.fields[0], TimeTicks()); |
1618 autofill_manager_->OnTextFieldDidChange(form, form.fields[1], TimeTicks()); | 1623 autofill_manager_->OnTextFieldDidChange(form, form.fields[1], TimeTicks()); |
1619 | 1624 |
1620 // Simulate form submission. | 1625 // Simulate form submission. |
1621 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 1626 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
1622 | 1627 |
1623 // An autofillable form was submitted, and the number of edited autofilled | 1628 // An autofillable form was submitted, and the number of edited autofilled |
1624 // fields is logged. | 1629 // fields is logged. |
1625 histogram_tester.ExpectUniqueSample( | 1630 histogram_tester.ExpectUniqueSample( |
1626 "Autofill.NumberOfEditedAutofilledFieldsAtSubmission", 2, 1); | 1631 "Autofill.NumberOfEditedAutofilledFieldsAtSubmission", 2, 1); |
| 1632 |
| 1633 // UKM must not be logged unless enabled. |
| 1634 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
| 1635 EXPECT_EQ(0U, ukm_service->sources_count()); |
| 1636 EXPECT_EQ(0U, ukm_service->entries_count()); |
1627 } | 1637 } |
1628 | 1638 |
1629 // Verify that when resetting the autofill manager (such as during a | 1639 // Verify that when resetting the autofill manager (such as during a |
1630 // navigation), the proper number of edited fields is logged. | 1640 // navigation), the proper number of edited fields is logged. |
1631 TEST_F(AutofillMetricsTest, NumberOfEditedAutofilledFields_NoSubmission) { | 1641 TEST_F(AutofillMetricsTest, NumberOfEditedAutofilledFields_NoSubmission) { |
1632 // Construct a fillable form. | 1642 // Construct a fillable form. |
1633 FormData form; | 1643 FormData form; |
1634 form.name = ASCIIToUTF16("TestForm"); | 1644 form.name = ASCIIToUTF16("TestForm"); |
1635 form.origin = GURL("http://example.com/form.html"); | 1645 form.origin = GURL("http://example.com/form.html"); |
1636 form.action = GURL("http://example.com/submit.html"); | 1646 form.action = GURL("http://example.com/submit.html"); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1671 autofill_manager_->RunRunLoop(); | 1681 autofill_manager_->RunRunLoop(); |
1672 | 1682 |
1673 // An autofillable form was uploaded, and the number of edited autofilled | 1683 // An autofillable form was uploaded, and the number of edited autofilled |
1674 // fields is logged. | 1684 // fields is logged. |
1675 histogram_tester.ExpectUniqueSample( | 1685 histogram_tester.ExpectUniqueSample( |
1676 "Autofill.NumberOfEditedAutofilledFieldsAtSubmission.NoSubmission", 1, 1); | 1686 "Autofill.NumberOfEditedAutofilledFieldsAtSubmission.NoSubmission", 1, 1); |
1677 } | 1687 } |
1678 | 1688 |
1679 // Verify that we correctly log metrics regarding developer engagement. | 1689 // Verify that we correctly log metrics regarding developer engagement. |
1680 TEST_F(AutofillMetricsTest, DeveloperEngagement) { | 1690 TEST_F(AutofillMetricsTest, DeveloperEngagement) { |
| 1691 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
| 1692 |
1681 // Start with a non-fillable form. | 1693 // Start with a non-fillable form. |
1682 FormData form; | 1694 FormData form; |
1683 form.name = ASCIIToUTF16("TestForm"); | 1695 form.name = ASCIIToUTF16("TestForm"); |
1684 form.origin = GURL("http://example.com/form.html"); | 1696 form.origin = GURL("http://example.com/form.html"); |
1685 form.action = GURL("http://example.com/submit.html"); | 1697 form.action = GURL("http://example.com/submit.html"); |
1686 | 1698 |
1687 FormFieldData field; | 1699 FormFieldData field; |
1688 test::CreateTestFormField("Name", "name", "", "text", &field); | 1700 test::CreateTestFormField("Name", "name", "", "text", &field); |
1689 form.fields.push_back(field); | 1701 form.fields.push_back(field); |
1690 test::CreateTestFormField("Email", "email", "", "text", &field); | 1702 test::CreateTestFormField("Email", "email", "", "text", &field); |
1691 form.fields.push_back(field); | 1703 form.fields.push_back(field); |
1692 | 1704 |
1693 std::vector<FormData> forms(1, form); | 1705 std::vector<FormData> forms(1, form); |
1694 | 1706 |
1695 // Ensure no metrics are logged when loading a non-fillable form. | 1707 // Ensure no metrics are logged when loading a non-fillable form. |
1696 { | 1708 { |
1697 base::HistogramTester histogram_tester; | 1709 base::HistogramTester histogram_tester; |
1698 autofill_manager_->OnFormsSeen(forms, TimeTicks()); | 1710 autofill_manager_->OnFormsSeen(forms, TimeTicks()); |
1699 autofill_manager_->Reset(); | 1711 autofill_manager_->Reset(); |
1700 histogram_tester.ExpectTotalCount("Autofill.DeveloperEngagement", 0); | 1712 histogram_tester.ExpectTotalCount("Autofill.DeveloperEngagement", 0); |
| 1713 |
| 1714 // UKM must not be logged unless enabled. |
| 1715 EXPECT_EQ(0U, ukm_service->sources_count()); |
| 1716 EXPECT_EQ(0U, ukm_service->entries_count()); |
1701 } | 1717 } |
1702 | 1718 |
1703 // Add another field to the form, so that it becomes fillable. | 1719 // Add another field to the form, so that it becomes fillable. |
1704 test::CreateTestFormField("Phone", "phone", "", "text", &field); | 1720 test::CreateTestFormField("Phone", "phone", "", "text", &field); |
1705 forms.back().fields.push_back(field); | 1721 forms.back().fields.push_back(field); |
1706 | 1722 |
1707 // Expect the "form parsed without hints" metric to be logged. | 1723 // Expect the "form parsed without hints" metric to be logged. |
1708 { | 1724 { |
1709 base::HistogramTester histogram_tester; | 1725 base::HistogramTester histogram_tester; |
1710 autofill_manager_->OnFormsSeen(forms, TimeTicks()); | 1726 autofill_manager_->OnFormsSeen(forms, TimeTicks()); |
1711 autofill_manager_->Reset(); | 1727 autofill_manager_->Reset(); |
1712 histogram_tester.ExpectUniqueSample( | 1728 histogram_tester.ExpectUniqueSample( |
1713 "Autofill.DeveloperEngagement", | 1729 "Autofill.DeveloperEngagement", |
1714 AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS, 1); | 1730 AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS, 1); |
| 1731 |
| 1732 // UKM must not be logged unless enabled. |
| 1733 EXPECT_EQ(0U, ukm_service->sources_count()); |
| 1734 EXPECT_EQ(0U, ukm_service->entries_count()); |
1715 } | 1735 } |
1716 | 1736 |
1717 // Add some fields with an author-specified field type to the form. | 1737 // Add some fields with an author-specified field type to the form. |
1718 // We need to add at least three fields, because a form must have at least | 1738 // We need to add at least three fields, because a form must have at least |
1719 // three fillable fields to be considered to be autofillable; and if at least | 1739 // three fillable fields to be considered to be autofillable; and if at least |
1720 // one field specifies an explicit type hint, we don't apply any of our usual | 1740 // one field specifies an explicit type hint, we don't apply any of our usual |
1721 // local heuristics to detect field types in the rest of the form. | 1741 // local heuristics to detect field types in the rest of the form. |
1722 test::CreateTestFormField("", "", "", "text", &field); | 1742 test::CreateTestFormField("", "", "", "text", &field); |
1723 field.autocomplete_attribute = "given-name"; | 1743 field.autocomplete_attribute = "given-name"; |
1724 forms.back().fields.push_back(field); | 1744 forms.back().fields.push_back(field); |
1725 test::CreateTestFormField("", "", "", "text", &field); | 1745 test::CreateTestFormField("", "", "", "text", &field); |
1726 field.autocomplete_attribute = "email"; | 1746 field.autocomplete_attribute = "email"; |
1727 forms.back().fields.push_back(field); | 1747 forms.back().fields.push_back(field); |
1728 test::CreateTestFormField("", "", "", "text", &field); | 1748 test::CreateTestFormField("", "", "", "text", &field); |
1729 field.autocomplete_attribute = "address-line1"; | 1749 field.autocomplete_attribute = "address-line1"; |
1730 forms.back().fields.push_back(field); | 1750 forms.back().fields.push_back(field); |
1731 | 1751 |
1732 // Expect the "form parsed with field type hints" metric to be logged. | 1752 // Expect the "form parsed with field type hints" metric to be logged. |
1733 { | 1753 { |
1734 base::HistogramTester histogram_tester; | 1754 base::HistogramTester histogram_tester; |
1735 autofill_manager_->OnFormsSeen(forms, TimeTicks()); | 1755 autofill_manager_->OnFormsSeen(forms, TimeTicks()); |
1736 autofill_manager_->Reset(); | 1756 autofill_manager_->Reset(); |
1737 histogram_tester.ExpectBucketCount( | 1757 histogram_tester.ExpectBucketCount( |
1738 "Autofill.DeveloperEngagement", | 1758 "Autofill.DeveloperEngagement", |
1739 AutofillMetrics::FILLABLE_FORM_PARSED_WITH_TYPE_HINTS, 1); | 1759 AutofillMetrics::FILLABLE_FORM_PARSED_WITH_TYPE_HINTS, 1); |
1740 | 1760 |
| 1761 // UKM must not be logged unless enabled. |
| 1762 EXPECT_EQ(0U, ukm_service->sources_count()); |
| 1763 EXPECT_EQ(0U, ukm_service->entries_count()); |
| 1764 |
1741 histogram_tester.ExpectBucketCount( | 1765 histogram_tester.ExpectBucketCount( |
1742 "Autofill.DeveloperEngagement", | 1766 "Autofill.DeveloperEngagement", |
1743 AutofillMetrics::FORM_CONTAINS_UPI_VPA_HINT, 0); | 1767 AutofillMetrics::FORM_CONTAINS_UPI_VPA_HINT, 0); |
1744 } | 1768 } |
1745 | 1769 |
1746 // Add a field with an author-specified UPI-VPA field type in the form. | 1770 // Add a field with an author-specified UPI-VPA field type in the form. |
1747 test::CreateTestFormField("", "", "", "text", &field); | 1771 test::CreateTestFormField("", "", "", "text", &field); |
1748 field.autocomplete_attribute = "upi-vpa"; | 1772 field.autocomplete_attribute = "upi-vpa"; |
1749 forms.back().fields.push_back(field); | 1773 forms.back().fields.push_back(field); |
1750 | 1774 |
1751 // Expect the "form parsed with type hints" metric, and the | 1775 // Expect the "form parsed with type hints" metric, and the |
1752 // "author-specified upi-vpa type" metric to be logged. | 1776 // "author-specified upi-vpa type" metric to be logged. |
1753 { | 1777 { |
1754 base::HistogramTester histogram_tester; | 1778 base::HistogramTester histogram_tester; |
1755 autofill_manager_->OnFormsSeen(forms, TimeTicks()); | 1779 autofill_manager_->OnFormsSeen(forms, TimeTicks()); |
1756 autofill_manager_->Reset(); | 1780 autofill_manager_->Reset(); |
1757 histogram_tester.ExpectBucketCount( | 1781 histogram_tester.ExpectBucketCount( |
1758 "Autofill.DeveloperEngagement", | 1782 "Autofill.DeveloperEngagement", |
1759 AutofillMetrics::FILLABLE_FORM_PARSED_WITH_TYPE_HINTS, 1); | 1783 AutofillMetrics::FILLABLE_FORM_PARSED_WITH_TYPE_HINTS, 1); |
1760 histogram_tester.ExpectBucketCount( | 1784 histogram_tester.ExpectBucketCount( |
1761 "Autofill.DeveloperEngagement", | 1785 "Autofill.DeveloperEngagement", |
1762 AutofillMetrics::FORM_CONTAINS_UPI_VPA_HINT, 1); | 1786 AutofillMetrics::FORM_CONTAINS_UPI_VPA_HINT, 1); |
1763 } | 1787 } |
1764 } | 1788 } |
1765 | 1789 |
1766 // Verify that we correctly log UKM for form parsed without type hints regarding | 1790 // Verify that we correctly log UKM for form parsed without type hints regarding |
1767 // developer engagement. | 1791 // developer engagement. |
1768 TEST_F(AutofillMetricsTest, | 1792 TEST_F(AutofillMetricsTest, |
1769 UkmDeveloperEngagement_LogFillableFormParsedWithoutTypeHints) { | 1793 UkmDeveloperEngagement_LogFillableFormParsedWithoutTypeHints) { |
| 1794 EnableUkmLogging(); |
1770 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 1795 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
1771 | 1796 |
1772 // Start with a non-fillable form. | 1797 // Start with a non-fillable form. |
1773 FormData form; | 1798 FormData form; |
1774 form.name = ASCIIToUTF16("TestForm"); | 1799 form.name = ASCIIToUTF16("TestForm"); |
1775 form.origin = GURL("http://example.com/form.html"); | 1800 form.origin = GURL("http://example.com/form.html"); |
1776 form.action = GURL("http://example.com/submit.html"); | 1801 form.action = GURL("http://example.com/submit.html"); |
1777 | 1802 |
1778 FormFieldData field; | 1803 FormFieldData field; |
1779 test::CreateTestFormField("Name", "name", "", "text", &field); | 1804 test::CreateTestFormField("Name", "name", "", "text", &field); |
(...skipping 27 matching lines...) Expand all Loading... |
1807 VerifyDeveloperEngagementUkm( | 1832 VerifyDeveloperEngagementUkm( |
1808 form, ukm_service, | 1833 form, ukm_service, |
1809 {AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS}); | 1834 {AutofillMetrics::FILLABLE_FORM_PARSED_WITHOUT_TYPE_HINTS}); |
1810 } | 1835 } |
1811 } | 1836 } |
1812 | 1837 |
1813 // Verify that we correctly log UKM for form parsed with type hints regarding | 1838 // Verify that we correctly log UKM for form parsed with type hints regarding |
1814 // developer engagement. | 1839 // developer engagement. |
1815 TEST_F(AutofillMetricsTest, | 1840 TEST_F(AutofillMetricsTest, |
1816 UkmDeveloperEngagement_LogFillableFormParsedWithTypeHints) { | 1841 UkmDeveloperEngagement_LogFillableFormParsedWithTypeHints) { |
| 1842 EnableUkmLogging(); |
1817 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 1843 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
1818 | 1844 |
1819 FormData form; | 1845 FormData form; |
1820 form.name = ASCIIToUTF16("TestForm"); | 1846 form.name = ASCIIToUTF16("TestForm"); |
1821 form.origin = GURL("http://example.com/form.html"); | 1847 form.origin = GURL("http://example.com/form.html"); |
1822 form.action = GURL("http://example.com/submit.html"); | 1848 form.action = GURL("http://example.com/submit.html"); |
1823 | 1849 |
1824 FormFieldData field; | 1850 FormFieldData field; |
1825 test::CreateTestFormField("Name", "name", "", "text", &field); | 1851 test::CreateTestFormField("Name", "name", "", "text", &field); |
1826 form.fields.push_back(field); | 1852 form.fields.push_back(field); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1858 ASSERT_EQ(1U, ukm_service->sources_count()); | 1884 ASSERT_EQ(1U, ukm_service->sources_count()); |
1859 VerifyDeveloperEngagementUkm( | 1885 VerifyDeveloperEngagementUkm( |
1860 form, ukm_service, | 1886 form, ukm_service, |
1861 {AutofillMetrics::FILLABLE_FORM_PARSED_WITH_TYPE_HINTS}); | 1887 {AutofillMetrics::FILLABLE_FORM_PARSED_WITH_TYPE_HINTS}); |
1862 } | 1888 } |
1863 } | 1889 } |
1864 | 1890 |
1865 // Verify that we correctly log UKM for form parsed with type hints regarding | 1891 // Verify that we correctly log UKM for form parsed with type hints regarding |
1866 // developer engagement. | 1892 // developer engagement. |
1867 TEST_F(AutofillMetricsTest, UkmDeveloperEngagement_LogUpiVpaTypeHint) { | 1893 TEST_F(AutofillMetricsTest, UkmDeveloperEngagement_LogUpiVpaTypeHint) { |
| 1894 EnableUkmLogging(); |
1868 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 1895 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
1869 | 1896 |
1870 FormData form; | 1897 FormData form; |
1871 form.name = ASCIIToUTF16("TestForm"); | 1898 form.name = ASCIIToUTF16("TestForm"); |
1872 form.origin = GURL("http://example.com/form.html"); | 1899 form.origin = GURL("http://example.com/form.html"); |
1873 form.action = GURL("http://example.com/submit.html"); | 1900 form.action = GURL("http://example.com/submit.html"); |
1874 | 1901 |
1875 FormFieldData field; | 1902 FormFieldData field; |
1876 test::CreateTestFormField("Name", "name", "", "text", &field); | 1903 test::CreateTestFormField("Name", "name", "", "text", &field); |
1877 form.fields.push_back(field); | 1904 form.fields.push_back(field); |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2084 // Simulate activating the autofill popup for the email field after typing. | 2111 // Simulate activating the autofill popup for the email field after typing. |
2085 form.fields[0].is_autofilled = true; | 2112 form.fields[0].is_autofilled = true; |
2086 base::HistogramTester histogram_tester; | 2113 base::HistogramTester histogram_tester; |
2087 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); | 2114 autofill_manager_->OnQueryFormFieldAutofill(0, form, field, gfx::RectF()); |
2088 histogram_tester.ExpectTotalCount("Autofill.AddressSuggestionsCount", 0); | 2115 histogram_tester.ExpectTotalCount("Autofill.AddressSuggestionsCount", 0); |
2089 } | 2116 } |
2090 } | 2117 } |
2091 | 2118 |
2092 // Test that the credit card checkout flow user actions are correctly logged. | 2119 // Test that the credit card checkout flow user actions are correctly logged. |
2093 TEST_F(AutofillMetricsTest, CreditCardCheckoutFlowUserActions) { | 2120 TEST_F(AutofillMetricsTest, CreditCardCheckoutFlowUserActions) { |
| 2121 EnableUkmLogging(); |
2094 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 2122 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
2095 | 2123 |
2096 personal_data_->RecreateCreditCards( | 2124 personal_data_->RecreateCreditCards( |
2097 true /* include_local_credit_card */, | 2125 true /* include_local_credit_card */, |
2098 false /* include_masked_server_credit_card */, | 2126 false /* include_masked_server_credit_card */, |
2099 false /* include_full_server_credit_card */); | 2127 false /* include_full_server_credit_card */); |
2100 | 2128 |
2101 // Set up our form data. | 2129 // Set up our form data. |
2102 FormData form; | 2130 FormData form; |
2103 form.name = ASCIIToUTF16("TestForm"); | 2131 form.name = ASCIIToUTF16("TestForm"); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2182 {{internal::kUKMRecordTypeMetricName, CreditCard::LOCAL_CARD}, | 2210 {{internal::kUKMRecordTypeMetricName, CreditCard::LOCAL_CARD}, |
2183 {internal::kUKMMillisecondsSinceFormParsedMetricName, 0}}}); | 2211 {internal::kUKMMillisecondsSinceFormParsedMetricName, 0}}}); |
2184 // Expect |NON_FILLABLE_FORM_OR_NEW_DATA| in |AutofillFormSubmittedState| | 2212 // Expect |NON_FILLABLE_FORM_OR_NEW_DATA| in |AutofillFormSubmittedState| |
2185 // because |field.value| is empty in |DeterminePossibleFieldTypesForUpload|. | 2213 // because |field.value| is empty in |DeterminePossibleFieldTypesForUpload|. |
2186 VerifySubmitFormUkm(form, ukm_service, | 2214 VerifySubmitFormUkm(form, ukm_service, |
2187 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); | 2215 AutofillMetrics::NON_FILLABLE_FORM_OR_NEW_DATA); |
2188 } | 2216 } |
2189 | 2217 |
2190 // Test that the profile checkout flow user actions are correctly logged. | 2218 // Test that the profile checkout flow user actions are correctly logged. |
2191 TEST_F(AutofillMetricsTest, ProfileCheckoutFlowUserActions) { | 2219 TEST_F(AutofillMetricsTest, ProfileCheckoutFlowUserActions) { |
| 2220 EnableUkmLogging(); |
2192 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 2221 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
2193 | 2222 |
2194 // Create a profile. | 2223 // Create a profile. |
2195 personal_data_->RecreateProfile(); | 2224 personal_data_->RecreateProfile(); |
2196 | 2225 |
2197 // Set up our form data. | 2226 // Set up our form data. |
2198 FormData form; | 2227 FormData form; |
2199 form.name = ASCIIToUTF16("TestForm"); | 2228 form.name = ASCIIToUTF16("TestForm"); |
2200 form.origin = GURL("http://example.com/form.html"); | 2229 form.origin = GURL("http://example.com/form.html"); |
2201 form.action = GURL("http://example.com/submit.html"); | 2230 form.action = GURL("http://example.com/submit.html"); |
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2563 base::HistogramTester histogram_tester; | 2592 base::HistogramTester histogram_tester; |
2564 autofill_manager_->DidShowSuggestions(false /* is_new_popup */, form, | 2593 autofill_manager_->DidShowSuggestions(false /* is_new_popup */, form, |
2565 field); | 2594 field); |
2566 histogram_tester.ExpectBucketCount( | 2595 histogram_tester.ExpectBucketCount( |
2567 "Autofill.FormEvents.CreditCard", | 2596 "Autofill.FormEvents.CreditCard", |
2568 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN, 0); | 2597 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN, 0); |
2569 histogram_tester.ExpectBucketCount( | 2598 histogram_tester.ExpectBucketCount( |
2570 "Autofill.FormEvents.CreditCard", | 2599 "Autofill.FormEvents.CreditCard", |
2571 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN_ONCE, 0); | 2600 AutofillMetrics::FORM_EVENT_SUGGESTIONS_SHOWN_ONCE, 0); |
2572 } | 2601 } |
| 2602 |
| 2603 // UKM must not be logged unless enabled. |
| 2604 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
| 2605 EXPECT_EQ(0U, ukm_service->sources_count()); |
| 2606 EXPECT_EQ(0U, ukm_service->entries_count()); |
2573 } | 2607 } |
2574 | 2608 |
2575 // Test that we log selected form event for credit cards. | 2609 // Test that we log selected form event for credit cards. |
2576 TEST_F(AutofillMetricsTest, CreditCardSelectedFormEvents) { | 2610 TEST_F(AutofillMetricsTest, CreditCardSelectedFormEvents) { |
2577 EnableWalletSync(); | 2611 EnableWalletSync(); |
2578 // Creating all kinds of cards. | 2612 // Creating all kinds of cards. |
2579 personal_data_->RecreateCreditCards( | 2613 personal_data_->RecreateCreditCards( |
2580 true /* include_local_credit_card */, | 2614 true /* include_local_credit_card */, |
2581 true /* include_masked_server_credit_card */, | 2615 true /* include_masked_server_credit_card */, |
2582 true /* include_full_server_credit_card */); | 2616 true /* include_full_server_credit_card */); |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2829 std::string()); | 2863 std::string()); |
2830 histogram_tester.ExpectTotalCount( | 2864 histogram_tester.ExpectTotalCount( |
2831 "Autofill.UnmaskPrompt.GetRealPanDuration", 1); | 2865 "Autofill.UnmaskPrompt.GetRealPanDuration", 1); |
2832 histogram_tester.ExpectTotalCount( | 2866 histogram_tester.ExpectTotalCount( |
2833 "Autofill.UnmaskPrompt.GetRealPanDuration.Failure", 1); | 2867 "Autofill.UnmaskPrompt.GetRealPanDuration.Failure", 1); |
2834 } | 2868 } |
2835 } | 2869 } |
2836 | 2870 |
2837 // Test that we log submitted form events for credit cards. | 2871 // Test that we log submitted form events for credit cards. |
2838 TEST_F(AutofillMetricsTest, CreditCardSubmittedFormEvents) { | 2872 TEST_F(AutofillMetricsTest, CreditCardSubmittedFormEvents) { |
| 2873 EnableUkmLogging(); |
2839 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 2874 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
2840 | 2875 |
2841 EnableWalletSync(); | 2876 EnableWalletSync(); |
2842 // Creating all kinds of cards. | 2877 // Creating all kinds of cards. |
2843 personal_data_->RecreateCreditCards( | 2878 personal_data_->RecreateCreditCards( |
2844 true /* include_local_credit_card */, | 2879 true /* include_local_credit_card */, |
2845 true /* include_masked_server_credit_card */, | 2880 true /* include_masked_server_credit_card */, |
2846 true /* include_full_server_credit_card */); | 2881 true /* include_full_server_credit_card */); |
2847 // Set up our form data. | 2882 // Set up our form data. |
2848 FormData form; | 2883 FormData form; |
(...skipping 696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3545 "Autofill.FormEvents.Address", | 3580 "Autofill.FormEvents.Address", |
3546 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_FILLED, 2); | 3581 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_FILLED, 2); |
3547 histogram_tester.ExpectBucketCount( | 3582 histogram_tester.ExpectBucketCount( |
3548 "Autofill.FormEvents.Address", | 3583 "Autofill.FormEvents.Address", |
3549 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_FILLED_ONCE, 1); | 3584 AutofillMetrics::FORM_EVENT_LOCAL_SUGGESTION_FILLED_ONCE, 1); |
3550 } | 3585 } |
3551 } | 3586 } |
3552 | 3587 |
3553 // Test that we log submitted form events for address. | 3588 // Test that we log submitted form events for address. |
3554 TEST_F(AutofillMetricsTest, AddressSubmittedFormEvents) { | 3589 TEST_F(AutofillMetricsTest, AddressSubmittedFormEvents) { |
| 3590 EnableUkmLogging(); |
3555 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 3591 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
3556 | 3592 |
3557 EnableWalletSync(); | 3593 EnableWalletSync(); |
3558 // Create a profile. | 3594 // Create a profile. |
3559 personal_data_->RecreateProfile(); | 3595 personal_data_->RecreateProfile(); |
3560 // Set up our form data. | 3596 // Set up our form data. |
3561 FormData form; | 3597 FormData form; |
3562 form.name = ASCIIToUTF16("TestForm"); | 3598 form.name = ASCIIToUTF16("TestForm"); |
3563 form.origin = GURL("http://example.com/form.html"); | 3599 form.origin = GURL("http://example.com/form.html"); |
3564 form.action = GURL("http://example.com/submit.html"); | 3600 form.action = GURL("http://example.com/submit.html"); |
(...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4085 base::HistogramTester histogram_tester; | 4121 base::HistogramTester histogram_tester; |
4086 AutofillProfile profile; | 4122 AutofillProfile profile; |
4087 profile.set_use_date(base::Time::Now() - base::TimeDelta::FromDays(13)); | 4123 profile.set_use_date(base::Time::Now() - base::TimeDelta::FromDays(13)); |
4088 profile.RecordAndLogUse(); | 4124 profile.RecordAndLogUse(); |
4089 histogram_tester.ExpectBucketCount("Autofill.DaysSinceLastUse.Profile", 13, | 4125 histogram_tester.ExpectBucketCount("Autofill.DaysSinceLastUse.Profile", 13, |
4090 1); | 4126 1); |
4091 } | 4127 } |
4092 | 4128 |
4093 // Verify that we correctly log the submitted form's state. | 4129 // Verify that we correctly log the submitted form's state. |
4094 TEST_F(AutofillMetricsTest, AutofillFormSubmittedState) { | 4130 TEST_F(AutofillMetricsTest, AutofillFormSubmittedState) { |
| 4131 EnableUkmLogging(); |
4095 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 4132 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
4096 | 4133 |
4097 // Start with a form with insufficiently many fields. | 4134 // Start with a form with insufficiently many fields. |
4098 FormData form; | 4135 FormData form; |
4099 form.name = ASCIIToUTF16("TestForm"); | 4136 form.name = ASCIIToUTF16("TestForm"); |
4100 form.origin = GURL("http://example.com/form.html"); | 4137 form.origin = GURL("http://example.com/form.html"); |
4101 form.action = GURL("http://example.com/submit.html"); | 4138 form.action = GURL("http://example.com/submit.html"); |
4102 | 4139 |
4103 FormFieldData field; | 4140 FormFieldData field; |
4104 test::CreateTestFormField("Name", "name", "", "text", &field); | 4141 test::CreateTestFormField("Name", "name", "", "text", &field); |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4291 {internal::kUKMMillisecondsSinceFormParsedMetricName, 0}}); | 4328 {internal::kUKMMillisecondsSinceFormParsedMetricName, 0}}); |
4292 VerifyFormInteractionUkm(form, ukm_service, | 4329 VerifyFormInteractionUkm(form, ukm_service, |
4293 internal::kUKMFormSubmittedEntryName, | 4330 internal::kUKMFormSubmittedEntryName, |
4294 expected_form_submission_ukm_metrics); | 4331 expected_form_submission_ukm_metrics); |
4295 } | 4332 } |
4296 } | 4333 } |
4297 | 4334 |
4298 // Verify that we correctly log user happiness metrics dealing with form | 4335 // Verify that we correctly log user happiness metrics dealing with form |
4299 // interaction. | 4336 // interaction. |
4300 TEST_F(AutofillMetricsTest, UserHappinessFormInteraction) { | 4337 TEST_F(AutofillMetricsTest, UserHappinessFormInteraction) { |
| 4338 EnableUkmLogging(); |
4301 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); | 4339 ukm::TestUkmService* ukm_service = autofill_client_.GetTestUkmService(); |
4302 | 4340 |
4303 // Load a fillable form. | 4341 // Load a fillable form. |
4304 FormData form; | 4342 FormData form; |
4305 form.name = ASCIIToUTF16("TestForm"); | 4343 form.name = ASCIIToUTF16("TestForm"); |
4306 form.origin = GURL("http://example.com/form.html"); | 4344 form.origin = GURL("http://example.com/form.html"); |
4307 form.action = GURL("http://example.com/submit.html"); | 4345 form.action = GURL("http://example.com/submit.html"); |
4308 | 4346 |
4309 FormFieldData field; | 4347 FormFieldData field; |
4310 test::CreateTestFormField("Name", "name", "", "text", &field); | 4348 test::CreateTestFormField("Name", "name", "", "text", &field); |
(...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5009 // Check that the nonsecure histogram was not recorded. ExpectBucketCount() | 5047 // Check that the nonsecure histogram was not recorded. ExpectBucketCount() |
5010 // can't be used here because it expects the histogram to exist. | 5048 // can't be used here because it expects the histogram to exist. |
5011 EXPECT_EQ( | 5049 EXPECT_EQ( |
5012 0, histograms.GetTotalCountsForPrefix("Autofill.FormEvents.CreditCard") | 5050 0, histograms.GetTotalCountsForPrefix("Autofill.FormEvents.CreditCard") |
5013 ["Autofill.FormEvents.CreditCard.OnNonsecurePage"]); | 5051 ["Autofill.FormEvents.CreditCard.OnNonsecurePage"]); |
5014 } | 5052 } |
5015 } | 5053 } |
5016 | 5054 |
5017 // Tests that logging CardUploadDecision UKM works as expected. | 5055 // Tests that logging CardUploadDecision UKM works as expected. |
5018 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric) { | 5056 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric) { |
| 5057 EnableUkmLogging(); |
5019 ukm::UkmServiceTestingHarness ukm_service_test_harness; | 5058 ukm::UkmServiceTestingHarness ukm_service_test_harness; |
5020 GURL url("https://www.google.com"); | 5059 GURL url("https://www.google.com"); |
5021 int upload_decision = 1; | 5060 int upload_decision = 1; |
5022 std::vector<std::pair<const char*, int>> metrics = { | 5061 std::vector<std::pair<const char*, int>> metrics = { |
5023 {internal::kUKMCardUploadDecisionMetricName, upload_decision}}; | 5062 {internal::kUKMCardUploadDecisionMetricName, upload_decision}}; |
5024 | 5063 |
5025 EXPECT_TRUE(AutofillMetrics::LogUkm( | 5064 EXPECT_TRUE(AutofillMetrics::LogUkm( |
5026 ukm_service_test_harness.test_ukm_service(), url, | 5065 ukm_service_test_harness.test_ukm_service(), url, |
5027 internal::kUKMCardUploadDecisionEntryName, metrics)); | 5066 internal::kUKMCardUploadDecisionEntryName, metrics)); |
5028 | 5067 |
(...skipping 20 matching lines...) Expand all Loading... |
5049 | 5088 |
5050 // Make sure that the correct upload decision was logged. | 5089 // Make sure that the correct upload decision was logged. |
5051 const ukm::Entry_Metric* metric = FindMetric( | 5090 const ukm::Entry_Metric* metric = FindMetric( |
5052 internal::kUKMCardUploadDecisionMetricName, entry_proto.metrics()); | 5091 internal::kUKMCardUploadDecisionMetricName, entry_proto.metrics()); |
5053 ASSERT_NE(nullptr, metric); | 5092 ASSERT_NE(nullptr, metric); |
5054 EXPECT_EQ(upload_decision, metric->value()); | 5093 EXPECT_EQ(upload_decision, metric->value()); |
5055 } | 5094 } |
5056 | 5095 |
5057 // Tests that logging DeveloperEngagement UKM works as expected. | 5096 // Tests that logging DeveloperEngagement UKM works as expected. |
5058 TEST_F(AutofillMetricsTest, RecordDeveloperEngagementMetric) { | 5097 TEST_F(AutofillMetricsTest, RecordDeveloperEngagementMetric) { |
| 5098 EnableUkmLogging(); |
5059 ukm::UkmServiceTestingHarness ukm_service_test_harness; | 5099 ukm::UkmServiceTestingHarness ukm_service_test_harness; |
5060 GURL url("https://www.google.com"); | 5100 GURL url("https://www.google.com"); |
5061 int form_structure_metric = 1; | 5101 int form_structure_metric = 1; |
5062 std::vector<std::pair<const char*, int>> metrics = { | 5102 std::vector<std::pair<const char*, int>> metrics = { |
5063 {internal::kUKMDeveloperEngagementMetricName, form_structure_metric}}; | 5103 {internal::kUKMDeveloperEngagementMetricName, form_structure_metric}}; |
5064 | 5104 |
5065 EXPECT_TRUE(AutofillMetrics::LogUkm( | 5105 EXPECT_TRUE(AutofillMetrics::LogUkm( |
5066 ukm_service_test_harness.test_ukm_service(), url, | 5106 ukm_service_test_harness.test_ukm_service(), url, |
5067 internal::kUKMDeveloperEngagementEntryName, metrics)); | 5107 internal::kUKMDeveloperEngagementEntryName, metrics)); |
5068 | 5108 |
(...skipping 20 matching lines...) Expand all Loading... |
5089 | 5129 |
5090 // Make sure that the correct developer engagement metric was logged. | 5130 // Make sure that the correct developer engagement metric was logged. |
5091 const ukm::Entry_Metric* metric = FindMetric( | 5131 const ukm::Entry_Metric* metric = FindMetric( |
5092 internal::kUKMDeveloperEngagementMetricName, entry_proto.metrics()); | 5132 internal::kUKMDeveloperEngagementMetricName, entry_proto.metrics()); |
5093 ASSERT_NE(nullptr, metric); | 5133 ASSERT_NE(nullptr, metric); |
5094 EXPECT_EQ(form_structure_metric, metric->value()); | 5134 EXPECT_EQ(form_structure_metric, metric->value()); |
5095 } | 5135 } |
5096 | 5136 |
5097 // Tests that no UKM is logged when the URL is not valid. | 5137 // Tests that no UKM is logged when the URL is not valid. |
5098 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_InvalidUrl) { | 5138 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_InvalidUrl) { |
| 5139 EnableUkmLogging(); |
5099 ukm::UkmServiceTestingHarness ukm_service_test_harness; | 5140 ukm::UkmServiceTestingHarness ukm_service_test_harness; |
5100 GURL url(""); | 5141 GURL url(""); |
5101 std::vector<std::pair<const char*, int>> metrics = {{"metric", 1}}; | 5142 std::vector<std::pair<const char*, int>> metrics = {{"metric", 1}}; |
5102 | 5143 |
5103 EXPECT_FALSE(AutofillMetrics::LogUkm( | 5144 EXPECT_FALSE(AutofillMetrics::LogUkm( |
5104 ukm_service_test_harness.test_ukm_service(), url, "test_ukm", metrics)); | 5145 ukm_service_test_harness.test_ukm_service(), url, "test_ukm", metrics)); |
5105 EXPECT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); | 5146 EXPECT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); |
5106 } | 5147 } |
5107 | 5148 |
5108 // Tests that no UKM is logged when the metrics map is empty. | 5149 // Tests that no UKM is logged when the metrics map is empty. |
5109 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_NoMetrics) { | 5150 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_NoMetrics) { |
| 5151 EnableUkmLogging(); |
5110 ukm::UkmServiceTestingHarness ukm_service_test_harness; | 5152 ukm::UkmServiceTestingHarness ukm_service_test_harness; |
5111 GURL url("https://www.google.com"); | 5153 GURL url("https://www.google.com"); |
5112 std::vector<std::pair<const char*, int>> metrics; | 5154 std::vector<std::pair<const char*, int>> metrics; |
5113 | 5155 |
5114 EXPECT_FALSE(AutofillMetrics::LogUkm( | 5156 EXPECT_FALSE(AutofillMetrics::LogUkm( |
5115 ukm_service_test_harness.test_ukm_service(), url, "test_ukm", metrics)); | 5157 ukm_service_test_harness.test_ukm_service(), url, "test_ukm", metrics)); |
5116 EXPECT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); | 5158 EXPECT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); |
5117 } | 5159 } |
5118 | 5160 |
5119 // Tests that no UKM is logged when the ukm service is null. | 5161 // Tests that no UKM is logged when the ukm service is null. |
5120 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_NoUkmService) { | 5162 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_NoUkmService) { |
| 5163 EnableUkmLogging(); |
5121 ukm::UkmServiceTestingHarness ukm_service_test_harness; | 5164 ukm::UkmServiceTestingHarness ukm_service_test_harness; |
5122 GURL url("https://www.google.com"); | 5165 GURL url("https://www.google.com"); |
5123 std::vector<std::pair<const char*, int>> metrics = {{"metric", 1}}; | 5166 std::vector<std::pair<const char*, int>> metrics = {{"metric", 1}}; |
5124 | 5167 |
5125 EXPECT_FALSE(AutofillMetrics::LogUkm(nullptr, url, "test_ukm", metrics)); | 5168 EXPECT_FALSE(AutofillMetrics::LogUkm(nullptr, url, "test_ukm", metrics)); |
5126 ASSERT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); | 5169 ASSERT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); |
5127 } | 5170 } |
5128 | 5171 |
| 5172 // Tests that no UKM is logged when the ukm logging feature is disabled. |
| 5173 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_FeatureDisabled) { |
| 5174 ukm::UkmServiceTestingHarness ukm_service_test_harness; |
| 5175 GURL url("https://www.google.com"); |
| 5176 std::vector<std::pair<const char*, int>> metrics = {{"metric", 1}}; |
| 5177 |
| 5178 EXPECT_FALSE(AutofillMetrics::LogUkm( |
| 5179 ukm_service_test_harness.test_ukm_service(), url, "test_ukm", metrics)); |
| 5180 EXPECT_EQ(0U, ukm_service_test_harness.test_ukm_service()->sources_count()); |
| 5181 } |
| 5182 |
5129 } // namespace autofill | 5183 } // namespace autofill |
OLD | NEW |