Index: components/autofill/core/browser/form_structure.cc |
diff --git a/components/autofill/core/browser/form_structure.cc b/components/autofill/core/browser/form_structure.cc |
index c546a113f773d27526d2b39b799f41197ab6a5cc..002fc6277fe77bbc69f5d1e3693ca39dab405fc0 100644 |
--- a/components/autofill/core/browser/form_structure.cc |
+++ b/components/autofill/core/browser/form_structure.cc |
@@ -1208,8 +1208,11 @@ void FormStructure::IdentifySections(bool has_author_specified_sections) { |
if (AutofillType(current_type).group() == PHONE_HOME) |
already_saw_current_type = false; |
- // Ignore non-focusable field while inferring boundaries between sections. |
- if (!field->is_focusable) |
+ // Ignore non-focusable field and presentation role fields while inferring |
+ // boundaries between sections. |
+ bool ignored_field = !field->is_focusable || |
+ field->role == FormFieldData::ROLE_ATTRIBUTE_PRESENTATION; |
+ if (ignored_field) |
already_saw_current_type = false; |
// Some forms have adjacent fields of the same type. Two common examples: |
@@ -1224,20 +1227,23 @@ void FormStructure::IdentifySections(bool has_author_specified_sections) { |
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(); |
} |
- // Only consider a type "seen" if it was focusable. Some forms have |
+ // Only consider a type "seen" if it was not ignored. Some forms have |
// sections for different locales, only one of which is enabled at a |
// time. Each section may duplicate some information (e.g. postal code) |
// and we don't want that to cause section splits. |
- if (field->is_focusable) |
+ // Also only set |previous_type| when the field was not ignored. This |
+ // prevents ignored fields from breaking up fields that are otherwise |
+ // adjacent. |
+ if (!ignored_field) { |
seen_types.insert(current_type); |
+ previous_type = current_type; |
+ } |
field->set_section(base::UTF16ToUTF8(current_section)); |
} |