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

Unified Diff: components/autofill/content/renderer/form_autofill_util.cc

Issue 1130153005: Autofill: Document ExtractFieldsFromControlElements(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698