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

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

Issue 7981047: Allow word separators in a few more Autofill regexes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 9 years, 3 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
Index: chrome/browser/autofill/form_structure.cc
diff --git a/chrome/browser/autofill/form_structure.cc b/chrome/browser/autofill/form_structure.cc
index 883c5d494e0c493e4735ac185ef87c86254c1fa5..1ee8f7eef721a338d360ffb660c2f48070202dc1 100644
--- a/chrome/browser/autofill/form_structure.cc
+++ b/chrome/browser/autofill/form_structure.cc
@@ -279,9 +279,9 @@ void FormStructure::DetermineHeuristicTypes() {
// First, try to detect field types based on the fields' |autocompletetype|
// attributes. If there is at least one form field with this attribute, don't
// try to apply other heuristics to match fields in this form.
- bool found_sections;
+ bool has_author_specified_sections;
ParseAutocompletetypeAttributes(&has_author_specified_types_,
- &found_sections);
+ &has_author_specified_sections);
if (!has_author_specified_types_) {
FieldTypeMap field_type_map;
@@ -295,21 +295,7 @@ void FormStructure::DetermineHeuristicTypes() {
}
UpdateAutofillCount();
-
- if (!found_sections)
- IdentifySections();
-
- // Ensure that credit card and address fields are in separate sections.
- // This simplifies the section-aware logic in autofill_manager.cc.
- for (std::vector<AutofillField*>::iterator field = fields_->begin();
- field != fields_->end(); ++field) {
- AutofillType::FieldTypeGroup field_type_group =
- AutofillType((*field)->type()).group();
- if (field_type_group == AutofillType::CREDIT_CARD)
- (*field)->set_section((*field)->section() + ASCIIToUTF16("-cc"));
- else
- (*field)->set_section((*field)->section() + ASCIIToUTF16("-default"));
- }
+ IdentifySections(has_author_specified_sections);
}
bool FormStructure::EncodeUploadRequest(
@@ -464,6 +450,7 @@ void FormStructure::ParseQueryResponse(const std::string& response_xml,
}
form->UpdateAutofillCount();
+ form->IdentifySections(false);
}
AutofillMetrics::ServerQueryMetric metric;
@@ -923,50 +910,65 @@ void FormStructure::ParseAutocompletetypeAttributes(bool* found_attribute,
}
}
-void FormStructure::IdentifySections() {
+void FormStructure::IdentifySections(bool has_author_specified_sections) {
if (fields_.empty())
return;
- // Name sections after the first field in the section.
- string16 current_section = fields_->front()->unique_name();
+ if (!has_author_specified_sections) {
+ // Name sections after the first field in the section.
+ string16 current_section = fields_->front()->unique_name();
+
+ // Keep track of the types we've seen in this section.
+ std::set<AutofillFieldType> seen_types;
+ AutofillFieldType previous_type = UNKNOWN_TYPE;
+
+ for (std::vector<AutofillField*>::iterator field = fields_->begin();
+ field != fields_->end(); ++field) {
+ const AutofillFieldType current_type =
+ AutofillType::GetEquivalentFieldType((*field)->type());
+
+ bool already_saw_current_type = seen_types.count(current_type) > 0;
+
+ // Forms often ask for multiple phone numbers -- e.g. both a daytime and
+ // evening phone number. Our phone number detection is also generally a
+ // little off. Hence, ignore this field type as a signal here.
+ if (AutofillType(current_type).group() == AutofillType::PHONE_HOME)
+ already_saw_current_type = false;
+
+ // Some forms have adjacent fields of the same type. Two common examples:
+ // * Forms with two email fields, where the second is meant to "confirm"
+ // the first.
+ // * Forms with a <select> menu for states in some countries, and a
+ // freeform <input> field for states in other countries. (Usually,
+ // only one of these two will be visible for any given choice of
+ // country.)
+ // Generally, adjacent fields of the same type belong in the same logical
+ // section.
+ if (current_type == previous_type)
+ already_saw_current_type = false;
+
+ previous_type = current_type;
+
+ if (current_type != UNKNOWN_TYPE && already_saw_current_type) {
+ // We reached the end of a section, so start a new section.
+ seen_types.clear();
+ current_section = (*field)->unique_name();
+ }
- // Keep track of the types we've seen in this section.
- std::set<AutofillFieldType> seen_types;
- AutofillFieldType previous_type = UNKNOWN_TYPE;
+ seen_types.insert(current_type);
+ (*field)->set_section(current_section);
+ }
+ }
+ // Ensure that credit card and address fields are in separate sections.
+ // This simplifies the section-aware logic in autofill_manager.cc.
for (std::vector<AutofillField*>::iterator field = fields_->begin();
field != fields_->end(); ++field) {
- const AutofillFieldType current_type =
- AutofillType::GetEquivalentFieldType((*field)->type());
-
- bool already_saw_current_type = seen_types.count(current_type) > 0;
-
- // Forms often ask for multiple phone numbers -- e.g. both a daytime and
- // evening phone number. Our phone number detection is also generally a
- // little off. Hence, ignore this field type as a signal here.
- if (AutofillType(current_type).group() == AutofillType::PHONE_HOME)
- already_saw_current_type = false;
-
- // Some forms have adjacent fields of the same type. Two common examples:
- // * Forms with two email fields, where the second is meant to "confirm"
- // the first.
- // * Forms with a <select> menu for states in some countries, and a
- // freeform <input> field for states in other countries. (Usually, only
- // one of these two will be visible for any given choice of country.)
- // Generally, adjacent fields of the same type belong in the same logical
- // section.
- if (current_type == previous_type)
- already_saw_current_type = false;
-
- previous_type = current_type;
-
- if (current_type != UNKNOWN_TYPE && already_saw_current_type) {
- // We reached the end of a section, so start a new section.
- seen_types.clear();
- current_section = (*field)->unique_name();
- }
-
- seen_types.insert(current_type);
- (*field)->set_section(current_section);
+ AutofillType::FieldTypeGroup field_type_group =
+ AutofillType((*field)->type()).group();
+ if (field_type_group == AutofillType::CREDIT_CARD)
+ (*field)->set_section((*field)->section() + ASCIIToUTF16("-cc"));
+ else
+ (*field)->set_section((*field)->section() + ASCIIToUTF16("-default"));
}
}
« no previous file with comments | « chrome/browser/autofill/form_structure.h ('k') | chrome/test/data/autofill/heuristics/input/16_crbug_93595.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698