| 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 <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 autofill_manager_.reset(); | 276 autofill_manager_.reset(); |
| 277 autofill_driver_.reset(); | 277 autofill_driver_.reset(); |
| 278 personal_data_.reset(); | 278 personal_data_.reset(); |
| 279 } | 279 } |
| 280 | 280 |
| 281 // Test that we log quality metrics appropriately. | 281 // Test that we log quality metrics appropriately. |
| 282 TEST_F(AutofillMetricsTest, QualityMetrics) { | 282 TEST_F(AutofillMetricsTest, QualityMetrics) { |
| 283 // Set up our form data. | 283 // Set up our form data. |
| 284 FormData form; | 284 FormData form; |
| 285 form.name = ASCIIToUTF16("TestForm"); | 285 form.name = ASCIIToUTF16("TestForm"); |
| 286 form.method = ASCIIToUTF16("POST"); | |
| 287 form.origin = GURL("http://example.com/form.html"); | 286 form.origin = GURL("http://example.com/form.html"); |
| 288 form.action = GURL("http://example.com/submit.html"); | 287 form.action = GURL("http://example.com/submit.html"); |
| 289 form.user_submitted = true; | 288 form.user_submitted = true; |
| 290 | 289 |
| 291 std::vector<ServerFieldType> heuristic_types, server_types; | 290 std::vector<ServerFieldType> heuristic_types, server_types; |
| 292 FormFieldData field; | 291 FormFieldData field; |
| 293 | 292 |
| 294 test::CreateTestFormField( | 293 test::CreateTestFormField( |
| 295 "Autofilled", "autofilled", "Elvis Aaron Presley", "text", &field); | 294 "Autofilled", "autofilled", "Elvis Aaron Presley", "text", &field); |
| 296 field.is_autofilled = true; | 295 field.is_autofilled = true; |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 384 EXPECT_NO_FATAL_FAILURE(autofill_manager_->FormSubmitted(form, | 383 EXPECT_NO_FATAL_FAILURE(autofill_manager_->FormSubmitted(form, |
| 385 TimeTicks::Now())); | 384 TimeTicks::Now())); |
| 386 } | 385 } |
| 387 | 386 |
| 388 // Test that we behave sanely when the cached form differs from the submitted | 387 // Test that we behave sanely when the cached form differs from the submitted |
| 389 // one. | 388 // one. |
| 390 TEST_F(AutofillMetricsTest, SaneMetricsWithCacheMismatch) { | 389 TEST_F(AutofillMetricsTest, SaneMetricsWithCacheMismatch) { |
| 391 // Set up our form data. | 390 // Set up our form data. |
| 392 FormData form; | 391 FormData form; |
| 393 form.name = ASCIIToUTF16("TestForm"); | 392 form.name = ASCIIToUTF16("TestForm"); |
| 394 form.method = ASCIIToUTF16("POST"); | |
| 395 form.origin = GURL("http://example.com/form.html"); | 393 form.origin = GURL("http://example.com/form.html"); |
| 396 form.action = GURL("http://example.com/submit.html"); | 394 form.action = GURL("http://example.com/submit.html"); |
| 397 form.user_submitted = true; | 395 form.user_submitted = true; |
| 398 | 396 |
| 399 std::vector<ServerFieldType> heuristic_types, server_types; | 397 std::vector<ServerFieldType> heuristic_types, server_types; |
| 400 | 398 |
| 401 FormFieldData field; | 399 FormFieldData field; |
| 402 test::CreateTestFormField( | 400 test::CreateTestFormField( |
| 403 "Both match", "match", "Elvis Aaron Presley", "text", &field); | 401 "Both match", "match", "Elvis Aaron Presley", "text", &field); |
| 404 field.is_autofilled = true; | 402 field.is_autofilled = true; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 486 // Simulate form submission. | 484 // Simulate form submission. |
| 487 EXPECT_NO_FATAL_FAILURE(autofill_manager_->FormSubmitted(form, | 485 EXPECT_NO_FATAL_FAILURE(autofill_manager_->FormSubmitted(form, |
| 488 TimeTicks::Now())); | 486 TimeTicks::Now())); |
| 489 } | 487 } |
| 490 | 488 |
| 491 // Verify that we correctly log metrics regarding developer engagement. | 489 // Verify that we correctly log metrics regarding developer engagement. |
| 492 TEST_F(AutofillMetricsTest, DeveloperEngagement) { | 490 TEST_F(AutofillMetricsTest, DeveloperEngagement) { |
| 493 // Start with a non-fillable form. | 491 // Start with a non-fillable form. |
| 494 FormData form; | 492 FormData form; |
| 495 form.name = ASCIIToUTF16("TestForm"); | 493 form.name = ASCIIToUTF16("TestForm"); |
| 496 form.method = ASCIIToUTF16("POST"); | |
| 497 form.origin = GURL("http://example.com/form.html"); | 494 form.origin = GURL("http://example.com/form.html"); |
| 498 form.action = GURL("http://example.com/submit.html"); | 495 form.action = GURL("http://example.com/submit.html"); |
| 499 | 496 |
| 500 FormFieldData field; | 497 FormFieldData field; |
| 501 test::CreateTestFormField("Name", "name", "", "text", &field); | 498 test::CreateTestFormField("Name", "name", "", "text", &field); |
| 502 form.fields.push_back(field); | 499 form.fields.push_back(field); |
| 503 test::CreateTestFormField("Email", "email", "", "text", &field); | 500 test::CreateTestFormField("Email", "email", "", "text", &field); |
| 504 form.fields.push_back(field); | 501 form.fields.push_back(field); |
| 505 | 502 |
| 506 std::vector<FormData> forms(1, form); | 503 std::vector<FormData> forms(1, form); |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 595 LogIsAutofillEnabledAtStartup(false)).Times(1); | 592 LogIsAutofillEnabledAtStartup(false)).Times(1); |
| 596 personal_data_->Init( | 593 personal_data_->Init( |
| 597 autofill_client_.GetDatabase(), autofill_client_.GetPrefs(), false); | 594 autofill_client_.GetDatabase(), autofill_client_.GetPrefs(), false); |
| 598 } | 595 } |
| 599 | 596 |
| 600 // Test that we log the number of Autofill suggestions when filling a form. | 597 // Test that we log the number of Autofill suggestions when filling a form. |
| 601 TEST_F(AutofillMetricsTest, AddressSuggestionsCount) { | 598 TEST_F(AutofillMetricsTest, AddressSuggestionsCount) { |
| 602 // Set up our form data. | 599 // Set up our form data. |
| 603 FormData form; | 600 FormData form; |
| 604 form.name = ASCIIToUTF16("TestForm"); | 601 form.name = ASCIIToUTF16("TestForm"); |
| 605 form.method = ASCIIToUTF16("POST"); | |
| 606 form.origin = GURL("http://example.com/form.html"); | 602 form.origin = GURL("http://example.com/form.html"); |
| 607 form.action = GURL("http://example.com/submit.html"); | 603 form.action = GURL("http://example.com/submit.html"); |
| 608 form.user_submitted = true; | 604 form.user_submitted = true; |
| 609 | 605 |
| 610 FormFieldData field; | 606 FormFieldData field; |
| 611 std::vector<ServerFieldType> field_types; | 607 std::vector<ServerFieldType> field_types; |
| 612 test::CreateTestFormField("Name", "name", "", "text", &field); | 608 test::CreateTestFormField("Name", "name", "", "text", &field); |
| 613 form.fields.push_back(field); | 609 form.fields.push_back(field); |
| 614 field_types.push_back(NAME_FULL); | 610 field_types.push_back(NAME_FULL); |
| 615 test::CreateTestFormField("Email", "email", "", "email", &field); | 611 test::CreateTestFormField("Email", "email", "", "email", &field); |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 684 autofill_manager_->set_autofill_enabled(false); | 680 autofill_manager_->set_autofill_enabled(false); |
| 685 autofill_manager_->OnFormsSeen(std::vector<FormData>(), TimeTicks()); | 681 autofill_manager_->OnFormsSeen(std::vector<FormData>(), TimeTicks()); |
| 686 } | 682 } |
| 687 | 683 |
| 688 // Verify that we correctly log user happiness metrics dealing with form loading | 684 // Verify that we correctly log user happiness metrics dealing with form loading |
| 689 // and form submission. | 685 // and form submission. |
| 690 TEST_F(AutofillMetricsTest, UserHappinessFormLoadAndSubmission) { | 686 TEST_F(AutofillMetricsTest, UserHappinessFormLoadAndSubmission) { |
| 691 // Start with a form with insufficiently many fields. | 687 // Start with a form with insufficiently many fields. |
| 692 FormData form; | 688 FormData form; |
| 693 form.name = ASCIIToUTF16("TestForm"); | 689 form.name = ASCIIToUTF16("TestForm"); |
| 694 form.method = ASCIIToUTF16("POST"); | |
| 695 form.origin = GURL("http://example.com/form.html"); | 690 form.origin = GURL("http://example.com/form.html"); |
| 696 form.action = GURL("http://example.com/submit.html"); | 691 form.action = GURL("http://example.com/submit.html"); |
| 697 form.user_submitted = true; | 692 form.user_submitted = true; |
| 698 | 693 |
| 699 FormFieldData field; | 694 FormFieldData field; |
| 700 test::CreateTestFormField("Name", "name", "", "text", &field); | 695 test::CreateTestFormField("Name", "name", "", "text", &field); |
| 701 form.fields.push_back(field); | 696 form.fields.push_back(field); |
| 702 test::CreateTestFormField("Email", "email", "", "text", &field); | 697 test::CreateTestFormField("Email", "email", "", "text", &field); |
| 703 form.fields.push_back(field); | 698 form.fields.push_back(field); |
| 704 | 699 |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 818 autofill_manager_->FormSubmitted(form, TimeTicks::Now()); | 813 autofill_manager_->FormSubmitted(form, TimeTicks::Now()); |
| 819 } | 814 } |
| 820 } | 815 } |
| 821 | 816 |
| 822 // Verify that we correctly log user happiness metrics dealing with form | 817 // Verify that we correctly log user happiness metrics dealing with form |
| 823 // interaction. | 818 // interaction. |
| 824 TEST_F(AutofillMetricsTest, UserHappinessFormInteraction) { | 819 TEST_F(AutofillMetricsTest, UserHappinessFormInteraction) { |
| 825 // Load a fillable form. | 820 // Load a fillable form. |
| 826 FormData form; | 821 FormData form; |
| 827 form.name = ASCIIToUTF16("TestForm"); | 822 form.name = ASCIIToUTF16("TestForm"); |
| 828 form.method = ASCIIToUTF16("POST"); | |
| 829 form.origin = GURL("http://example.com/form.html"); | 823 form.origin = GURL("http://example.com/form.html"); |
| 830 form.action = GURL("http://example.com/submit.html"); | 824 form.action = GURL("http://example.com/submit.html"); |
| 831 form.user_submitted = true; | 825 form.user_submitted = true; |
| 832 | 826 |
| 833 FormFieldData field; | 827 FormFieldData field; |
| 834 test::CreateTestFormField("Name", "name", "", "text", &field); | 828 test::CreateTestFormField("Name", "name", "", "text", &field); |
| 835 form.fields.push_back(field); | 829 form.fields.push_back(field); |
| 836 test::CreateTestFormField("Email", "email", "", "text", &field); | 830 test::CreateTestFormField("Email", "email", "", "text", &field); |
| 837 form.fields.push_back(field); | 831 form.fields.push_back(field); |
| 838 test::CreateTestFormField("Phone", "phone", "", "text", &field); | 832 test::CreateTestFormField("Phone", "phone", "", "text", &field); |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 925 AutofillMetrics::USER_DID_EDIT_AUTOFILLED_FIELD)); | 919 AutofillMetrics::USER_DID_EDIT_AUTOFILLED_FIELD)); |
| 926 autofill_manager_->OnTextFieldDidChange(form, form.fields[1], TimeTicks()); | 920 autofill_manager_->OnTextFieldDidChange(form, form.fields[1], TimeTicks()); |
| 927 } | 921 } |
| 928 } | 922 } |
| 929 | 923 |
| 930 // Verify that we correctly log metrics tracking the duration of form fill. | 924 // Verify that we correctly log metrics tracking the duration of form fill. |
| 931 TEST_F(AutofillMetricsTest, FormFillDuration) { | 925 TEST_F(AutofillMetricsTest, FormFillDuration) { |
| 932 // Load a fillable form. | 926 // Load a fillable form. |
| 933 FormData form; | 927 FormData form; |
| 934 form.name = ASCIIToUTF16("TestForm"); | 928 form.name = ASCIIToUTF16("TestForm"); |
| 935 form.method = ASCIIToUTF16("POST"); | |
| 936 form.origin = GURL("http://example.com/form.html"); | 929 form.origin = GURL("http://example.com/form.html"); |
| 937 form.action = GURL("http://example.com/submit.html"); | 930 form.action = GURL("http://example.com/submit.html"); |
| 938 form.user_submitted = true; | 931 form.user_submitted = true; |
| 939 | 932 |
| 940 FormFieldData field; | 933 FormFieldData field; |
| 941 test::CreateTestFormField("Name", "name", "", "text", &field); | 934 test::CreateTestFormField("Name", "name", "", "text", &field); |
| 942 form.fields.push_back(field); | 935 form.fields.push_back(field); |
| 943 test::CreateTestFormField("Email", "email", "", "text", &field); | 936 test::CreateTestFormField("Email", "email", "", "text", &field); |
| 944 form.fields.push_back(field); | 937 form.fields.push_back(field); |
| 945 test::CreateTestFormField("Phone", "phone", "", "text", &field); | 938 test::CreateTestFormField("Phone", "phone", "", "text", &field); |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1089 autofill_manager_->OnFormsSeen(second_forms, | 1082 autofill_manager_->OnFormsSeen(second_forms, |
| 1090 TimeTicks::FromInternalValue(5)); | 1083 TimeTicks::FromInternalValue(5)); |
| 1091 autofill_manager_->FormSubmitted(second_form, | 1084 autofill_manager_->FormSubmitted(second_form, |
| 1092 TimeTicks::FromInternalValue(17)); | 1085 TimeTicks::FromInternalValue(17)); |
| 1093 autofill_manager_->Reset(); | 1086 autofill_manager_->Reset(); |
| 1094 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); | 1087 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); |
| 1095 } | 1088 } |
| 1096 } | 1089 } |
| 1097 | 1090 |
| 1098 } // namespace autofill | 1091 } // namespace autofill |
| OLD | NEW |