Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1131)

Unified Diff: chrome/browser/autofill/autofill_metrics_unittest.cc

Issue 6259017: Fix crash in autofill metrics logging. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Whitespace Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/autofill/autofill_manager.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/autofill/autofill_metrics_unittest.cc
diff --git a/chrome/browser/autofill/autofill_metrics_unittest.cc b/chrome/browser/autofill/autofill_metrics_unittest.cc
index 41df1e979b9ea201c559ddbbae2ab69cec4f0b2e..ecc30b78312118a73068fa9b37469be8b948b743 100644
--- a/chrome/browser/autofill/autofill_metrics_unittest.cc
+++ b/chrome/browser/autofill/autofill_metrics_unittest.cc
@@ -203,6 +203,11 @@ TEST_F(AutoFillMetricsTest, QualityMetrics) {
"Select", "select", "USA", "select-one", &field);
form.fields.push_back(field);
+ // Simulate having seen this form on page load.
+ // |form_structure| will be owned by |autofill_manager_|.
+ TestFormStructure* form_structure = new TestFormStructure(form);
+ autofill_manager_->AddSeenForm(form_structure);
+
// Establish our expectations.
::testing::InSequence dummy;
EXPECT_CALL(*autofill_manager_->metric_logger(),
@@ -319,8 +324,7 @@ TEST_F(AutoFillMetricsTest, QualityMetricsForFailure) {
form_structure->SetFieldTypes(heuristic_types, server_types);
autofill_manager_->AddSeenForm(form_structure);
- // Establish our expectations. Only print gmock errors, as the warnings are
- // too verbose.
+ // Establish our expectations.
::testing::InSequence dummy;
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(failure_cases); ++i) {
EXPECT_CALL(*autofill_manager_->metric_logger(),
@@ -337,6 +341,96 @@ TEST_F(AutoFillMetricsTest, QualityMetricsForFailure) {
EXPECT_NO_FATAL_FAILURE(autofill_manager_->OnFormSubmitted(form));
}
+// Test that we behave sanely when the cached form differs from the submitted
+// one.
+TEST_F(AutoFillMetricsTest, SaneMetricsWithCacheMismatch) {
+ // Set up our form data.
+ FormData form;
+ form.name = ASCIIToUTF16("TestForm");
+ form.method = ASCIIToUTF16("POST");
+ form.origin = GURL("http://example.com/form.html");
+ form.action = GURL("http://example.com/submit.html");
+ form.user_submitted = true;
+
+ std::vector<AutoFillFieldType> heuristic_types, server_types;
+
+ FormField field;
+ autofill_test::CreateTestFormField(
+ "Both match", "match", "Elvis Presley", "text", &field);
+ field.set_autofilled(true);
+ form.fields.push_back(field);
+ heuristic_types.push_back(NAME_FULL);
+ server_types.push_back(NAME_FULL);
+ autofill_test::CreateTestFormField(
+ "Both mismatch", "mismatch", "buddy@gmail.com", "text", &field);
+ form.fields.push_back(field);
+ heuristic_types.push_back(PHONE_HOME_NUMBER);
+ server_types.push_back(PHONE_HOME_NUMBER);
+ autofill_test::CreateTestFormField(
+ "Only heuristics match", "mixed", "Memphis", "text", &field);
+ form.fields.push_back(field);
+ heuristic_types.push_back(ADDRESS_HOME_CITY);
+ server_types.push_back(PHONE_HOME_NUMBER);
+ autofill_test::CreateTestFormField(
+ "Unknown", "unknown", "garbage", "text", &field);
+ form.fields.push_back(field);
+ heuristic_types.push_back(UNKNOWN_TYPE);
+ server_types.push_back(UNKNOWN_TYPE);
+
+ // Simulate having seen this form with the desired heuristic and server types.
+ // |form_structure| will be owned by |autofill_manager_|.
+ TestFormStructure* form_structure = new TestFormStructure(form);
+ form_structure->SetFieldTypes(heuristic_types, server_types);
+ autofill_manager_->AddSeenForm(form_structure);
+
+ // Add a field and re-arrange the remaining form fields before submitting.
+ std::vector<FormField> cached_fields = form.fields;
+ form.fields.clear();
+ autofill_test::CreateTestFormField(
+ "New field", "new field", "Tennessee", "text", &field);
+ form.fields.push_back(field);
+ form.fields.push_back(cached_fields[2]);
+ form.fields.push_back(cached_fields[1]);
+ form.fields.push_back(cached_fields[3]);
+ form.fields.push_back(cached_fields[0]);
+
+ // Establish our expectations.
+ ::testing::InSequence dummy;
+ EXPECT_CALL(*autofill_manager_->metric_logger(),
+ Log(AutoFillMetrics::FIELD_SUBMITTED));
+ EXPECT_CALL(*autofill_manager_->metric_logger(),
+ Log(AutoFillMetrics::FIELD_AUTOFILL_FAILED));
+ EXPECT_CALL(*autofill_manager_->metric_logger(),
+ Log(AutoFillMetrics::FIELD_HEURISTIC_TYPE_UNKNOWN));
+ EXPECT_CALL(*autofill_manager_->metric_logger(),
+ Log(AutoFillMetrics::FIELD_SERVER_TYPE_UNKNOWN));
+ EXPECT_CALL(*autofill_manager_->metric_logger(),
+ Log(AutoFillMetrics::FIELD_SUBMITTED));
+ EXPECT_CALL(*autofill_manager_->metric_logger(),
+ Log(AutoFillMetrics::FIELD_AUTOFILL_FAILED));
+ EXPECT_CALL(*autofill_manager_->metric_logger(),
+ Log(AutoFillMetrics::FIELD_HEURISTIC_TYPE_MATCH));
+ EXPECT_CALL(*autofill_manager_->metric_logger(),
+ Log(AutoFillMetrics::FIELD_SERVER_TYPE_MISMATCH));
+ EXPECT_CALL(*autofill_manager_->metric_logger(),
+ Log(AutoFillMetrics::FIELD_SUBMITTED));
+ EXPECT_CALL(*autofill_manager_->metric_logger(),
+ Log(AutoFillMetrics::FIELD_AUTOFILL_FAILED));
+ EXPECT_CALL(*autofill_manager_->metric_logger(),
+ Log(AutoFillMetrics::FIELD_HEURISTIC_TYPE_MISMATCH));
+ EXPECT_CALL(*autofill_manager_->metric_logger(),
+ Log(AutoFillMetrics::FIELD_SERVER_TYPE_MISMATCH));
+ EXPECT_CALL(*autofill_manager_->metric_logger(),
+ Log(AutoFillMetrics::FIELD_SUBMITTED));
+ EXPECT_CALL(*autofill_manager_->metric_logger(),
+ Log(AutoFillMetrics::FIELD_SUBMITTED));
+ EXPECT_CALL(*autofill_manager_->metric_logger(),
+ Log(AutoFillMetrics::FIELD_AUTOFILLED));
+
+ // Simulate form submission.
+ EXPECT_NO_FATAL_FAILURE(autofill_manager_->OnFormSubmitted(form));
+}
+
// Test that we don't log quality metrics for non-autofillable forms.
TEST_F(AutoFillMetricsTest, NoQualityMetricsForNonAutoFillableForms) {
// Forms must include at least three fields to be auto-fillable.
« no previous file with comments | « chrome/browser/autofill/autofill_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698