| 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 505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 // Simulate having seen this form on page load. | 516 // Simulate having seen this form on page load. |
| 517 autofill_manager_->AddSeenForm(form, heuristic_types, server_types); | 517 autofill_manager_->AddSeenForm(form, heuristic_types, server_types); |
| 518 | 518 |
| 519 // Simulate form submission. | 519 // Simulate form submission. |
| 520 base::HistogramTester histogram_tester; | 520 base::HistogramTester histogram_tester; |
| 521 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 521 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 522 | 522 |
| 523 // Heuristic predictions. | 523 // Heuristic predictions. |
| 524 // Unknown: | 524 // Unknown: |
| 525 histogram_tester.ExpectBucketCount("Autofill.Quality.HeuristicType", | 525 histogram_tester.ExpectBucketCount("Autofill.Quality.HeuristicType", |
| 526 AutofillMetrics::TYPE_UNKNOWN, 1); | 526 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN, |
| 527 1); |
| 527 histogram_tester.ExpectBucketCount( | 528 histogram_tester.ExpectBucketCount( |
| 528 "Autofill.Quality.HeuristicType.ByFieldType", | 529 "Autofill.Quality.HeuristicType.ByFieldType", |
| 529 GetFieldTypeGroupMetric(ADDRESS_HOME_COUNTRY, | 530 GetFieldTypeGroupMetric(ADDRESS_HOME_COUNTRY, |
| 530 AutofillMetrics::TYPE_UNKNOWN), | 531 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 531 1); | 532 1); |
| 532 // Match: | 533 // Match: |
| 533 histogram_tester.ExpectBucketCount("Autofill.Quality.HeuristicType", | 534 histogram_tester.ExpectBucketCount("Autofill.Quality.HeuristicType", |
| 534 AutofillMetrics::TYPE_MATCH, 2); | 535 AutofillMetrics::TRUE_POSITIVE, 2); |
| 535 histogram_tester.ExpectBucketCount( | 536 histogram_tester.ExpectBucketCount( |
| 536 "Autofill.Quality.HeuristicType.ByFieldType", | 537 "Autofill.Quality.HeuristicType.ByFieldType", |
| 537 GetFieldTypeGroupMetric(NAME_FULL, AutofillMetrics::TYPE_MATCH), 1); | 538 GetFieldTypeGroupMetric(NAME_FULL, AutofillMetrics::TRUE_POSITIVE), 1); |
| 538 histogram_tester.ExpectBucketCount( | 539 histogram_tester.ExpectBucketCount( |
| 539 "Autofill.Quality.HeuristicType.ByFieldType", | 540 "Autofill.Quality.HeuristicType.ByFieldType", |
| 540 GetFieldTypeGroupMetric(PHONE_HOME_CITY_AND_NUMBER, | 541 GetFieldTypeGroupMetric(PHONE_HOME_CITY_AND_NUMBER, |
| 541 AutofillMetrics::TYPE_MATCH), | 542 AutofillMetrics::TRUE_POSITIVE), |
| 542 1); | 543 1); |
| 543 // Mismatch: | 544 // Mismatch: |
| 544 histogram_tester.ExpectBucketCount("Autofill.Quality.HeuristicType", | 545 histogram_tester.ExpectBucketCount("Autofill.Quality.HeuristicType", |
| 545 AutofillMetrics::TYPE_MISMATCH, 1); | 546 AutofillMetrics::FALSE_NEGATIVE_MISMATCH, |
| 546 histogram_tester.ExpectBucketCount( | 547 1); |
| 547 "Autofill.Quality.HeuristicType.ByFieldType", | 548 histogram_tester.ExpectBucketCount( |
| 548 GetFieldTypeGroupMetric(EMAIL_ADDRESS, AutofillMetrics::TYPE_MISMATCH), | 549 "Autofill.Quality.HeuristicType.ByFieldType", |
| 550 GetFieldTypeGroupMetric(EMAIL_ADDRESS, |
| 551 AutofillMetrics::FALSE_NEGATIVE_MISMATCH), |
| 549 1); | 552 1); |
| 550 | 553 |
| 551 // Server predictions: | 554 // Server predictions: |
| 552 // Unknown: | 555 // Unknown: |
| 553 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType", | 556 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType", |
| 554 AutofillMetrics::TYPE_UNKNOWN, 1); | 557 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN, |
| 558 1); |
| 555 histogram_tester.ExpectBucketCount( | 559 histogram_tester.ExpectBucketCount( |
| 556 "Autofill.Quality.ServerType.ByFieldType", | 560 "Autofill.Quality.ServerType.ByFieldType", |
| 557 GetFieldTypeGroupMetric(ADDRESS_HOME_COUNTRY, | 561 GetFieldTypeGroupMetric(ADDRESS_HOME_COUNTRY, |
| 558 AutofillMetrics::TYPE_UNKNOWN), | 562 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 559 1); | 563 1); |
| 560 // Match: | 564 // Match: |
| 561 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType", | 565 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType", |
| 562 AutofillMetrics::TYPE_MATCH, 2); | 566 AutofillMetrics::TRUE_POSITIVE, 2); |
| 563 histogram_tester.ExpectBucketCount( | 567 histogram_tester.ExpectBucketCount( |
| 564 "Autofill.Quality.ServerType.ByFieldType", | 568 "Autofill.Quality.ServerType.ByFieldType", |
| 565 GetFieldTypeGroupMetric(EMAIL_ADDRESS, AutofillMetrics::TYPE_MATCH), 1); | 569 GetFieldTypeGroupMetric(EMAIL_ADDRESS, AutofillMetrics::TRUE_POSITIVE), |
| 570 1); |
| 566 histogram_tester.ExpectBucketCount( | 571 histogram_tester.ExpectBucketCount( |
| 567 "Autofill.Quality.ServerType.ByFieldType", | 572 "Autofill.Quality.ServerType.ByFieldType", |
| 568 GetFieldTypeGroupMetric(PHONE_HOME_WHOLE_NUMBER, | 573 GetFieldTypeGroupMetric(PHONE_HOME_WHOLE_NUMBER, |
| 569 AutofillMetrics::TYPE_MATCH), | 574 AutofillMetrics::TRUE_POSITIVE), |
| 570 1); | 575 1); |
| 571 // Mismatch: | 576 // Mismatch: |
| 572 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType", | 577 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType", |
| 573 AutofillMetrics::TYPE_MISMATCH, 1); | 578 AutofillMetrics::FALSE_NEGATIVE_MISMATCH, |
| 574 histogram_tester.ExpectBucketCount( | 579 1); |
| 575 "Autofill.Quality.ServerType.ByFieldType", | 580 histogram_tester.ExpectBucketCount( |
| 576 GetFieldTypeGroupMetric(NAME_FULL, AutofillMetrics::TYPE_MISMATCH), 1); | 581 "Autofill.Quality.ServerType.ByFieldType", |
| 582 GetFieldTypeGroupMetric(NAME_FULL, |
| 583 AutofillMetrics::FALSE_NEGATIVE_MISMATCH), |
| 584 1); |
| 577 | 585 |
| 578 // Overall predictions: | 586 // Overall predictions: |
| 579 // Unknown: | 587 // Unknown: |
| 580 histogram_tester.ExpectBucketCount("Autofill.Quality.PredictedType", | 588 histogram_tester.ExpectBucketCount("Autofill.Quality.PredictedType", |
| 581 AutofillMetrics::TYPE_UNKNOWN, 1); | 589 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN, |
| 590 1); |
| 582 histogram_tester.ExpectBucketCount( | 591 histogram_tester.ExpectBucketCount( |
| 583 "Autofill.Quality.PredictedType.ByFieldType", | 592 "Autofill.Quality.PredictedType.ByFieldType", |
| 584 GetFieldTypeGroupMetric(ADDRESS_HOME_COUNTRY, | 593 GetFieldTypeGroupMetric(ADDRESS_HOME_COUNTRY, |
| 585 AutofillMetrics::TYPE_UNKNOWN), | 594 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 586 1); | 595 1); |
| 587 // Match: | 596 // Match: |
| 588 histogram_tester.ExpectBucketCount("Autofill.Quality.PredictedType", | 597 histogram_tester.ExpectBucketCount("Autofill.Quality.PredictedType", |
| 589 AutofillMetrics::TYPE_MATCH, 2); | 598 AutofillMetrics::TRUE_POSITIVE, 2); |
| 590 histogram_tester.ExpectBucketCount( | 599 histogram_tester.ExpectBucketCount( |
| 591 "Autofill.Quality.PredictedType.ByFieldType", | 600 "Autofill.Quality.PredictedType.ByFieldType", |
| 592 GetFieldTypeGroupMetric(EMAIL_ADDRESS, AutofillMetrics::TYPE_MATCH), 1); | 601 GetFieldTypeGroupMetric(EMAIL_ADDRESS, AutofillMetrics::TRUE_POSITIVE), |
| 602 1); |
| 593 histogram_tester.ExpectBucketCount( | 603 histogram_tester.ExpectBucketCount( |
| 594 "Autofill.Quality.PredictedType.ByFieldType", | 604 "Autofill.Quality.PredictedType.ByFieldType", |
| 595 GetFieldTypeGroupMetric(PHONE_HOME_WHOLE_NUMBER, | 605 GetFieldTypeGroupMetric(PHONE_HOME_WHOLE_NUMBER, |
| 596 AutofillMetrics::TYPE_MATCH), | 606 AutofillMetrics::TRUE_POSITIVE), |
| 597 1); | 607 1); |
| 598 // Mismatch: | 608 // Mismatch: |
| 599 histogram_tester.ExpectBucketCount("Autofill.Quality.PredictedType", | 609 histogram_tester.ExpectBucketCount("Autofill.Quality.PredictedType", |
| 600 AutofillMetrics::TYPE_MISMATCH, 1); | 610 AutofillMetrics::FALSE_NEGATIVE_MISMATCH, |
| 601 histogram_tester.ExpectBucketCount( | 611 1); |
| 602 "Autofill.Quality.PredictedType.ByFieldType", | 612 histogram_tester.ExpectBucketCount( |
| 603 GetFieldTypeGroupMetric(NAME_FULL, AutofillMetrics::TYPE_MISMATCH), 1); | 613 "Autofill.Quality.PredictedType.ByFieldType", |
| 614 GetFieldTypeGroupMetric(NAME_FULL, |
| 615 AutofillMetrics::FALSE_NEGATIVE_MISMATCH), |
| 616 1); |
| 604 } | 617 } |
| 605 | 618 |
| 606 // Tests the true negatives (empty + no prediction and unknown + no prediction) | 619 // Tests the true negatives (empty + no prediction and unknown + no prediction) |
| 607 // and false positives (empty + bad prediction and unknown + bad prediction) | 620 // and false positives (empty + bad prediction and unknown + bad prediction) |
| 608 // are counted correctly. | 621 // are counted correctly. |
| 609 | 622 |
| 610 struct UnrecognizedOrEmptyFieldsCase { | 623 struct QualityMetricsTestCase { |
| 624 const ServerFieldType predicted_field_type; |
| 611 const ServerFieldType actual_field_type; | 625 const ServerFieldType actual_field_type; |
| 612 const bool make_prediction; | |
| 613 const AutofillMetrics::FieldTypeQualityMetric metric_to_test; | |
| 614 }; | 626 }; |
| 615 | 627 |
| 616 class UnrecognizedOrEmptyFieldsTest | 628 class QualityMetricsTest |
| 617 : public AutofillMetricsTest, | 629 : public AutofillMetricsTest, |
| 618 public testing::WithParamInterface<UnrecognizedOrEmptyFieldsCase> {}; | 630 public testing::WithParamInterface<QualityMetricsTestCase> { |
| 619 | 631 public: |
| 620 TEST_P(UnrecognizedOrEmptyFieldsTest, QualityMetrics) { | 632 const char* ValueForType(ServerFieldType type) { |
| 633 switch (type) { |
| 634 case EMPTY_TYPE: |
| 635 return ""; |
| 636 case UNKNOWN_TYPE: |
| 637 return "unknown"; |
| 638 case COMPANY_NAME: |
| 639 return "Decca"; |
| 640 case NAME_FIRST: |
| 641 return "Elvis"; |
| 642 case NAME_MIDDLE: |
| 643 return "Aaron"; |
| 644 case NAME_LAST: |
| 645 return "Presley"; |
| 646 case NAME_FULL: |
| 647 return "Elvis Aaron Presley"; |
| 648 case EMAIL_ADDRESS: |
| 649 return "buddy@gmail.com"; |
| 650 case PHONE_HOME_NUMBER: |
| 651 case PHONE_HOME_WHOLE_NUMBER: |
| 652 case PHONE_HOME_CITY_AND_NUMBER: |
| 653 return "2345678901"; |
| 654 case ADDRESS_HOME_STREET_ADDRESS: |
| 655 return "123 Apple St.\nunit 6"; |
| 656 case ADDRESS_HOME_LINE1: |
| 657 return "123 Apple St."; |
| 658 case ADDRESS_HOME_LINE2: |
| 659 return "unit 6"; |
| 660 case ADDRESS_HOME_CITY: |
| 661 return "Lubbock"; |
| 662 case ADDRESS_HOME_STATE: |
| 663 return "Texas"; |
| 664 case ADDRESS_HOME_ZIP: |
| 665 return "79401"; |
| 666 case ADDRESS_HOME_COUNTRY: |
| 667 return "US"; |
| 668 default: |
| 669 NOTREACHED(); // Fall through |
| 670 return "unexpected!"; |
| 671 } |
| 672 } |
| 673 |
| 674 bool IsExampleOf(AutofillMetrics::FieldTypeQualityMetric metric, |
| 675 ServerFieldType predicted_type, |
| 676 ServerFieldType actual_type) { |
| 677 switch (metric) { |
| 678 case AutofillMetrics::TRUE_POSITIVE: |
| 679 return actual_type != UNKNOWN_TYPE && actual_type != EMPTY_TYPE && |
| 680 predicted_type == actual_type; |
| 681 |
| 682 case AutofillMetrics::TRUE_NEGATIVE_UNKNOWN: |
| 683 return actual_type == UNKNOWN_TYPE && predicted_type == UNKNOWN_TYPE; |
| 684 |
| 685 case AutofillMetrics::TRUE_NEGATIVE_EMPTY: |
| 686 return actual_type == EMPTY_TYPE && predicted_type == UNKNOWN_TYPE; |
| 687 |
| 688 // False negative mismatch and false positive mismatch trigger on the same |
| 689 // conditions: |
| 690 // - False positive prediction of predicted type |
| 691 // - False negative prediction of actual type |
| 692 case AutofillMetrics::FALSE_POSITIVE_MISMATCH: |
| 693 case AutofillMetrics::FALSE_NEGATIVE_MISMATCH: |
| 694 return actual_type != UNKNOWN_TYPE && actual_type != EMPTY_TYPE && |
| 695 actual_type != predicted_type && predicted_type != UNKNOWN_TYPE; |
| 696 |
| 697 case AutofillMetrics::FALSE_POSITIVE_UNKNOWN: |
| 698 return actual_type == UNKNOWN_TYPE && predicted_type != UNKNOWN_TYPE; |
| 699 |
| 700 case AutofillMetrics::FALSE_POSITIVE_EMPTY: |
| 701 return actual_type == EMPTY_TYPE && predicted_type != UNKNOWN_TYPE; |
| 702 |
| 703 case AutofillMetrics::FALSE_NEGATIVE_UNKNOWN: |
| 704 return actual_type != EMPTY_TYPE && actual_type != UNKNOWN_TYPE && |
| 705 actual_type != predicted_type && predicted_type == UNKNOWN_TYPE; |
| 706 default: |
| 707 NOTREACHED(); |
| 708 } |
| 709 return false; |
| 710 } |
| 711 }; |
| 712 |
| 713 TEST_P(QualityMetricsTest, Classification) { |
| 621 // Setup the test parameters. | 714 // Setup the test parameters. |
| 622 const ServerFieldType actual_field_type = GetParam().actual_field_type; | 715 const ServerFieldType actual_field_type = GetParam().actual_field_type; |
| 623 const ServerFieldType heuristic_type = | 716 const ServerFieldType predicted_type = GetParam().predicted_field_type; |
| 624 GetParam().make_prediction ? EMAIL_ADDRESS : UNKNOWN_TYPE; | 717 |
| 625 const ServerFieldType server_type = | 718 VLOG(2) << "Test Case = Predicted: " |
| 626 GetParam().make_prediction ? EMAIL_ADDRESS : NO_SERVER_DATA; | 719 << AutofillType(predicted_type).ToString() << "; " |
| 627 const AutofillMetrics::FieldTypeQualityMetric metric_to_test = | 720 << "Actual: " << AutofillType(actual_field_type).ToString(); |
| 628 GetParam().metric_to_test; | |
| 629 | 721 |
| 630 // Set up our form data. | 722 // Set up our form data. |
| 631 FormData form; | 723 FormData form; |
| 632 form.name = ASCIIToUTF16("TestForm"); | 724 form.name = ASCIIToUTF16("TestForm"); |
| 633 form.origin = GURL("http://example.com/form.html"); | 725 form.origin = GURL("http://example.com/form.html"); |
| 634 form.action = GURL("http://example.com/submit.html"); | 726 form.action = GURL("http://example.com/submit.html"); |
| 635 | 727 |
| 636 std::vector<ServerFieldType> heuristic_types, server_types; | 728 std::vector<ServerFieldType> heuristic_types, server_types; |
| 637 AutofillField field; | 729 AutofillField field; |
| 638 | 730 |
| 639 // Add a first name field, that is predicted correctly. | 731 // Add a first name field, that is predicted correctly. |
| 640 test::CreateTestFormField("first", "first", "Elvis", "text", &field); | 732 test::CreateTestFormField("first", "first", ValueForType(NAME_FIRST), "text", |
| 641 field.set_possible_types({NAME_FIRST}); | 733 &field); |
| 642 form.fields.push_back(field); | 734 form.fields.push_back(field); |
| 643 heuristic_types.push_back(NAME_FIRST); | 735 heuristic_types.push_back(NAME_FIRST); |
| 644 server_types.push_back(NAME_FIRST); | 736 server_types.push_back(NAME_FIRST); |
| 645 | 737 |
| 646 // Add a last name field, that is predicted correctly. | 738 // Add a last name field, that is predicted correctly. |
| 647 test::CreateTestFormField("last", "last", "Presley", "test", &field); | 739 test::CreateTestFormField("last", "last", ValueForType(NAME_LAST), "test", |
| 648 field.set_possible_types({NAME_LAST}); | 740 &field); |
| 649 form.fields.push_back(field); | 741 form.fields.push_back(field); |
| 650 heuristic_types.push_back(NAME_LAST); | 742 heuristic_types.push_back(NAME_LAST); |
| 651 server_types.push_back(NAME_LAST); | 743 server_types.push_back(NAME_LAST); |
| 652 | 744 |
| 653 // Add an empty or unknown field, that is predicted as per the test params. | 745 // Add an empty or unknown field, that is predicted as per the test params. |
| 654 test::CreateTestFormField("Unknown", "Unknown", | 746 test::CreateTestFormField("Unknown", "Unknown", |
| 655 (actual_field_type == EMPTY_TYPE ? "" : "unknown"), | 747 ValueForType(actual_field_type), "text", &field); |
| 656 "text", &field); | |
| 657 field.set_possible_types({actual_field_type}); | |
| 658 form.fields.push_back(field); | 748 form.fields.push_back(field); |
| 659 heuristic_types.push_back(heuristic_type); | 749 heuristic_types.push_back(predicted_type); |
| 660 server_types.push_back(server_type); | 750 server_types.push_back(predicted_type == UNKNOWN_TYPE ? NO_SERVER_DATA |
| 751 : predicted_type); |
| 661 | 752 |
| 662 // Simulate having seen this form on page load. | 753 // Simulate having seen this form on page load. |
| 663 autofill_manager_->AddSeenForm(form, heuristic_types, server_types); | 754 autofill_manager_->AddSeenForm(form, heuristic_types, server_types); |
| 664 | 755 |
| 665 // Run the form submission code while tracking the histograms. | 756 // Run the form submission code while tracking the histograms. |
| 666 base::HistogramTester histogram_tester; | 757 base::HistogramTester histogram_tester; |
| 667 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 758 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 668 | 759 |
| 669 // Validate the histogram counter values. | 760 // Validate the histogram counter values. |
| 670 for (int i = 0; i < AutofillMetrics::NUM_FIELD_TYPE_QUALITY_METRICS; ++i) { | 761 for (int i = 0; i < AutofillMetrics::NUM_FIELD_TYPE_QUALITY_METRICS; ++i) { |
| 671 // The metric enum value we're currently examining. | 762 // The metric enum value we're currently examining. |
| 672 auto metric = static_cast<AutofillMetrics::FieldTypeQualityMetric>(i); | 763 auto metric = static_cast<AutofillMetrics::FieldTypeQualityMetric>(i); |
| 673 | 764 |
| 674 // For the overall metric counts... | 765 // The type specific expected count is 1 if (predicted, actual) is an |
| 675 // If the current metric is the metric we're testing, then we expect its | 766 // example |
| 676 // count to be 1. Otherwise, the metric's count should be zero (0) except | 767 int basic_expected_count = |
| 677 // for the TYPE_MATCH metric which should be 2 (because of the matching | 768 IsExampleOf(metric, predicted_type, actual_field_type) ? 1 : 0; |
| 678 // first and last name fields) | 769 |
| 679 int overall_expected_count = | 770 // We don't capture aggregate FALSE_POSITIVE_MISMATCH. |
| 680 (metric == metric_to_test) | 771 int aggregate_expected_count = |
| 681 ? 1 | 772 (metric == AutofillMetrics::TRUE_POSITIVE ? 2 : 0) + |
| 682 : ((metric == AutofillMetrics::TYPE_MATCH) ? 2 : 0); | 773 (metric == AutofillMetrics::FALSE_POSITIVE_MISMATCH |
| 774 ? 0 |
| 775 : basic_expected_count); |
| 683 | 776 |
| 684 histogram_tester.ExpectBucketCount("Autofill.Quality.HeuristicType", metric, | 777 histogram_tester.ExpectBucketCount("Autofill.Quality.HeuristicType", metric, |
| 685 overall_expected_count); | 778 aggregate_expected_count); |
| 686 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType", metric, | 779 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType", metric, |
| 687 overall_expected_count); | 780 aggregate_expected_count); |
| 688 histogram_tester.ExpectBucketCount("Autofill.Quality.PredictedType", metric, | 781 histogram_tester.ExpectBucketCount("Autofill.Quality.PredictedType", metric, |
| 689 overall_expected_count); | 782 aggregate_expected_count); |
| 690 | 783 |
| 691 // For the ByFieldType metric counts... | 784 int expected_count_for_actual_type = |
| 692 // We only examine the counter for the field_type being tested. If the | 785 (actual_field_type != UNKNOWN_TYPE && actual_field_type != EMPTY_TYPE && |
| 693 // current metric is the metric we're testing, then we expect its | 786 metric != AutofillMetrics::FALSE_POSITIVE_MISMATCH) |
| 694 // count to be 1 otherwise it should be 0. | 787 ? basic_expected_count |
| 695 int field_type_expected_count = (metric == metric_to_test) ? 1 : 0; | 788 : 0; |
| 789 |
| 790 // For the ByFieldType metric counts for actual_field_type... |
| 791 histogram_tester.ExpectBucketCount( |
| 792 "Autofill.Quality.HeuristicType.ByFieldType", |
| 793 GetFieldTypeGroupMetric(actual_field_type, metric), |
| 794 expected_count_for_actual_type); |
| 795 histogram_tester.ExpectBucketCount( |
| 796 "Autofill.Quality.ServerType.ByFieldType", |
| 797 GetFieldTypeGroupMetric(actual_field_type, metric), |
| 798 expected_count_for_actual_type); |
| 799 histogram_tester.ExpectBucketCount( |
| 800 "Autofill.Quality.PredictedType.ByFieldType", |
| 801 GetFieldTypeGroupMetric(actual_field_type, metric), |
| 802 expected_count_for_actual_type); |
| 803 |
| 804 int expected_count_for_predicted_type = |
| 805 (predicted_type != UNKNOWN_TYPE && |
| 806 metric != AutofillMetrics::FALSE_NEGATIVE_MISMATCH) |
| 807 ? basic_expected_count |
| 808 : 0; |
| 696 | 809 |
| 697 histogram_tester.ExpectBucketCount( | 810 histogram_tester.ExpectBucketCount( |
| 698 "Autofill.Quality.HeuristicType.ByFieldType", | 811 "Autofill.Quality.HeuristicType.ByFieldType", |
| 699 GetFieldTypeGroupMetric(actual_field_type, metric), | 812 GetFieldTypeGroupMetric(predicted_type, metric), |
| 700 field_type_expected_count); | 813 expected_count_for_predicted_type); |
| 701 histogram_tester.ExpectBucketCount( | 814 histogram_tester.ExpectBucketCount( |
| 702 "Autofill.Quality.ServerType.ByFieldType", | 815 "Autofill.Quality.ServerType.ByFieldType", |
| 703 GetFieldTypeGroupMetric(actual_field_type, metric), | 816 GetFieldTypeGroupMetric(predicted_type, metric), |
| 704 field_type_expected_count); | 817 expected_count_for_predicted_type); |
| 705 histogram_tester.ExpectBucketCount( | 818 histogram_tester.ExpectBucketCount( |
| 706 "Autofill.Quality.PredictedType.ByFieldType", | 819 "Autofill.Quality.PredictedType.ByFieldType", |
| 707 GetFieldTypeGroupMetric(actual_field_type, metric), | 820 GetFieldTypeGroupMetric(predicted_type, metric), |
| 708 field_type_expected_count); | 821 expected_count_for_predicted_type); |
| 709 } | 822 } |
| 710 } | 823 } |
| 711 | 824 |
| 712 INSTANTIATE_TEST_CASE_P( | 825 INSTANTIATE_TEST_CASE_P( |
| 713 AutofillMetricsTest, | 826 AutofillMetricsTest, |
| 714 UnrecognizedOrEmptyFieldsTest, | 827 QualityMetricsTest, |
| 715 testing::Values( | 828 testing::Values(QualityMetricsTestCase{UNKNOWN_TYPE, EMPTY_TYPE}, |
| 716 UnrecognizedOrEmptyFieldsCase{EMPTY_TYPE, | 829 QualityMetricsTestCase{UNKNOWN_TYPE, UNKNOWN_TYPE}, |
| 717 /* make_prediction = */ false, | 830 QualityMetricsTestCase{UNKNOWN_TYPE, EMAIL_ADDRESS}, |
| 718 AutofillMetrics::TYPE_MATCH_EMPTY}, | 831 QualityMetricsTestCase{EMAIL_ADDRESS, EMPTY_TYPE}, |
| 719 UnrecognizedOrEmptyFieldsCase{UNKNOWN_TYPE, | 832 QualityMetricsTestCase{EMAIL_ADDRESS, UNKNOWN_TYPE}, |
| 720 /* make_prediction = */ false, | 833 QualityMetricsTestCase{EMAIL_ADDRESS, EMAIL_ADDRESS}, |
| 721 AutofillMetrics::TYPE_MATCH_UNKNOWN}, | 834 QualityMetricsTestCase{EMAIL_ADDRESS, COMPANY_NAME}, |
| 722 UnrecognizedOrEmptyFieldsCase{EMPTY_TYPE, | 835 QualityMetricsTestCase{COMPANY_NAME, EMAIL_ADDRESS})); |
| 723 /* make_prediction = */ true, | |
| 724 AutofillMetrics::TYPE_MISMATCH_EMPTY}, | |
| 725 UnrecognizedOrEmptyFieldsCase{UNKNOWN_TYPE, | |
| 726 /* make_prediction = */ true, | |
| 727 AutofillMetrics::TYPE_MISMATCH_UNKNOWN})); | |
| 728 | 836 |
| 729 // Ensures that metrics that measure timing some important Autofill functions | 837 // Ensures that metrics that measure timing some important Autofill functions |
| 730 // actually are recorded and retrieved. | 838 // actually are recorded and retrieved. |
| 731 TEST_F(AutofillMetricsTest, TimingMetrics) { | 839 TEST_F(AutofillMetricsTest, TimingMetrics) { |
| 732 base::HistogramTester histogram_tester; | 840 base::HistogramTester histogram_tester; |
| 733 | 841 |
| 734 FormData form; | 842 FormData form; |
| 735 form.name = ASCIIToUTF16("TestForm"); | 843 form.name = ASCIIToUTF16("TestForm"); |
| 736 form.origin = GURL("http://example.com/form.html"); | 844 form.origin = GURL("http://example.com/form.html"); |
| 737 form.action = GURL("http://example.com/submit.html"); | 845 form.action = GURL("http://example.com/submit.html"); |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 826 base::HistogramTester histogram_tester; | 934 base::HistogramTester histogram_tester; |
| 827 | 935 |
| 828 autofill_manager_->ResetRunLoop(); | 936 autofill_manager_->ResetRunLoop(); |
| 829 autofill_manager_->Reset(); | 937 autofill_manager_->Reset(); |
| 830 autofill_manager_->RunRunLoop(); | 938 autofill_manager_->RunRunLoop(); |
| 831 | 939 |
| 832 // Heuristic predictions. | 940 // Heuristic predictions. |
| 833 // Unknown: | 941 // Unknown: |
| 834 histogram_tester.ExpectBucketCount( | 942 histogram_tester.ExpectBucketCount( |
| 835 "Autofill.Quality.HeuristicType.NoSubmission", | 943 "Autofill.Quality.HeuristicType.NoSubmission", |
| 836 AutofillMetrics::TYPE_UNKNOWN, 1); | 944 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN, 1); |
| 837 histogram_tester.ExpectBucketCount( | 945 histogram_tester.ExpectBucketCount( |
| 838 "Autofill.Quality.HeuristicType.ByFieldType.NoSubmission", | 946 "Autofill.Quality.HeuristicType.ByFieldType.NoSubmission", |
| 839 GetFieldTypeGroupMetric(ADDRESS_HOME_COUNTRY, | 947 GetFieldTypeGroupMetric(ADDRESS_HOME_COUNTRY, |
| 840 AutofillMetrics::TYPE_UNKNOWN), | 948 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 841 1); | 949 1); |
| 842 // Match: | 950 // Match: |
| 843 histogram_tester.ExpectBucketCount( | 951 histogram_tester.ExpectBucketCount( |
| 844 "Autofill.Quality.HeuristicType.NoSubmission", | 952 "Autofill.Quality.HeuristicType.NoSubmission", |
| 845 AutofillMetrics::TYPE_MATCH, 2); | 953 AutofillMetrics::TRUE_POSITIVE, 2); |
| 846 histogram_tester.ExpectBucketCount( | 954 histogram_tester.ExpectBucketCount( |
| 847 "Autofill.Quality.HeuristicType.ByFieldType.NoSubmission", | 955 "Autofill.Quality.HeuristicType.ByFieldType.NoSubmission", |
| 848 GetFieldTypeGroupMetric(NAME_FULL, AutofillMetrics::TYPE_MATCH), 1); | 956 GetFieldTypeGroupMetric(NAME_FULL, AutofillMetrics::TRUE_POSITIVE), 1); |
| 849 histogram_tester.ExpectBucketCount( | 957 histogram_tester.ExpectBucketCount( |
| 850 "Autofill.Quality.HeuristicType.ByFieldType.NoSubmission", | 958 "Autofill.Quality.HeuristicType.ByFieldType.NoSubmission", |
| 851 GetFieldTypeGroupMetric(PHONE_HOME_WHOLE_NUMBER, | 959 GetFieldTypeGroupMetric(PHONE_HOME_WHOLE_NUMBER, |
| 852 AutofillMetrics::TYPE_MATCH), | 960 AutofillMetrics::TRUE_POSITIVE), |
| 853 1); | 961 1); |
| 854 // Mismatch: | 962 // Mismatch: |
| 855 histogram_tester.ExpectBucketCount( | 963 histogram_tester.ExpectBucketCount( |
| 856 "Autofill.Quality.HeuristicType.NoSubmission", | 964 "Autofill.Quality.HeuristicType.NoSubmission", |
| 857 AutofillMetrics::TYPE_MISMATCH, 1); | 965 AutofillMetrics::FALSE_NEGATIVE_MISMATCH, 1); |
| 858 histogram_tester.ExpectBucketCount( | 966 histogram_tester.ExpectBucketCount( |
| 859 "Autofill.Quality.HeuristicType.ByFieldType.NoSubmission", | 967 "Autofill.Quality.HeuristicType.ByFieldType.NoSubmission", |
| 860 GetFieldTypeGroupMetric(EMAIL_ADDRESS, AutofillMetrics::TYPE_MISMATCH), | 968 GetFieldTypeGroupMetric(EMAIL_ADDRESS, |
| 969 AutofillMetrics::FALSE_NEGATIVE_MISMATCH), |
| 861 1); | 970 1); |
| 862 | 971 |
| 863 // Server predictions: | 972 // Server predictions: |
| 864 // Unknown: | 973 // Unknown: |
| 865 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType.NoSubmission", | 974 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType.NoSubmission", |
| 866 AutofillMetrics::TYPE_UNKNOWN, 1); | 975 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN, |
| 976 1); |
| 867 histogram_tester.ExpectBucketCount( | 977 histogram_tester.ExpectBucketCount( |
| 868 "Autofill.Quality.ServerType.ByFieldType.NoSubmission", | 978 "Autofill.Quality.ServerType.ByFieldType.NoSubmission", |
| 869 GetFieldTypeGroupMetric(ADDRESS_HOME_COUNTRY, | 979 GetFieldTypeGroupMetric(ADDRESS_HOME_COUNTRY, |
| 870 AutofillMetrics::TYPE_UNKNOWN), | 980 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 871 1); | 981 1); |
| 872 // Match: | 982 // Match: |
| 873 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType.NoSubmission", | 983 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType.NoSubmission", |
| 874 AutofillMetrics::TYPE_MATCH, 2); | 984 AutofillMetrics::TRUE_POSITIVE, 2); |
| 875 histogram_tester.ExpectBucketCount( | 985 histogram_tester.ExpectBucketCount( |
| 876 "Autofill.Quality.ServerType.ByFieldType.NoSubmission", | 986 "Autofill.Quality.ServerType.ByFieldType.NoSubmission", |
| 877 GetFieldTypeGroupMetric(EMAIL_ADDRESS, AutofillMetrics::TYPE_MATCH), 1); | 987 GetFieldTypeGroupMetric(EMAIL_ADDRESS, AutofillMetrics::TRUE_POSITIVE), |
| 988 1); |
| 878 histogram_tester.ExpectBucketCount( | 989 histogram_tester.ExpectBucketCount( |
| 879 "Autofill.Quality.ServerType.ByFieldType.NoSubmission", | 990 "Autofill.Quality.ServerType.ByFieldType.NoSubmission", |
| 880 GetFieldTypeGroupMetric(PHONE_HOME_WHOLE_NUMBER, | 991 GetFieldTypeGroupMetric(PHONE_HOME_WHOLE_NUMBER, |
| 881 AutofillMetrics::TYPE_MATCH), | 992 AutofillMetrics::TRUE_POSITIVE), |
| 882 1); | 993 1); |
| 883 // Mismatch: | 994 // Mismatch: |
| 884 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType.NoSubmission", | 995 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType.NoSubmission", |
| 885 AutofillMetrics::TYPE_MISMATCH, 1); | 996 AutofillMetrics::FALSE_NEGATIVE_MISMATCH, |
| 997 1); |
| 886 histogram_tester.ExpectBucketCount( | 998 histogram_tester.ExpectBucketCount( |
| 887 "Autofill.Quality.ServerType.ByFieldType.NoSubmission", | 999 "Autofill.Quality.ServerType.ByFieldType.NoSubmission", |
| 888 GetFieldTypeGroupMetric(NAME_FULL, AutofillMetrics::TYPE_MISMATCH), 1); | 1000 GetFieldTypeGroupMetric(NAME_FULL, |
| 1001 AutofillMetrics::FALSE_NEGATIVE_MISMATCH), |
| 1002 1); |
| 889 | 1003 |
| 890 // Overall predictions: | 1004 // Overall predictions: |
| 891 // Unknown: | 1005 // Unknown: |
| 892 histogram_tester.ExpectBucketCount( | 1006 histogram_tester.ExpectBucketCount( |
| 893 "Autofill.Quality.PredictedType.NoSubmission", | 1007 "Autofill.Quality.PredictedType.NoSubmission", |
| 894 AutofillMetrics::TYPE_UNKNOWN, 1); | 1008 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN, 1); |
| 895 histogram_tester.ExpectBucketCount( | 1009 histogram_tester.ExpectBucketCount( |
| 896 "Autofill.Quality.PredictedType.ByFieldType.NoSubmission", | 1010 "Autofill.Quality.PredictedType.ByFieldType.NoSubmission", |
| 897 GetFieldTypeGroupMetric(ADDRESS_HOME_COUNTRY, | 1011 GetFieldTypeGroupMetric(ADDRESS_HOME_COUNTRY, |
| 898 AutofillMetrics::TYPE_UNKNOWN), | 1012 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 899 1); | 1013 1); |
| 900 // Match: | 1014 // Match: |
| 901 histogram_tester.ExpectBucketCount( | 1015 histogram_tester.ExpectBucketCount( |
| 902 "Autofill.Quality.PredictedType.NoSubmission", | 1016 "Autofill.Quality.PredictedType.NoSubmission", |
| 903 AutofillMetrics::TYPE_MATCH, 2); | 1017 AutofillMetrics::TRUE_POSITIVE, 2); |
| 904 histogram_tester.ExpectBucketCount( | 1018 histogram_tester.ExpectBucketCount( |
| 905 "Autofill.Quality.PredictedType.ByFieldType.NoSubmission", | 1019 "Autofill.Quality.PredictedType.ByFieldType.NoSubmission", |
| 906 GetFieldTypeGroupMetric(EMAIL_ADDRESS, AutofillMetrics::TYPE_MATCH), 1); | 1020 GetFieldTypeGroupMetric(EMAIL_ADDRESS, AutofillMetrics::TRUE_POSITIVE), |
| 1021 1); |
| 907 histogram_tester.ExpectBucketCount( | 1022 histogram_tester.ExpectBucketCount( |
| 908 "Autofill.Quality.PredictedType.ByFieldType.NoSubmission", | 1023 "Autofill.Quality.PredictedType.ByFieldType.NoSubmission", |
| 909 GetFieldTypeGroupMetric(PHONE_HOME_WHOLE_NUMBER, | 1024 GetFieldTypeGroupMetric(PHONE_HOME_WHOLE_NUMBER, |
| 910 AutofillMetrics::TYPE_MATCH), | 1025 AutofillMetrics::TRUE_POSITIVE), |
| 911 1); | 1026 1); |
| 912 // Mismatch: | 1027 // Mismatch: |
| 913 histogram_tester.ExpectBucketCount( | 1028 histogram_tester.ExpectBucketCount( |
| 914 "Autofill.Quality.PredictedType.NoSubmission", | 1029 "Autofill.Quality.PredictedType.NoSubmission", |
| 915 AutofillMetrics::TYPE_MISMATCH, 1); | 1030 AutofillMetrics::FALSE_NEGATIVE_MISMATCH, 1); |
| 916 histogram_tester.ExpectBucketCount( | 1031 histogram_tester.ExpectBucketCount( |
| 917 "Autofill.Quality.PredictedType.ByFieldType.NoSubmission", | 1032 "Autofill.Quality.PredictedType.ByFieldType.NoSubmission", |
| 918 GetFieldTypeGroupMetric(NAME_FULL, AutofillMetrics::TYPE_MISMATCH), 1); | 1033 GetFieldTypeGroupMetric(NAME_FULL, |
| 1034 AutofillMetrics::FALSE_NEGATIVE_MISMATCH), |
| 1035 1); |
| 919 } | 1036 } |
| 920 | 1037 |
| 921 // Test that we log quality metrics for heuristics and server predictions based | 1038 // Test that we log quality metrics for heuristics and server predictions based |
| 922 // on autocomplete attributes present on the fields. | 1039 // on autocomplete attributes present on the fields. |
| 923 TEST_F(AutofillMetricsTest, QualityMetrics_BasedOnAutocomplete) { | 1040 TEST_F(AutofillMetricsTest, QualityMetrics_BasedOnAutocomplete) { |
| 924 FormData form; | 1041 FormData form; |
| 925 form.name = ASCIIToUTF16("MyForm"); | 1042 form.name = ASCIIToUTF16("MyForm"); |
| 926 form.origin = GURL("http://myform.com/form.html"); | 1043 form.origin = GURL("http://myform.com/form.html"); |
| 927 form.action = GURL("http://myform.com/submit.html"); | 1044 form.action = GURL("http://myform.com/submit.html"); |
| 928 | 1045 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 983 EXPECT_EQ(NAME_LAST, form_structure_ptr->field(0)->Type().GetStorableType()); | 1100 EXPECT_EQ(NAME_LAST, form_structure_ptr->field(0)->Type().GetStorableType()); |
| 984 EXPECT_EQ(NAME_MIDDLE, | 1101 EXPECT_EQ(NAME_MIDDLE, |
| 985 form_structure_ptr->field(1)->Type().GetStorableType()); | 1102 form_structure_ptr->field(1)->Type().GetStorableType()); |
| 986 EXPECT_EQ(ADDRESS_HOME_ZIP, | 1103 EXPECT_EQ(ADDRESS_HOME_ZIP, |
| 987 form_structure_ptr->field(2)->Type().GetStorableType()); | 1104 form_structure_ptr->field(2)->Type().GetStorableType()); |
| 988 | 1105 |
| 989 // Heuristic predictions. | 1106 // Heuristic predictions. |
| 990 // Unknown: | 1107 // Unknown: |
| 991 histogram_tester.ExpectBucketCount( | 1108 histogram_tester.ExpectBucketCount( |
| 992 "Autofill.Quality.HeuristicType.BasedOnAutocomplete", | 1109 "Autofill.Quality.HeuristicType.BasedOnAutocomplete", |
| 993 AutofillMetrics::TYPE_UNKNOWN, 1); | 1110 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN, 1); |
| 994 histogram_tester.ExpectBucketCount( | 1111 histogram_tester.ExpectBucketCount( |
| 995 "Autofill.Quality.HeuristicType.ByFieldType.BasedOnAutocomplete", | 1112 "Autofill.Quality.HeuristicType.ByFieldType.BasedOnAutocomplete", |
| 996 GetFieldTypeGroupMetric(ADDRESS_HOME_ZIP, AutofillMetrics::TYPE_UNKNOWN), | 1113 GetFieldTypeGroupMetric(ADDRESS_HOME_ZIP, |
| 1114 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 997 1); | 1115 1); |
| 998 // Match: | 1116 // Match: |
| 999 histogram_tester.ExpectBucketCount( | 1117 histogram_tester.ExpectBucketCount( |
| 1000 "Autofill.Quality.HeuristicType.BasedOnAutocomplete", | 1118 "Autofill.Quality.HeuristicType.BasedOnAutocomplete", |
| 1001 AutofillMetrics::TYPE_MATCH, 1); | 1119 AutofillMetrics::TRUE_POSITIVE, 1); |
| 1002 histogram_tester.ExpectBucketCount( | 1120 histogram_tester.ExpectBucketCount( |
| 1003 "Autofill.Quality.HeuristicType.ByFieldType.BasedOnAutocomplete", | 1121 "Autofill.Quality.HeuristicType.ByFieldType.BasedOnAutocomplete", |
| 1004 GetFieldTypeGroupMetric(NAME_LAST, AutofillMetrics::TYPE_MATCH), 1); | 1122 GetFieldTypeGroupMetric(NAME_LAST, AutofillMetrics::TRUE_POSITIVE), 1); |
| 1005 // Mismatch: | 1123 // Mismatch: |
| 1006 histogram_tester.ExpectBucketCount( | 1124 histogram_tester.ExpectBucketCount( |
| 1007 "Autofill.Quality.HeuristicType.BasedOnAutocomplete", | 1125 "Autofill.Quality.HeuristicType.BasedOnAutocomplete", |
| 1008 AutofillMetrics::TYPE_MISMATCH, 1); | 1126 AutofillMetrics::FALSE_NEGATIVE_MISMATCH, 1); |
| 1009 histogram_tester.ExpectBucketCount( | 1127 histogram_tester.ExpectBucketCount( |
| 1010 "Autofill.Quality.HeuristicType.ByFieldType.BasedOnAutocomplete", | 1128 "Autofill.Quality.HeuristicType.ByFieldType.BasedOnAutocomplete", |
| 1011 GetFieldTypeGroupMetric(NAME_MIDDLE, AutofillMetrics::TYPE_MISMATCH), 1); | 1129 GetFieldTypeGroupMetric(NAME_MIDDLE, |
| 1130 AutofillMetrics::FALSE_NEGATIVE_MISMATCH), |
| 1131 1); |
| 1012 | 1132 |
| 1013 // Server predictions. | 1133 // Server predictions. |
| 1014 // Unknown: | 1134 // Unknown: |
| 1015 histogram_tester.ExpectBucketCount( | 1135 histogram_tester.ExpectBucketCount( |
| 1016 "Autofill.Quality.ServerType.BasedOnAutocomplete", | 1136 "Autofill.Quality.ServerType.BasedOnAutocomplete", |
| 1017 AutofillMetrics::TYPE_UNKNOWN, 1); | 1137 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN, 1); |
| 1018 histogram_tester.ExpectBucketCount( | 1138 histogram_tester.ExpectBucketCount( |
| 1019 "Autofill.Quality.ServerType.ByFieldType.BasedOnAutocomplete", | 1139 "Autofill.Quality.ServerType.ByFieldType.BasedOnAutocomplete", |
| 1020 GetFieldTypeGroupMetric(ADDRESS_HOME_ZIP, AutofillMetrics::TYPE_UNKNOWN), | 1140 GetFieldTypeGroupMetric(ADDRESS_HOME_ZIP, |
| 1141 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 1021 1); | 1142 1); |
| 1022 // Match: | 1143 // Match: |
| 1023 histogram_tester.ExpectBucketCount( | 1144 histogram_tester.ExpectBucketCount( |
| 1024 "Autofill.Quality.ServerType.BasedOnAutocomplete", | 1145 "Autofill.Quality.ServerType.BasedOnAutocomplete", |
| 1025 AutofillMetrics::TYPE_MATCH, 1); | 1146 AutofillMetrics::TRUE_POSITIVE, 1); |
| 1026 histogram_tester.ExpectBucketCount( | 1147 histogram_tester.ExpectBucketCount( |
| 1027 "Autofill.Quality.ServerType.ByFieldType.BasedOnAutocomplete", | 1148 "Autofill.Quality.ServerType.ByFieldType.BasedOnAutocomplete", |
| 1028 GetFieldTypeGroupMetric(NAME_LAST, AutofillMetrics::TYPE_MATCH), 1); | 1149 GetFieldTypeGroupMetric(NAME_LAST, AutofillMetrics::TRUE_POSITIVE), 1); |
| 1029 // Mismatch: | 1150 // Mismatch: |
| 1030 histogram_tester.ExpectBucketCount( | 1151 histogram_tester.ExpectBucketCount( |
| 1031 "Autofill.Quality.ServerType.BasedOnAutocomplete", | 1152 "Autofill.Quality.ServerType.BasedOnAutocomplete", |
| 1032 AutofillMetrics::TYPE_MISMATCH, 1); | 1153 AutofillMetrics::FALSE_NEGATIVE_MISMATCH, 1); |
| 1033 histogram_tester.ExpectBucketCount( | 1154 histogram_tester.ExpectBucketCount( |
| 1034 "Autofill.Quality.ServerType.ByFieldType.BasedOnAutocomplete", | 1155 "Autofill.Quality.ServerType.ByFieldType.BasedOnAutocomplete", |
| 1035 GetFieldTypeGroupMetric(NAME_MIDDLE, AutofillMetrics::TYPE_MISMATCH), 1); | 1156 GetFieldTypeGroupMetric(NAME_MIDDLE, |
| 1157 AutofillMetrics::FALSE_NEGATIVE_MISMATCH), |
| 1158 1); |
| 1036 } | 1159 } |
| 1037 | 1160 |
| 1038 // Test that we log UPI Virtual Payment Address. | 1161 // Test that we log UPI Virtual Payment Address. |
| 1039 TEST_F(AutofillMetricsTest, UpiVirtualPaymentAddress) { | 1162 TEST_F(AutofillMetricsTest, UpiVirtualPaymentAddress) { |
| 1040 // Set up our form data. | 1163 // Set up our form data. |
| 1041 FormData form; | 1164 FormData form; |
| 1042 form.name = ASCIIToUTF16("TestForm"); | 1165 form.name = ASCIIToUTF16("TestForm"); |
| 1043 form.origin = GURL("http://example.com/form.html"); | 1166 form.origin = GURL("http://example.com/form.html"); |
| 1044 form.action = GURL("http://example.com/submit.html"); | 1167 form.action = GURL("http://example.com/submit.html"); |
| 1045 | 1168 |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1299 // (hence the values are not cleared in UpdateFromCache). The new values | 1422 // (hence the values are not cleared in UpdateFromCache). The new values |
| 1300 // match what is in the test profile. | 1423 // match what is in the test profile. |
| 1301 form.fields[1].value = base::ASCIIToUTF16("79401"); | 1424 form.fields[1].value = base::ASCIIToUTF16("79401"); |
| 1302 form.fields[2].value = base::ASCIIToUTF16("2345678901"); | 1425 form.fields[2].value = base::ASCIIToUTF16("2345678901"); |
| 1303 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 1426 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 1304 | 1427 |
| 1305 // First verify that country was not predicted by client or server. | 1428 // First verify that country was not predicted by client or server. |
| 1306 histogram_tester.ExpectBucketCount( | 1429 histogram_tester.ExpectBucketCount( |
| 1307 "Autofill.Quality.ServerType.ByFieldType", | 1430 "Autofill.Quality.ServerType.ByFieldType", |
| 1308 GetFieldTypeGroupMetric(ADDRESS_HOME_COUNTRY, | 1431 GetFieldTypeGroupMetric(ADDRESS_HOME_COUNTRY, |
| 1309 AutofillMetrics::TYPE_UNKNOWN), | 1432 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 1310 1); | 1433 1); |
| 1311 histogram_tester.ExpectBucketCount( | 1434 histogram_tester.ExpectBucketCount( |
| 1312 "Autofill.Quality.HeuristicType.ByFieldType", | 1435 "Autofill.Quality.HeuristicType.ByFieldType", |
| 1313 GetFieldTypeGroupMetric(ADDRESS_HOME_COUNTRY, | 1436 GetFieldTypeGroupMetric(ADDRESS_HOME_COUNTRY, |
| 1314 AutofillMetrics::TYPE_UNKNOWN), | 1437 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 1315 1); | 1438 1); |
| 1316 // We expect a match for country because it had |autocomplete_attribute|. | 1439 // We expect a match for country because it had |autocomplete_attribute|. |
| 1317 histogram_tester.ExpectBucketCount( | 1440 histogram_tester.ExpectBucketCount( |
| 1318 "Autofill.Quality.PredictedType.ByFieldType", | 1441 "Autofill.Quality.PredictedType.ByFieldType", |
| 1319 GetFieldTypeGroupMetric(ADDRESS_HOME_COUNTRY, | 1442 GetFieldTypeGroupMetric(ADDRESS_HOME_COUNTRY, |
| 1320 AutofillMetrics::TYPE_MATCH), | 1443 AutofillMetrics::TRUE_POSITIVE), |
| 1321 1); | 1444 1); |
| 1322 | 1445 |
| 1323 // We did not predict zip code or phone number, because they did not have | 1446 // We did not predict zip code or phone number, because they did not have |
| 1324 // |autocomplete_attribute|, nor client or server predictions. | 1447 // |autocomplete_attribute|, nor client or server predictions. |
| 1325 histogram_tester.ExpectBucketCount( | 1448 histogram_tester.ExpectBucketCount( |
| 1326 "Autofill.Quality.ServerType.ByFieldType", | 1449 "Autofill.Quality.ServerType.ByFieldType", |
| 1327 GetFieldTypeGroupMetric(ADDRESS_HOME_ZIP, | 1450 GetFieldTypeGroupMetric(ADDRESS_HOME_ZIP, |
| 1328 AutofillMetrics::TYPE_UNKNOWN), | 1451 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 1329 1); | 1452 1); |
| 1330 histogram_tester.ExpectBucketCount( | 1453 histogram_tester.ExpectBucketCount( |
| 1331 "Autofill.Quality.HeuristicType.ByFieldType", | 1454 "Autofill.Quality.HeuristicType.ByFieldType", |
| 1332 GetFieldTypeGroupMetric(ADDRESS_HOME_ZIP, | 1455 GetFieldTypeGroupMetric(ADDRESS_HOME_ZIP, |
| 1333 AutofillMetrics::TYPE_UNKNOWN), | 1456 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 1334 1); | 1457 1); |
| 1335 histogram_tester.ExpectBucketCount( | 1458 histogram_tester.ExpectBucketCount( |
| 1336 "Autofill.Quality.PredictedType.ByFieldType", | 1459 "Autofill.Quality.PredictedType.ByFieldType", |
| 1337 GetFieldTypeGroupMetric(ADDRESS_HOME_ZIP, | 1460 GetFieldTypeGroupMetric(ADDRESS_HOME_ZIP, |
| 1338 AutofillMetrics::TYPE_UNKNOWN), | 1461 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 1339 1); | 1462 1); |
| 1340 histogram_tester.ExpectBucketCount( | 1463 histogram_tester.ExpectBucketCount( |
| 1341 "Autofill.Quality.ServerType.ByFieldType", | 1464 "Autofill.Quality.ServerType.ByFieldType", |
| 1342 GetFieldTypeGroupMetric(PHONE_HOME_WHOLE_NUMBER, | 1465 GetFieldTypeGroupMetric(PHONE_HOME_WHOLE_NUMBER, |
| 1343 AutofillMetrics::TYPE_UNKNOWN), | 1466 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 1344 1); | 1467 1); |
| 1345 histogram_tester.ExpectBucketCount( | 1468 histogram_tester.ExpectBucketCount( |
| 1346 "Autofill.Quality.HeuristicType.ByFieldType", | 1469 "Autofill.Quality.HeuristicType.ByFieldType", |
| 1347 GetFieldTypeGroupMetric(PHONE_HOME_WHOLE_NUMBER, | 1470 GetFieldTypeGroupMetric(PHONE_HOME_WHOLE_NUMBER, |
| 1348 AutofillMetrics::TYPE_UNKNOWN), | 1471 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 1349 1); | 1472 1); |
| 1350 histogram_tester.ExpectBucketCount( | 1473 histogram_tester.ExpectBucketCount( |
| 1351 "Autofill.Quality.PredictedType.ByFieldType", | 1474 "Autofill.Quality.PredictedType.ByFieldType", |
| 1352 GetFieldTypeGroupMetric(PHONE_HOME_WHOLE_NUMBER, | 1475 GetFieldTypeGroupMetric(PHONE_HOME_WHOLE_NUMBER, |
| 1353 AutofillMetrics::TYPE_UNKNOWN), | 1476 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 1354 1); | 1477 1); |
| 1355 | 1478 |
| 1356 // Sanity check. | 1479 // Sanity check. |
| 1357 histogram_tester.ExpectTotalCount("Autofill.Quality.PredictedType", 3); | 1480 histogram_tester.ExpectTotalCount("Autofill.Quality.PredictedType", 3); |
| 1358 } | 1481 } |
| 1359 } | 1482 } |
| 1360 | 1483 |
| 1361 // Test that we behave sanely when the cached form differs from the submitted | 1484 // Test that we behave sanely when the cached form differs from the submitted |
| 1362 // one. | 1485 // one. |
| 1363 TEST_F(AutofillMetricsTest, SaneMetricsWithCacheMismatch) { | 1486 TEST_F(AutofillMetricsTest, SaneMetricsWithCacheMismatch) { |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1410 form.fields.push_back(cached_fields[3]); | 1533 form.fields.push_back(cached_fields[3]); |
| 1411 form.fields.push_back(cached_fields[0]); | 1534 form.fields.push_back(cached_fields[0]); |
| 1412 | 1535 |
| 1413 // Simulate form submission. | 1536 // Simulate form submission. |
| 1414 base::HistogramTester histogram_tester; | 1537 base::HistogramTester histogram_tester; |
| 1415 autofill_manager_->SubmitForm(form, TimeTicks::Now()); | 1538 autofill_manager_->SubmitForm(form, TimeTicks::Now()); |
| 1416 | 1539 |
| 1417 // Heuristic predictions. | 1540 // Heuristic predictions. |
| 1418 // Unknown: | 1541 // Unknown: |
| 1419 histogram_tester.ExpectBucketCount("Autofill.Quality.HeuristicType", | 1542 histogram_tester.ExpectBucketCount("Autofill.Quality.HeuristicType", |
| 1420 AutofillMetrics::TYPE_UNKNOWN, 1); | 1543 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN, |
| 1544 1); |
| 1421 histogram_tester.ExpectBucketCount( | 1545 histogram_tester.ExpectBucketCount( |
| 1422 "Autofill.Quality.HeuristicType.ByFieldType", | 1546 "Autofill.Quality.HeuristicType.ByFieldType", |
| 1423 GetFieldTypeGroupMetric(ADDRESS_HOME_STATE, | 1547 GetFieldTypeGroupMetric(ADDRESS_HOME_STATE, |
| 1424 AutofillMetrics::TYPE_UNKNOWN), | 1548 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 1425 1); | 1549 1); |
| 1426 // Match: | 1550 // Match: |
| 1427 histogram_tester.ExpectBucketCount("Autofill.Quality.HeuristicType", | 1551 histogram_tester.ExpectBucketCount("Autofill.Quality.HeuristicType", |
| 1428 AutofillMetrics::TYPE_MATCH, 2); | 1552 AutofillMetrics::TRUE_POSITIVE, 2); |
| 1429 histogram_tester.ExpectBucketCount( | 1553 histogram_tester.ExpectBucketCount( |
| 1430 "Autofill.Quality.HeuristicType.ByFieldType", | 1554 "Autofill.Quality.HeuristicType.ByFieldType", |
| 1431 GetFieldTypeGroupMetric(ADDRESS_HOME_CITY, AutofillMetrics::TYPE_MATCH), | 1555 GetFieldTypeGroupMetric(ADDRESS_HOME_CITY, |
| 1556 AutofillMetrics::TRUE_POSITIVE), |
| 1432 1); | 1557 1); |
| 1433 histogram_tester.ExpectBucketCount( | 1558 histogram_tester.ExpectBucketCount( |
| 1434 "Autofill.Quality.HeuristicType.ByFieldType", | 1559 "Autofill.Quality.HeuristicType.ByFieldType", |
| 1435 GetFieldTypeGroupMetric(NAME_FULL, AutofillMetrics::TYPE_MATCH), 1); | 1560 GetFieldTypeGroupMetric(NAME_FULL, AutofillMetrics::TRUE_POSITIVE), 1); |
| 1436 // Mismatch: | 1561 // Mismatch: |
| 1437 histogram_tester.ExpectBucketCount("Autofill.Quality.HeuristicType", | 1562 histogram_tester.ExpectBucketCount("Autofill.Quality.HeuristicType", |
| 1438 AutofillMetrics::TYPE_MISMATCH, 1); | 1563 AutofillMetrics::FALSE_NEGATIVE_MISMATCH, |
| 1564 1); |
| 1439 histogram_tester.ExpectBucketCount( | 1565 histogram_tester.ExpectBucketCount( |
| 1440 "Autofill.Quality.HeuristicType.ByFieldType", | 1566 "Autofill.Quality.HeuristicType.ByFieldType", |
| 1441 GetFieldTypeGroupMetric(EMAIL_ADDRESS, AutofillMetrics::TYPE_MISMATCH), | 1567 GetFieldTypeGroupMetric(EMAIL_ADDRESS, |
| 1568 AutofillMetrics::FALSE_NEGATIVE_MISMATCH), |
| 1442 1); | 1569 1); |
| 1443 | 1570 |
| 1444 // Server predictions: | 1571 // Server predictions: |
| 1445 // Unknown: | 1572 // Unknown: |
| 1446 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType", | 1573 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType", |
| 1447 AutofillMetrics::TYPE_UNKNOWN, 1); | 1574 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN, |
| 1575 1); |
| 1448 histogram_tester.ExpectBucketCount( | 1576 histogram_tester.ExpectBucketCount( |
| 1449 "Autofill.Quality.ServerType.ByFieldType", | 1577 "Autofill.Quality.ServerType.ByFieldType", |
| 1450 GetFieldTypeGroupMetric(ADDRESS_HOME_STATE, | 1578 GetFieldTypeGroupMetric(ADDRESS_HOME_STATE, |
| 1451 AutofillMetrics::TYPE_UNKNOWN), | 1579 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 1452 1); | 1580 1); |
| 1453 // Match: | 1581 // Match: |
| 1454 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType", | 1582 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType", |
| 1455 AutofillMetrics::TYPE_MATCH, 1); | 1583 AutofillMetrics::TRUE_POSITIVE, 1); |
| 1456 histogram_tester.ExpectBucketCount( | 1584 histogram_tester.ExpectBucketCount( |
| 1457 "Autofill.Quality.ServerType.ByFieldType", | 1585 "Autofill.Quality.ServerType.ByFieldType", |
| 1458 GetFieldTypeGroupMetric(NAME_FULL, AutofillMetrics::TYPE_MATCH), 1); | 1586 GetFieldTypeGroupMetric(NAME_FULL, AutofillMetrics::TRUE_POSITIVE), 1); |
| 1459 // Mismatch: | 1587 // Mismatch: |
| 1460 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType", | 1588 histogram_tester.ExpectBucketCount("Autofill.Quality.ServerType", |
| 1461 AutofillMetrics::TYPE_MISMATCH, 2); | 1589 AutofillMetrics::FALSE_NEGATIVE_MISMATCH, |
| 1590 2); |
| 1462 histogram_tester.ExpectBucketCount( | 1591 histogram_tester.ExpectBucketCount( |
| 1463 "Autofill.Quality.ServerType.ByFieldType", | 1592 "Autofill.Quality.ServerType.ByFieldType", |
| 1464 GetFieldTypeGroupMetric(ADDRESS_HOME_CITY, | 1593 GetFieldTypeGroupMetric(ADDRESS_HOME_CITY, |
| 1465 AutofillMetrics::TYPE_MISMATCH), | 1594 AutofillMetrics::FALSE_NEGATIVE_MISMATCH), |
| 1466 1); | 1595 1); |
| 1467 histogram_tester.ExpectBucketCount( | 1596 histogram_tester.ExpectBucketCount( |
| 1468 "Autofill.Quality.ServerType.ByFieldType", | 1597 "Autofill.Quality.ServerType.ByFieldType", |
| 1469 GetFieldTypeGroupMetric(EMAIL_ADDRESS, AutofillMetrics::TYPE_MISMATCH), | 1598 GetFieldTypeGroupMetric(EMAIL_ADDRESS, |
| 1599 AutofillMetrics::FALSE_NEGATIVE_MISMATCH), |
| 1470 1); | 1600 1); |
| 1471 | 1601 |
| 1472 // Overall predictions: | 1602 // Overall predictions: |
| 1473 // Unknown: | 1603 // Unknown: |
| 1474 histogram_tester.ExpectBucketCount("Autofill.Quality.PredictedType", | 1604 histogram_tester.ExpectBucketCount("Autofill.Quality.PredictedType", |
| 1475 AutofillMetrics::TYPE_UNKNOWN, 1); | 1605 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN, |
| 1606 1); |
| 1476 histogram_tester.ExpectBucketCount( | 1607 histogram_tester.ExpectBucketCount( |
| 1477 "Autofill.Quality.PredictedType.ByFieldType", | 1608 "Autofill.Quality.PredictedType.ByFieldType", |
| 1478 GetFieldTypeGroupMetric(ADDRESS_HOME_STATE, | 1609 GetFieldTypeGroupMetric(ADDRESS_HOME_STATE, |
| 1479 AutofillMetrics::TYPE_UNKNOWN), | 1610 AutofillMetrics::FALSE_NEGATIVE_UNKNOWN), |
| 1480 1); | 1611 1); |
| 1481 // Match: | 1612 // Match: |
| 1482 histogram_tester.ExpectBucketCount("Autofill.Quality.PredictedType", | 1613 histogram_tester.ExpectBucketCount("Autofill.Quality.PredictedType", |
| 1483 AutofillMetrics::TYPE_MATCH, 1); | 1614 AutofillMetrics::TRUE_POSITIVE, 1); |
| 1484 histogram_tester.ExpectBucketCount( | 1615 histogram_tester.ExpectBucketCount( |
| 1485 "Autofill.Quality.PredictedType.ByFieldType", | 1616 "Autofill.Quality.PredictedType.ByFieldType", |
| 1486 GetFieldTypeGroupMetric(NAME_FULL, AutofillMetrics::TYPE_MATCH), 1); | 1617 GetFieldTypeGroupMetric(NAME_FULL, AutofillMetrics::TRUE_POSITIVE), 1); |
| 1487 // Mismatch: | 1618 // Mismatch: |
| 1488 histogram_tester.ExpectBucketCount("Autofill.Quality.PredictedType", | 1619 histogram_tester.ExpectBucketCount("Autofill.Quality.PredictedType", |
| 1489 AutofillMetrics::TYPE_MISMATCH, 2); | 1620 AutofillMetrics::FALSE_NEGATIVE_MISMATCH, |
| 1621 2); |
| 1490 histogram_tester.ExpectBucketCount( | 1622 histogram_tester.ExpectBucketCount( |
| 1491 "Autofill.Quality.PredictedType.ByFieldType", | 1623 "Autofill.Quality.PredictedType.ByFieldType", |
| 1492 GetFieldTypeGroupMetric(ADDRESS_HOME_CITY, | 1624 GetFieldTypeGroupMetric(ADDRESS_HOME_CITY, |
| 1493 AutofillMetrics::TYPE_MISMATCH), | 1625 AutofillMetrics::FALSE_NEGATIVE_MISMATCH), |
| 1494 1); | 1626 1); |
| 1495 histogram_tester.ExpectBucketCount( | 1627 histogram_tester.ExpectBucketCount( |
| 1496 "Autofill.Quality.PredictedType.ByFieldType", | 1628 "Autofill.Quality.PredictedType.ByFieldType", |
| 1497 GetFieldTypeGroupMetric(EMAIL_ADDRESS, AutofillMetrics::TYPE_MISMATCH), | 1629 GetFieldTypeGroupMetric(EMAIL_ADDRESS, |
| 1630 AutofillMetrics::FALSE_NEGATIVE_MISMATCH), |
| 1498 1); | 1631 1); |
| 1499 } | 1632 } |
| 1500 | 1633 |
| 1501 // Verify that when submitting an autofillable form, the stored profile metric | 1634 // Verify that when submitting an autofillable form, the stored profile metric |
| 1502 // is logged. | 1635 // is logged. |
| 1503 TEST_F(AutofillMetricsTest, StoredProfileCountAutofillableFormSubmission) { | 1636 TEST_F(AutofillMetricsTest, StoredProfileCountAutofillableFormSubmission) { |
| 1504 // Construct a fillable form. | 1637 // Construct a fillable form. |
| 1505 FormData form; | 1638 FormData form; |
| 1506 form.name = ASCIIToUTF16("TestForm"); | 1639 form.name = ASCIIToUTF16("TestForm"); |
| 1507 form.origin = GURL("http://example.com/form.html"); | 1640 form.origin = GURL("http://example.com/form.html"); |
| (...skipping 3585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5093 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_NoUkmService) { | 5226 TEST_F(AutofillMetricsTest, RecordCardUploadDecisionMetric_NoUkmService) { |
| 5094 ukm::TestUkmRecorder test_ukm_recorder; | 5227 ukm::TestUkmRecorder test_ukm_recorder; |
| 5095 GURL url("https://www.google.com"); | 5228 GURL url("https://www.google.com"); |
| 5096 std::vector<std::pair<const char*, int>> metrics = {{"metric", 1}}; | 5229 std::vector<std::pair<const char*, int>> metrics = {{"metric", 1}}; |
| 5097 | 5230 |
| 5098 EXPECT_FALSE(AutofillMetrics::LogUkm(nullptr, url, "test_ukm", metrics)); | 5231 EXPECT_FALSE(AutofillMetrics::LogUkm(nullptr, url, "test_ukm", metrics)); |
| 5099 ASSERT_EQ(0U, test_ukm_recorder.sources_count()); | 5232 ASSERT_EQ(0U, test_ukm_recorder.sources_count()); |
| 5100 } | 5233 } |
| 5101 | 5234 |
| 5102 } // namespace autofill | 5235 } // namespace autofill |
| OLD | NEW |