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" |
11 #include "base/prefs/pref_service.h" | 11 #include "base/prefs/pref_service.h" |
12 #include "base/run_loop.h" | 12 #include "base/run_loop.h" |
13 #include "base/strings/string16.h" | 13 #include "base/strings/string16.h" |
14 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/utf_string_conversions.h" |
15 #include "base/time/time.h" | 15 #include "base/time/time.h" |
16 #include "components/autofill/core/browser/autofill_external_delegate.h" | 16 #include "components/autofill/core/browser/autofill_external_delegate.h" |
17 #include "components/autofill/core/browser/autofill_manager.h" | 17 #include "components/autofill/core/browser/autofill_manager.h" |
18 #include "components/autofill/core/browser/autofill_test_utils.h" | 18 #include "components/autofill/core/browser/autofill_test_utils.h" |
19 #include "components/autofill/core/browser/personal_data_manager.h" | 19 #include "components/autofill/core/browser/personal_data_manager.h" |
20 #include "components/autofill/core/browser/test_autofill_driver.h" | 20 #include "components/autofill/core/browser/test_autofill_driver.h" |
21 #include "components/autofill/core/browser/test_autofill_manager_delegate.h" | 21 #include "components/autofill/core/browser/test_autofill_manager_delegate.h" |
22 #include "components/autofill/core/browser/webdata/autofill_webdata_service.h" | 22 #include "components/autofill/core/browser/webdata/autofill_webdata_service.h" |
23 #include "components/autofill/core/common/form_data.h" | 23 #include "components/autofill/core/common/form_data.h" |
24 #include "components/autofill/core/common/form_field_data.h" | 24 #include "components/autofill/core/common/form_field_data.h" |
25 #include "components/autofill/core/common/forms_seen_state.h" | |
26 #include "components/webdata/common/web_data_results.h" | 25 #include "components/webdata/common/web_data_results.h" |
27 #include "testing/gmock/include/gmock/gmock.h" | 26 #include "testing/gmock/include/gmock/gmock.h" |
28 #include "testing/gtest/include/gtest/gtest.h" | 27 #include "testing/gtest/include/gtest/gtest.h" |
29 #include "ui/gfx/rect.h" | 28 #include "ui/gfx/rect.h" |
30 #include "url/gurl.h" | 29 #include "url/gurl.h" |
31 | 30 |
32 using base::ASCIIToUTF16; | 31 using base::ASCIIToUTF16; |
33 using base::TimeDelta; | 32 using base::TimeDelta; |
34 using base::TimeTicks; | 33 using base::TimeTicks; |
35 using testing::_; | 34 using testing::_; |
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
503 form.fields.push_back(field); | 502 form.fields.push_back(field); |
504 test::CreateTestFormField("Email", "email", "", "text", &field); | 503 test::CreateTestFormField("Email", "email", "", "text", &field); |
505 form.fields.push_back(field); | 504 form.fields.push_back(field); |
506 | 505 |
507 std::vector<FormData> forms(1, form); | 506 std::vector<FormData> forms(1, form); |
508 | 507 |
509 // Ensure no metrics are logged when loading a non-fillable form. | 508 // Ensure no metrics are logged when loading a non-fillable form. |
510 { | 509 { |
511 EXPECT_CALL(*autofill_manager_->metric_logger(), | 510 EXPECT_CALL(*autofill_manager_->metric_logger(), |
512 LogDeveloperEngagementMetric(_)).Times(0); | 511 LogDeveloperEngagementMetric(_)).Times(0); |
513 autofill_manager_->OnFormsSeen(forms, TimeTicks(), | 512 autofill_manager_->OnFormsSeen(forms, TimeTicks()); |
514 autofill::NO_SPECIAL_FORMS_SEEN); | |
515 autofill_manager_->Reset(); | 513 autofill_manager_->Reset(); |
516 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); | 514 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); |
517 } | 515 } |
518 | 516 |
519 // Add another field to the form, so that it becomes fillable. | 517 // Add another field to the form, so that it becomes fillable. |
520 test::CreateTestFormField("Phone", "phone", "", "text", &field); | 518 test::CreateTestFormField("Phone", "phone", "", "text", &field); |
521 forms.back().fields.push_back(field); | 519 forms.back().fields.push_back(field); |
522 | 520 |
523 // Expect only the "form parsed" metric to be logged; no metrics about | 521 // Expect only the "form parsed" metric to be logged; no metrics about |
524 // author-specified field type hints. | 522 // author-specified field type hints. |
525 { | 523 { |
526 EXPECT_CALL( | 524 EXPECT_CALL( |
527 *autofill_manager_->metric_logger(), | 525 *autofill_manager_->metric_logger(), |
528 LogDeveloperEngagementMetric( | 526 LogDeveloperEngagementMetric( |
529 AutofillMetrics::FILLABLE_FORM_PARSED)).Times(1); | 527 AutofillMetrics::FILLABLE_FORM_PARSED)).Times(1); |
530 EXPECT_CALL( | 528 EXPECT_CALL( |
531 *autofill_manager_->metric_logger(), | 529 *autofill_manager_->metric_logger(), |
532 LogDeveloperEngagementMetric( | 530 LogDeveloperEngagementMetric( |
533 AutofillMetrics::FILLABLE_FORM_CONTAINS_TYPE_HINTS)).Times(0); | 531 AutofillMetrics::FILLABLE_FORM_CONTAINS_TYPE_HINTS)).Times(0); |
534 autofill_manager_->OnFormsSeen(forms, TimeTicks(), | 532 autofill_manager_->OnFormsSeen(forms, TimeTicks()); |
535 autofill::NO_SPECIAL_FORMS_SEEN); | |
536 autofill_manager_->Reset(); | 533 autofill_manager_->Reset(); |
537 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); | 534 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); |
538 } | 535 } |
539 | 536 |
540 // Add some fields with an author-specified field type to the form. | 537 // Add some fields with an author-specified field type to the form. |
541 // We need to add at least three fields, because a form must have at least | 538 // We need to add at least three fields, because a form must have at least |
542 // three fillable fields to be considered to be autofillable; and if at least | 539 // three fillable fields to be considered to be autofillable; and if at least |
543 // one field specifies an explicit type hint, we don't apply any of our usual | 540 // one field specifies an explicit type hint, we don't apply any of our usual |
544 // local heuristics to detect field types in the rest of the form. | 541 // local heuristics to detect field types in the rest of the form. |
545 test::CreateTestFormField("", "", "", "text", &field); | 542 test::CreateTestFormField("", "", "", "text", &field); |
(...skipping 10 matching lines...) Expand all Loading... |
556 // hints metric to be logged. | 553 // hints metric to be logged. |
557 { | 554 { |
558 EXPECT_CALL( | 555 EXPECT_CALL( |
559 *autofill_manager_->metric_logger(), | 556 *autofill_manager_->metric_logger(), |
560 LogDeveloperEngagementMetric( | 557 LogDeveloperEngagementMetric( |
561 AutofillMetrics::FILLABLE_FORM_PARSED)).Times(1); | 558 AutofillMetrics::FILLABLE_FORM_PARSED)).Times(1); |
562 EXPECT_CALL( | 559 EXPECT_CALL( |
563 *autofill_manager_->metric_logger(), | 560 *autofill_manager_->metric_logger(), |
564 LogDeveloperEngagementMetric( | 561 LogDeveloperEngagementMetric( |
565 AutofillMetrics::FILLABLE_FORM_CONTAINS_TYPE_HINTS)).Times(1); | 562 AutofillMetrics::FILLABLE_FORM_CONTAINS_TYPE_HINTS)).Times(1); |
566 autofill_manager_->OnFormsSeen(forms, TimeTicks(), | 563 autofill_manager_->OnFormsSeen(forms, TimeTicks()); |
567 autofill::NO_SPECIAL_FORMS_SEEN); | |
568 autofill_manager_->Reset(); | 564 autofill_manager_->Reset(); |
569 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); | 565 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); |
570 } | 566 } |
571 } | 567 } |
572 | 568 |
573 // Test that the profile count is logged correctly. | 569 // Test that the profile count is logged correctly. |
574 TEST_F(AutofillMetricsTest, StoredProfileCount) { | 570 TEST_F(AutofillMetricsTest, StoredProfileCount) { |
575 // The metric should be logged when the profiles are first loaded. | 571 // The metric should be logged when the profiles are first loaded. |
576 EXPECT_CALL(*personal_data_->metric_logger(), | 572 EXPECT_CALL(*personal_data_->metric_logger(), |
577 LogStoredProfileCount(2)).Times(1); | 573 LogStoredProfileCount(2)).Times(1); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
669 } | 665 } |
670 | 666 |
671 // Test that we log whether Autofill is enabled when filling a form. | 667 // Test that we log whether Autofill is enabled when filling a form. |
672 TEST_F(AutofillMetricsTest, AutofillIsEnabledAtPageLoad) { | 668 TEST_F(AutofillMetricsTest, AutofillIsEnabledAtPageLoad) { |
673 // Establish our expectations. | 669 // Establish our expectations. |
674 ::testing::InSequence dummy; | 670 ::testing::InSequence dummy; |
675 EXPECT_CALL(*autofill_manager_->metric_logger(), | 671 EXPECT_CALL(*autofill_manager_->metric_logger(), |
676 LogIsAutofillEnabledAtPageLoad(true)).Times(1); | 672 LogIsAutofillEnabledAtPageLoad(true)).Times(1); |
677 | 673 |
678 autofill_manager_->set_autofill_enabled(true); | 674 autofill_manager_->set_autofill_enabled(true); |
679 autofill_manager_->OnFormsSeen(std::vector<FormData>(), TimeTicks(), | 675 autofill_manager_->OnFormsSeen(std::vector<FormData>(), TimeTicks()); |
680 autofill::NO_SPECIAL_FORMS_SEEN); | |
681 | 676 |
682 // Reset the autofill manager state. | 677 // Reset the autofill manager state. |
683 autofill_manager_->Reset(); | 678 autofill_manager_->Reset(); |
684 | 679 |
685 // Establish our expectations. | 680 // Establish our expectations. |
686 EXPECT_CALL(*autofill_manager_->metric_logger(), | 681 EXPECT_CALL(*autofill_manager_->metric_logger(), |
687 LogIsAutofillEnabledAtPageLoad(false)).Times(1); | 682 LogIsAutofillEnabledAtPageLoad(false)).Times(1); |
688 | 683 |
689 autofill_manager_->set_autofill_enabled(false); | 684 autofill_manager_->set_autofill_enabled(false); |
690 autofill_manager_->OnFormsSeen(std::vector<FormData>(), TimeTicks(), | 685 autofill_manager_->OnFormsSeen(std::vector<FormData>(), TimeTicks()); |
691 autofill::NO_SPECIAL_FORMS_SEEN); | |
692 } | 686 } |
693 | 687 |
694 // Verify that we correctly log user happiness metrics dealing with form loading | 688 // Verify that we correctly log user happiness metrics dealing with form loading |
695 // and form submission. | 689 // and form submission. |
696 TEST_F(AutofillMetricsTest, UserHappinessFormLoadAndSubmission) { | 690 TEST_F(AutofillMetricsTest, UserHappinessFormLoadAndSubmission) { |
697 // Start with a form with insufficiently many fields. | 691 // Start with a form with insufficiently many fields. |
698 FormData form; | 692 FormData form; |
699 form.name = ASCIIToUTF16("TestForm"); | 693 form.name = ASCIIToUTF16("TestForm"); |
700 form.method = ASCIIToUTF16("POST"); | 694 form.method = ASCIIToUTF16("POST"); |
701 form.origin = GURL("http://example.com/form.html"); | 695 form.origin = GURL("http://example.com/form.html"); |
702 form.action = GURL("http://example.com/submit.html"); | 696 form.action = GURL("http://example.com/submit.html"); |
703 form.user_submitted = true; | 697 form.user_submitted = true; |
704 | 698 |
705 FormFieldData field; | 699 FormFieldData field; |
706 test::CreateTestFormField("Name", "name", "", "text", &field); | 700 test::CreateTestFormField("Name", "name", "", "text", &field); |
707 form.fields.push_back(field); | 701 form.fields.push_back(field); |
708 test::CreateTestFormField("Email", "email", "", "text", &field); | 702 test::CreateTestFormField("Email", "email", "", "text", &field); |
709 form.fields.push_back(field); | 703 form.fields.push_back(field); |
710 | 704 |
711 std::vector<FormData> forms(1, form); | 705 std::vector<FormData> forms(1, form); |
712 | 706 |
713 // Expect no notifications when the form is first seen. | 707 // Expect no notifications when the form is first seen. |
714 { | 708 { |
715 EXPECT_CALL(*autofill_manager_->metric_logger(), | 709 EXPECT_CALL(*autofill_manager_->metric_logger(), |
716 LogUserHappinessMetric(AutofillMetrics::FORMS_LOADED)).Times(0); | 710 LogUserHappinessMetric(AutofillMetrics::FORMS_LOADED)).Times(0); |
717 autofill_manager_->OnFormsSeen(forms, TimeTicks(), | 711 autofill_manager_->OnFormsSeen(forms, TimeTicks()); |
718 autofill::NO_SPECIAL_FORMS_SEEN); | |
719 } | 712 } |
720 | 713 |
721 | 714 |
722 // Expect no notifications when the form is submitted. | 715 // Expect no notifications when the form is submitted. |
723 { | 716 { |
724 EXPECT_CALL( | 717 EXPECT_CALL( |
725 *autofill_manager_->metric_logger(), | 718 *autofill_manager_->metric_logger(), |
726 LogUserHappinessMetric( | 719 LogUserHappinessMetric( |
727 AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_ALL)).Times(0); | 720 AutofillMetrics::SUBMITTED_FILLABLE_FORM_AUTOFILLED_ALL)).Times(0); |
728 EXPECT_CALL( | 721 EXPECT_CALL( |
(...skipping 15 matching lines...) Expand all Loading... |
744 test::CreateTestFormField("Phone", "phone", "", "text", &field); | 737 test::CreateTestFormField("Phone", "phone", "", "text", &field); |
745 form.fields.push_back(field); | 738 form.fields.push_back(field); |
746 test::CreateTestFormField("Unknown", "unknown", "", "text", &field); | 739 test::CreateTestFormField("Unknown", "unknown", "", "text", &field); |
747 form.fields.push_back(field); | 740 form.fields.push_back(field); |
748 forms.front() = form; | 741 forms.front() = form; |
749 | 742 |
750 // Expect a notification when the form is first seen. | 743 // Expect a notification when the form is first seen. |
751 { | 744 { |
752 EXPECT_CALL(*autofill_manager_->metric_logger(), | 745 EXPECT_CALL(*autofill_manager_->metric_logger(), |
753 LogUserHappinessMetric(AutofillMetrics::FORMS_LOADED)); | 746 LogUserHappinessMetric(AutofillMetrics::FORMS_LOADED)); |
754 autofill_manager_->OnFormsSeen(forms, TimeTicks(), | 747 autofill_manager_->OnFormsSeen(forms, TimeTicks()); |
755 autofill::NO_SPECIAL_FORMS_SEEN); | |
756 } | 748 } |
757 | 749 |
758 // Expect a notification when the form is submitted. | 750 // Expect a notification when the form is submitted. |
759 { | 751 { |
760 EXPECT_CALL(*autofill_manager_->metric_logger(), | 752 EXPECT_CALL(*autofill_manager_->metric_logger(), |
761 LogUserHappinessMetric( | 753 LogUserHappinessMetric( |
762 AutofillMetrics::SUBMITTED_NON_FILLABLE_FORM)); | 754 AutofillMetrics::SUBMITTED_NON_FILLABLE_FORM)); |
763 autofill_manager_->FormSubmitted(form, TimeTicks::Now()); | 755 autofill_manager_->FormSubmitted(form, TimeTicks::Now()); |
764 } | 756 } |
765 | 757 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
845 form.fields.push_back(field); | 837 form.fields.push_back(field); |
846 test::CreateTestFormField("Phone", "phone", "", "text", &field); | 838 test::CreateTestFormField("Phone", "phone", "", "text", &field); |
847 form.fields.push_back(field); | 839 form.fields.push_back(field); |
848 | 840 |
849 std::vector<FormData> forms(1, form); | 841 std::vector<FormData> forms(1, form); |
850 | 842 |
851 // Expect a notification when the form is first seen. | 843 // Expect a notification when the form is first seen. |
852 { | 844 { |
853 EXPECT_CALL(*autofill_manager_->metric_logger(), | 845 EXPECT_CALL(*autofill_manager_->metric_logger(), |
854 LogUserHappinessMetric(AutofillMetrics::FORMS_LOADED)); | 846 LogUserHappinessMetric(AutofillMetrics::FORMS_LOADED)); |
855 autofill_manager_->OnFormsSeen(forms, TimeTicks(), | 847 autofill_manager_->OnFormsSeen(forms, TimeTicks()); |
856 autofill::NO_SPECIAL_FORMS_SEEN); | |
857 } | 848 } |
858 | 849 |
859 // Simulate typing. | 850 // Simulate typing. |
860 { | 851 { |
861 EXPECT_CALL(*autofill_manager_->metric_logger(), | 852 EXPECT_CALL(*autofill_manager_->metric_logger(), |
862 LogUserHappinessMetric(AutofillMetrics::USER_DID_TYPE)); | 853 LogUserHappinessMetric(AutofillMetrics::USER_DID_TYPE)); |
863 autofill_manager_->OnTextFieldDidChange(form, form.fields.front(), | 854 autofill_manager_->OnTextFieldDidChange(form, form.fields.front(), |
864 TimeTicks()); | 855 TimeTicks()); |
865 } | 856 } |
866 | 857 |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
949 FormFieldData field; | 940 FormFieldData field; |
950 test::CreateTestFormField("Name", "name", "", "text", &field); | 941 test::CreateTestFormField("Name", "name", "", "text", &field); |
951 form.fields.push_back(field); | 942 form.fields.push_back(field); |
952 test::CreateTestFormField("Email", "email", "", "text", &field); | 943 test::CreateTestFormField("Email", "email", "", "text", &field); |
953 form.fields.push_back(field); | 944 form.fields.push_back(field); |
954 test::CreateTestFormField("Phone", "phone", "", "text", &field); | 945 test::CreateTestFormField("Phone", "phone", "", "text", &field); |
955 form.fields.push_back(field); | 946 form.fields.push_back(field); |
956 | 947 |
957 std::vector<FormData> forms(1, form); | 948 std::vector<FormData> forms(1, form); |
958 | 949 |
| 950 // Fill additional form. |
| 951 FormData second_form = form; |
| 952 test::CreateTestFormField("Second Phone", "second_phone", "", "text", &field); |
| 953 second_form.fields.push_back(field); |
| 954 |
| 955 std::vector<FormData> second_forms(1, second_form); |
| 956 |
959 // Fill the field values for form submission. | 957 // Fill the field values for form submission. |
960 form.fields[0].value = ASCIIToUTF16("Elvis Aaron Presley"); | 958 form.fields[0].value = ASCIIToUTF16("Elvis Aaron Presley"); |
961 form.fields[1].value = ASCIIToUTF16("theking@gmail.com"); | 959 form.fields[1].value = ASCIIToUTF16("theking@gmail.com"); |
962 form.fields[2].value = ASCIIToUTF16("12345678901"); | 960 form.fields[2].value = ASCIIToUTF16("12345678901"); |
963 | 961 |
| 962 // Fill the field values for form submission. |
| 963 second_form.fields[0].value = ASCIIToUTF16("Elvis Aaron Presley"); |
| 964 second_form.fields[1].value = ASCIIToUTF16("theking@gmail.com"); |
| 965 second_form.fields[2].value = ASCIIToUTF16("12345678901"); |
| 966 second_form.fields[3].value = ASCIIToUTF16("51512345678"); |
| 967 |
964 // Expect only form load metrics to be logged if the form is submitted without | 968 // Expect only form load metrics to be logged if the form is submitted without |
965 // user interaction. | 969 // user interaction. |
966 { | 970 { |
967 EXPECT_CALL(*autofill_manager_->metric_logger(), | 971 EXPECT_CALL(*autofill_manager_->metric_logger(), |
968 LogFormFillDurationFromLoadWithAutofill(_)).Times(0); | 972 LogFormFillDurationFromLoadWithAutofill(_)).Times(0); |
969 EXPECT_CALL(*autofill_manager_->metric_logger(), | 973 EXPECT_CALL(*autofill_manager_->metric_logger(), |
970 LogFormFillDurationFromLoadWithoutAutofill( | 974 LogFormFillDurationFromLoadWithoutAutofill( |
971 TimeDelta::FromInternalValue(16))); | 975 TimeDelta::FromInternalValue(16))); |
972 EXPECT_CALL(*autofill_manager_->metric_logger(), | 976 EXPECT_CALL(*autofill_manager_->metric_logger(), |
973 LogFormFillDurationFromInteractionWithAutofill(_)).Times(0); | 977 LogFormFillDurationFromInteractionWithAutofill(_)).Times(0); |
974 EXPECT_CALL(*autofill_manager_->metric_logger(), | 978 EXPECT_CALL(*autofill_manager_->metric_logger(), |
975 LogFormFillDurationFromInteractionWithoutAutofill(_)).Times(0); | 979 LogFormFillDurationFromInteractionWithoutAutofill(_)).Times(0); |
976 autofill_manager_->OnFormsSeen( | 980 autofill_manager_->OnFormsSeen(forms, TimeTicks::FromInternalValue(1)); |
977 forms, TimeTicks::FromInternalValue(1), | |
978 autofill::NO_SPECIAL_FORMS_SEEN); | |
979 autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17)); | 981 autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17)); |
980 autofill_manager_->Reset(); | 982 autofill_manager_->Reset(); |
981 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); | 983 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); |
982 } | 984 } |
983 | 985 |
984 // Expect metric to be logged if the user manually edited a form field. | 986 // Expect metric to be logged if the user manually edited a form field. |
985 { | 987 { |
986 EXPECT_CALL(*autofill_manager_->metric_logger(), | 988 EXPECT_CALL(*autofill_manager_->metric_logger(), |
987 LogFormFillDurationFromLoadWithAutofill(_)).Times(0); | 989 LogFormFillDurationFromLoadWithAutofill(_)).Times(0); |
988 EXPECT_CALL(*autofill_manager_->metric_logger(), | 990 EXPECT_CALL(*autofill_manager_->metric_logger(), |
989 LogFormFillDurationFromLoadWithoutAutofill( | 991 LogFormFillDurationFromLoadWithoutAutofill( |
990 TimeDelta::FromInternalValue(16))); | 992 TimeDelta::FromInternalValue(16))); |
991 EXPECT_CALL(*autofill_manager_->metric_logger(), | 993 EXPECT_CALL(*autofill_manager_->metric_logger(), |
992 LogFormFillDurationFromInteractionWithAutofill(_)).Times(0); | 994 LogFormFillDurationFromInteractionWithAutofill(_)).Times(0); |
993 EXPECT_CALL(*autofill_manager_->metric_logger(), | 995 EXPECT_CALL(*autofill_manager_->metric_logger(), |
994 LogFormFillDurationFromInteractionWithoutAutofill( | 996 LogFormFillDurationFromInteractionWithoutAutofill( |
995 TimeDelta::FromInternalValue(14))); | 997 TimeDelta::FromInternalValue(14))); |
996 autofill_manager_->OnFormsSeen( | 998 autofill_manager_->OnFormsSeen(forms, TimeTicks::FromInternalValue(1)); |
997 forms, TimeTicks::FromInternalValue(1), | |
998 autofill::NO_SPECIAL_FORMS_SEEN); | |
999 autofill_manager_->OnTextFieldDidChange(form, form.fields.front(), | 999 autofill_manager_->OnTextFieldDidChange(form, form.fields.front(), |
1000 TimeTicks::FromInternalValue(3)); | 1000 TimeTicks::FromInternalValue(3)); |
1001 autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17)); | 1001 autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17)); |
1002 autofill_manager_->Reset(); | 1002 autofill_manager_->Reset(); |
1003 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); | 1003 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); |
1004 } | 1004 } |
1005 | 1005 |
1006 // Expect metric to be logged if the user autofilled the form. | 1006 // Expect metric to be logged if the user autofilled the form. |
1007 form.fields[0].is_autofilled = true; | 1007 form.fields[0].is_autofilled = true; |
1008 { | 1008 { |
1009 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1009 EXPECT_CALL(*autofill_manager_->metric_logger(), |
1010 LogFormFillDurationFromLoadWithAutofill( | 1010 LogFormFillDurationFromLoadWithAutofill( |
1011 TimeDelta::FromInternalValue(16))); | 1011 TimeDelta::FromInternalValue(16))); |
1012 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1012 EXPECT_CALL(*autofill_manager_->metric_logger(), |
1013 LogFormFillDurationFromLoadWithoutAutofill(_)).Times(0); | 1013 LogFormFillDurationFromLoadWithoutAutofill(_)).Times(0); |
1014 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1014 EXPECT_CALL(*autofill_manager_->metric_logger(), |
1015 LogFormFillDurationFromInteractionWithAutofill( | 1015 LogFormFillDurationFromInteractionWithAutofill( |
1016 TimeDelta::FromInternalValue(12))); | 1016 TimeDelta::FromInternalValue(12))); |
1017 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1017 EXPECT_CALL(*autofill_manager_->metric_logger(), |
1018 LogFormFillDurationFromInteractionWithoutAutofill(_)).Times(0); | 1018 LogFormFillDurationFromInteractionWithoutAutofill(_)).Times(0); |
1019 autofill_manager_->OnFormsSeen( | 1019 autofill_manager_->OnFormsSeen(forms, TimeTicks::FromInternalValue(1)); |
1020 forms, TimeTicks::FromInternalValue(1), | |
1021 autofill::NO_SPECIAL_FORMS_SEEN); | |
1022 autofill_manager_->OnDidFillAutofillFormData( | 1020 autofill_manager_->OnDidFillAutofillFormData( |
1023 TimeTicks::FromInternalValue(5)); | 1021 TimeTicks::FromInternalValue(5)); |
1024 autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17)); | 1022 autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17)); |
1025 autofill_manager_->Reset(); | 1023 autofill_manager_->Reset(); |
1026 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); | 1024 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); |
1027 } | 1025 } |
1028 | 1026 |
1029 // Expect metric to be logged if the user both manually filled some fields | 1027 // Expect metric to be logged if the user both manually filled some fields |
1030 // and autofilled others. Messages can arrive out of order, so make sure they | 1028 // and autofilled others. Messages can arrive out of order, so make sure they |
1031 // take precedence appropriately. | 1029 // take precedence appropriately. |
1032 { | 1030 { |
1033 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1031 EXPECT_CALL(*autofill_manager_->metric_logger(), |
1034 LogFormFillDurationFromLoadWithAutofill( | 1032 LogFormFillDurationFromLoadWithAutofill( |
1035 TimeDelta::FromInternalValue(16))); | 1033 TimeDelta::FromInternalValue(16))); |
1036 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1034 EXPECT_CALL(*autofill_manager_->metric_logger(), |
1037 LogFormFillDurationFromLoadWithoutAutofill(_)).Times(0); | 1035 LogFormFillDurationFromLoadWithoutAutofill(_)).Times(0); |
1038 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1036 EXPECT_CALL(*autofill_manager_->metric_logger(), |
1039 LogFormFillDurationFromInteractionWithAutofill( | 1037 LogFormFillDurationFromInteractionWithAutofill( |
1040 TimeDelta::FromInternalValue(14))); | 1038 TimeDelta::FromInternalValue(14))); |
1041 EXPECT_CALL(*autofill_manager_->metric_logger(), | 1039 EXPECT_CALL(*autofill_manager_->metric_logger(), |
1042 LogFormFillDurationFromInteractionWithoutAutofill(_)).Times(0); | 1040 LogFormFillDurationFromInteractionWithoutAutofill(_)).Times(0); |
1043 autofill_manager_->OnFormsSeen( | 1041 autofill_manager_->OnFormsSeen(forms, TimeTicks::FromInternalValue(1)); |
1044 forms, TimeTicks::FromInternalValue(1), | |
1045 autofill::NO_SPECIAL_FORMS_SEEN); | |
1046 autofill_manager_->OnDidFillAutofillFormData( | 1042 autofill_manager_->OnDidFillAutofillFormData( |
1047 TimeTicks::FromInternalValue(5)); | 1043 TimeTicks::FromInternalValue(5)); |
1048 autofill_manager_->OnTextFieldDidChange(form, form.fields.front(), | 1044 autofill_manager_->OnTextFieldDidChange(form, form.fields.front(), |
| 1045 TimeTicks::FromInternalValue(3)); |
| 1046 autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17)); |
| 1047 autofill_manager_->Reset(); |
| 1048 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); |
| 1049 } |
| 1050 |
| 1051 // Make sure that loading another form doesn't affect metrics from the first |
| 1052 // form. |
| 1053 { |
| 1054 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1055 LogFormFillDurationFromLoadWithAutofill( |
| 1056 TimeDelta::FromInternalValue(16))); |
| 1057 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1058 LogFormFillDurationFromLoadWithoutAutofill(_)).Times(0); |
| 1059 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1060 LogFormFillDurationFromInteractionWithAutofill( |
| 1061 TimeDelta::FromInternalValue(14))); |
| 1062 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1063 LogFormFillDurationFromInteractionWithoutAutofill(_)).Times(0); |
| 1064 autofill_manager_->OnFormsSeen(forms, TimeTicks::FromInternalValue(1)); |
| 1065 autofill_manager_->OnFormsSeen(second_forms, |
| 1066 TimeTicks::FromInternalValue(3)); |
| 1067 autofill_manager_->OnDidFillAutofillFormData( |
| 1068 TimeTicks::FromInternalValue(5)); |
| 1069 autofill_manager_->OnTextFieldDidChange(form, form.fields.front(), |
1049 TimeTicks::FromInternalValue(3)); | 1070 TimeTicks::FromInternalValue(3)); |
1050 autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17)); | 1071 autofill_manager_->FormSubmitted(form, TimeTicks::FromInternalValue(17)); |
1051 autofill_manager_->Reset(); | 1072 autofill_manager_->Reset(); |
1052 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); | 1073 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); |
1053 } | 1074 } |
| 1075 |
| 1076 // Make sure that submitting a form that was loaded later will report the |
| 1077 // later loading time. |
| 1078 { |
| 1079 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1080 LogFormFillDurationFromLoadWithoutAutofill( |
| 1081 TimeDelta::FromInternalValue(12))); |
| 1082 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1083 LogFormFillDurationFromLoadWithAutofill(_)).Times(0); |
| 1084 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1085 LogFormFillDurationFromInteractionWithAutofill(_)).Times(0); |
| 1086 EXPECT_CALL(*autofill_manager_->metric_logger(), |
| 1087 LogFormFillDurationFromInteractionWithoutAutofill(_)).Times(0); |
| 1088 autofill_manager_->OnFormsSeen(forms, TimeTicks::FromInternalValue(1)); |
| 1089 autofill_manager_->OnFormsSeen(second_forms, |
| 1090 TimeTicks::FromInternalValue(5)); |
| 1091 autofill_manager_->FormSubmitted(second_form, |
| 1092 TimeTicks::FromInternalValue(17)); |
| 1093 autofill_manager_->Reset(); |
| 1094 Mock::VerifyAndClearExpectations(autofill_manager_->metric_logger()); |
| 1095 } |
1054 } | 1096 } |
1055 | 1097 |
1056 } // namespace autofill | 1098 } // namespace autofill |
OLD | NEW |