Index: components/autofill/content/renderer/form_autofill_util.cc |
diff --git a/components/autofill/content/renderer/form_autofill_util.cc b/components/autofill/content/renderer/form_autofill_util.cc |
index ab28cde1ad9f8c3d235a463db9090732c5787183..c9ebc62c3996f80d2205c16dd60be43d3a05382f 100644 |
--- a/components/autofill/content/renderer/form_autofill_util.cc |
+++ b/components/autofill/content/renderer/form_autofill_util.cc |
@@ -898,12 +898,23 @@ bool IsWebNodeVisibleImpl(const blink::WebNode& node, const int depth) { |
return false; |
} |
+// Extracts the fields from |control_elements| with |extract_mask| to |
+// |form_fields|. The extracted fields are also placed in |element_map|. |
+// |form_fields| and |element_map| should start out empty. |
+// |fields_extracted| should have as many elements as |control_elements|, |
+// initialized to false. |
+// Returns true if the number of fields extracted is within |
+// [1, kMaxParseableFields]. |
bool ExtractFieldsFromControlElements( |
const WebVector<WebFormControlElement>& control_elements, |
ExtractMask extract_mask, |
ScopedVector<FormFieldData>* form_fields, |
std::vector<bool>* fields_extracted, |
std::map<WebFormControlElement, FormFieldData*>* element_map) { |
+ DCHECK(form_fields->empty()); |
+ DCHECK(element_map->empty()); |
+ DCHECK_EQ(control_elements.size(), fields_extracted->size()); |
+ |
for (size_t i = 0; i < control_elements.size(); ++i) { |
const WebFormControlElement& control_element = control_elements[i]; |
@@ -916,13 +927,15 @@ bool ExtractFieldsFromControlElements( |
form_fields->push_back(form_field); |
(*element_map)[control_element] = form_field; |
(*fields_extracted)[i] = true; |
+ |
+ // To avoid overly expensive computation, we impose a maximum number of |
+ // allowable fields. |
+ if (form_fields->size() > kMaxParseableFields) |
+ return false; |
} |
- // If we failed to extract any fields, give up. Also, to avoid overly |
- // expensive computation, we impose a maximum number of allowable fields. |
- if (form_fields->empty() || form_fields->size() > kMaxParseableFields) |
- return false; |
- return true; |
+ // Succeeded if fields were extracted. |
+ return !form_fields->empty(); |
} |
// For each label element, get the corresponding form control element, use the |