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

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

Issue 5963004: Add autofill metrics to dig into the failure case. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix test 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_metrics.h ('k') | chrome/browser/autofill/form_structure.h » ('j') | 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 ca4dce331929b16647aa4f091c3455b3a216f924..41df1e979b9ea201c559ddbbae2ab69cec4f0b2e 100644
--- a/chrome/browser/autofill/autofill_metrics_unittest.cc
+++ b/chrome/browser/autofill/autofill_metrics_unittest.cc
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <vector>
+
#include "base/ref_counted.h"
#include "base/scoped_ptr.h"
#include "base/string16.h"
@@ -112,12 +114,40 @@ class TestAutoFillManager : public AutoFillManager {
AutoFillManager::metric_logger());
}
+ void AddSeenForm(FormStructure* form) {
+ form_structures()->push_back(form);
+ }
+
private:
bool autofill_enabled_;
DISALLOW_COPY_AND_ASSIGN(TestAutoFillManager);
};
+class TestFormStructure : public FormStructure {
+ public:
+ explicit TestFormStructure(const FormData& form) : FormStructure(form) {}
+ virtual ~TestFormStructure() {}
+
+ void SetFieldTypes(const std::vector<AutoFillFieldType>& heuristic_types,
+ const std::vector<AutoFillFieldType>& server_types) {
+ ASSERT_EQ(field_count(), heuristic_types.size());
+ ASSERT_EQ(field_count(), server_types.size());
+
+ for (size_t i = 0; i < field_count(); ++i) {
+ AutoFillField* field = (*fields())[i];
+ ASSERT_TRUE(field);
+ field->set_heuristic_type(heuristic_types[i]);
+ field->set_server_type(server_types[i]);
+ }
+
+ UpdateAutoFillCount();
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TestFormStructure);
+};
+
} // namespace
class AutoFillMetricsTest : public RenderViewHostTestHarness {
@@ -182,7 +212,11 @@ TEST_F(AutoFillMetricsTest, QualityMetrics) {
EXPECT_CALL(*autofill_manager_->metric_logger(),
Log(AutoFillMetrics::FIELD_SUBMITTED));
EXPECT_CALL(*autofill_manager_->metric_logger(),
- Log(AutoFillMetrics::FIELD_AUTOFILL_FAILED ));
+ 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(),
@@ -192,6 +226,117 @@ TEST_F(AutoFillMetricsTest, QualityMetrics) {
EXPECT_NO_FATAL_FAILURE(autofill_manager_->OnFormSubmitted(form));
}
+// Test that we log the appropriate additional metrics when AutoFill failed.
+TEST_F(AutoFillMetricsTest, QualityMetricsForFailure) {
+ // 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;
+
+ struct {
+ const char* label;
+ const char* name;
+ const char* value;
+ AutoFillFieldType heuristic_type;
+ AutoFillFieldType server_type;
+ AutoFillMetrics::QualityMetric heuristic_metric;
+ AutoFillMetrics::QualityMetric server_metric;
+ } failure_cases[] = {
+ {
+ "Heuristics unknown, server unknown", "0,0", "Elvis",
+ UNKNOWN_TYPE, NO_SERVER_DATA,
+ AutoFillMetrics::FIELD_HEURISTIC_TYPE_UNKNOWN,
+ AutoFillMetrics::FIELD_SERVER_TYPE_UNKNOWN
+ },
+ {
+ "Heuristics match, server unknown", "1,0", "Aaron",
+ NAME_MIDDLE, NO_SERVER_DATA,
+ AutoFillMetrics::FIELD_HEURISTIC_TYPE_MATCH,
+ AutoFillMetrics::FIELD_SERVER_TYPE_UNKNOWN
+ },
+ {
+ "Heuristics mismatch, server unknown", "2,0", "Presley",
+ PHONE_HOME_NUMBER, NO_SERVER_DATA,
+ AutoFillMetrics::FIELD_HEURISTIC_TYPE_MISMATCH,
+ AutoFillMetrics::FIELD_SERVER_TYPE_UNKNOWN
+ },
+ {
+ "Heuristics unknown, server match", "0,1", "theking@gmail.com",
+ UNKNOWN_TYPE, EMAIL_ADDRESS,
+ AutoFillMetrics::FIELD_HEURISTIC_TYPE_UNKNOWN,
+ AutoFillMetrics::FIELD_SERVER_TYPE_MATCH
+ },
+ {
+ "Heuristics match, server match", "1,1", "3734 Elvis Presley Blvd.",
+ ADDRESS_HOME_LINE1, ADDRESS_HOME_LINE1,
+ AutoFillMetrics::FIELD_HEURISTIC_TYPE_MATCH,
+ AutoFillMetrics::FIELD_SERVER_TYPE_MATCH
+ },
+ {
+ "Heuristics mismatch, server match", "2,1", "Apt. 10",
+ PHONE_HOME_NUMBER, ADDRESS_HOME_LINE2,
+ AutoFillMetrics::FIELD_HEURISTIC_TYPE_MISMATCH,
+ AutoFillMetrics::FIELD_SERVER_TYPE_MATCH
+ },
+ {
+ "Heuristics unknown, server mismatch", "0,2", "Memphis",
+ UNKNOWN_TYPE, PHONE_HOME_NUMBER,
+ AutoFillMetrics::FIELD_HEURISTIC_TYPE_UNKNOWN,
+ AutoFillMetrics::FIELD_SERVER_TYPE_MISMATCH
+ },
+ {
+ "Heuristics match, server mismatch", "1,2", "Tennessee",
+ ADDRESS_HOME_STATE, PHONE_HOME_NUMBER,
+ AutoFillMetrics::FIELD_HEURISTIC_TYPE_MATCH,
+ AutoFillMetrics::FIELD_SERVER_TYPE_MISMATCH
+ },
+ {
+ "Heuristics mismatch, server mismatch", "2,2", "38116",
+ PHONE_HOME_NUMBER, PHONE_HOME_NUMBER,
+ AutoFillMetrics::FIELD_HEURISTIC_TYPE_MISMATCH,
+ AutoFillMetrics::FIELD_SERVER_TYPE_MISMATCH
+ }
+ };
+
+ std::vector<AutoFillFieldType> heuristic_types, server_types;
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(failure_cases); ++i) {
+ FormField field;
+ autofill_test::CreateTestFormField(failure_cases[i].label,
+ failure_cases[i].name,
+ failure_cases[i].value, "text", &field);
+ form.fields.push_back(field);
+ heuristic_types.push_back(failure_cases[i].heuristic_type);
+ server_types.push_back(failure_cases[i].server_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);
+
+ // Establish our expectations. Only print gmock errors, as the warnings are
+ // too verbose.
+ ::testing::InSequence dummy;
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(failure_cases); ++i) {
+ 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(failure_cases[i].heuristic_metric));
+ EXPECT_CALL(*autofill_manager_->metric_logger(),
+ Log(failure_cases[i].server_metric));
+ }
+
+ // 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_metrics.h ('k') | chrome/browser/autofill/form_structure.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698