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

Unified Diff: components/autofill/core/browser/form_structure_unittest.cc

Issue 1583563003: [Autofill] Parse forms that have autocomplete attributes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed android compile and browser test Created 4 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 | « components/autofill/core/browser/form_structure.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/autofill/core/browser/form_structure_unittest.cc
diff --git a/components/autofill/core/browser/form_structure_unittest.cc b/components/autofill/core/browser/form_structure_unittest.cc
index b424c1a84a73869ddf421de7e92746778e6da7ad..035267d7e6458872e2adfa344ce36f26fd8313fa 100644
--- a/components/autofill/core/browser/form_structure_unittest.cc
+++ b/components/autofill/core/browser/form_structure_unittest.cc
@@ -485,13 +485,13 @@ TEST_F(FormStructureTest, HeuristicsAutocompleteAttributePhoneTypes) {
form_structure->field(2)->phone_part());
}
-// If at least one field includes type hints in the 'autocomplete' attribute, we
-// should not try to apply any other heuristics.
-TEST_F(FormStructureTest, AutocompleteAttributeOverridesOtherHeuristics) {
+// The heuristics and server predictions should run if there are more than two
+// fillable fields.
+TEST_F(FormStructureTest,
+ HeuristicsAndServerPredictions_BigForm_NoAutocompleteAttribute) {
scoped_ptr<FormStructure> form_structure;
FormData form;
- // Start with a regular contact form.
FormFieldData field;
field.form_control_type = "text";
@@ -518,20 +518,155 @@ TEST_F(FormStructureTest, AutocompleteAttributeOverridesOtherHeuristics) {
EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type());
EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type());
EXPECT_EQ(EMAIL_ADDRESS, form_structure->field(2)->heuristic_type());
+}
+
+// The heuristics and server predictions should run even if a valid autocomplete
+// attribute is present in the form (if it has more that two fillable fields).
+TEST_F(FormStructureTest,
+ HeuristicsAndServerPredictions_ValidAutocompleteAttribute) {
+ scoped_ptr<FormStructure> form_structure;
+ FormData form;
+
+ FormFieldData field;
+ field.form_control_type = "text";
+
+ // Set a valid autocomplete attribute to the first field.
+ field.label = ASCIIToUTF16("First Name");
+ field.name = ASCIIToUTF16("firstname");
+ field.autocomplete_attribute = "given-name";
+ form.fields.push_back(field);
+
+ field.label = ASCIIToUTF16("Last Name");
+ field.name = ASCIIToUTF16("lastname");
+ field.autocomplete_attribute = "";
+ form.fields.push_back(field);
+
+ field.label = ASCIIToUTF16("Email");
+ field.name = ASCIIToUTF16("email");
+ form.fields.push_back(field);
+
+ form_structure.reset(new FormStructure(form));
+ form_structure->DetermineHeuristicTypes();
+ EXPECT_TRUE(form_structure->IsAutofillable());
+ EXPECT_TRUE(form_structure->ShouldBeCrowdsourced());
+
+ ASSERT_EQ(3U, form_structure->field_count());
+ ASSERT_EQ(3U, form_structure->autofill_count());
+
+ EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type());
+ EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type());
+ EXPECT_EQ(EMAIL_ADDRESS, form_structure->field(2)->heuristic_type());
+}
+
+// The heuristics and server predictions should run even if an unrecognized
+// autocomplete attribute is present in the form (if it has more than two
+// fillable fields).
+TEST_F(FormStructureTest,
+ HeuristicsAndServerPredictions_UnrecognizedAutocompleteAttribute) {
+ scoped_ptr<FormStructure> form_structure;
+ FormData form;
+
+ FormFieldData field;
+ field.form_control_type = "text";
+
+ // Set an unrecognized autocomplete attribute to the first field.
+ field.label = ASCIIToUTF16("First Name");
+ field.name = ASCIIToUTF16("firstname");
+ field.autocomplete_attribute = "unrecognized";
+ form.fields.push_back(field);
+
+ field.label = ASCIIToUTF16("Middle Name");
+ field.name = ASCIIToUTF16("middlename");
+ field.autocomplete_attribute = "";
+ form.fields.push_back(field);
+
+ field.label = ASCIIToUTF16("Last Name");
+ field.name = ASCIIToUTF16("lastname");
+ form.fields.push_back(field);
+
+ field.label = ASCIIToUTF16("Email");
+ field.name = ASCIIToUTF16("email");
+ form.fields.push_back(field);
+
+ form_structure.reset(new FormStructure(form));
+ form_structure->DetermineHeuristicTypes();
+ EXPECT_TRUE(form_structure->IsAutofillable());
+ EXPECT_TRUE(form_structure->ShouldBeCrowdsourced());
+
+ ASSERT_EQ(4U, form_structure->field_count());
+ ASSERT_EQ(3U, form_structure->autofill_count());
+
+ EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type());
+ EXPECT_EQ(NAME_MIDDLE, form_structure->field(1)->heuristic_type());
+ EXPECT_EQ(NAME_LAST, form_structure->field(2)->heuristic_type());
+ EXPECT_EQ(EMAIL_ADDRESS, form_structure->field(3)->heuristic_type());
+}
+
+// Tests the heuristics and server predictions are not run for forms with less
+// than 3 fields.
+TEST_F(FormStructureTest,
+ HeuristicsAndServerPredictions_SmallForm_NoAutocompleteAttribute) {
+ scoped_ptr<FormStructure> form_structure;
+ FormData form;
+
+ FormFieldData field;
+ field.form_control_type = "text";
+
+ field.label = ASCIIToUTF16("First Name");
+ field.name = ASCIIToUTF16("firstname");
+ form.fields.push_back(field);
+
+ field.label = ASCIIToUTF16("Last Name");
+ field.name = ASCIIToUTF16("lastname");
+ form.fields.push_back(field);
- // Now update the first form field to include an 'autocomplete' attribute.
- form.fields.front().autocomplete_attribute = "x-other";
form_structure.reset(new FormStructure(form));
form_structure->DetermineHeuristicTypes();
EXPECT_FALSE(form_structure->IsAutofillable());
EXPECT_FALSE(form_structure->ShouldBeCrowdsourced());
- ASSERT_EQ(3U, form_structure->field_count());
+ ASSERT_EQ(2U, form_structure->field_count());
ASSERT_EQ(0U, form_structure->autofill_count());
EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(0)->heuristic_type());
EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(1)->heuristic_type());
- EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(2)->heuristic_type());
+ EXPECT_EQ(NO_SERVER_DATA, form_structure->field(0)->server_type());
+ EXPECT_EQ(NO_SERVER_DATA, form_structure->field(1)->server_type());
+}
+
+// Tests the heuristics and server predictions are not run for forms with less
+// than 3 fields, even if an autocomplete attribute is specified.
+TEST_F(FormStructureTest,
+ HeuristicsAndServerPredictions_SmallForm_ValidAutocompleteAttribute) {
+ scoped_ptr<FormStructure> form_structure;
+ FormData form;
+
+ FormFieldData field;
+ field.form_control_type = "text";
+
+ // Set a valid autocompelete attribute to the first field.
+ field.label = ASCIIToUTF16("First Name");
+ field.name = ASCIIToUTF16("firstname");
+ field.autocomplete_attribute = "given-name";
+ form.fields.push_back(field);
+
+ field.label = ASCIIToUTF16("Last Name");
+ field.name = ASCIIToUTF16("lastname");
+ field.autocomplete_attribute = "";
+ form.fields.push_back(field);
+
+ form_structure.reset(new FormStructure(form));
+ form_structure->DetermineHeuristicTypes();
+ EXPECT_FALSE(form_structure->IsAutofillable());
+ EXPECT_FALSE(form_structure->ShouldBeCrowdsourced());
+
+ ASSERT_EQ(2U, form_structure->field_count());
+ ASSERT_EQ(1U, form_structure->autofill_count());
+
+ EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(0)->heuristic_type());
+ EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(1)->heuristic_type());
+ EXPECT_EQ(NO_SERVER_DATA, form_structure->field(0)->server_type());
+ EXPECT_EQ(NO_SERVER_DATA, form_structure->field(1)->server_type());
}
// Even with an 'autocomplete' attribute set, ShouldBeCrowdsourced() should
« no previous file with comments | « components/autofill/core/browser/form_structure.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698