Index: components/autofill/content/renderer/form_cache.cc |
diff --git a/components/autofill/content/renderer/form_cache.cc b/components/autofill/content/renderer/form_cache.cc |
index 81ddf83574d53c6727ecbf50714fb6ef93bf38c9..c2f52ea0c4d1b9633de5520e8f708e04cc2ddb1d 100644 |
--- a/components/autofill/content/renderer/form_cache.cc |
+++ b/components/autofill/content/renderer/form_cache.cc |
@@ -64,8 +64,7 @@ void LogDeprecationMessages(const WebFormControlElement& element) { |
// is imposed by WebFormElementToFormData(). |
Evan Stade
2015/11/04 17:15:18
I think this comment needs further updating becaus
sebsg
2015/11/10 19:04:50
As I read the code more I realized that num_editab
|
bool ShouldIgnoreForm(size_t num_editable_elements, |
size_t num_control_elements) { |
- return (num_editable_elements < kRequiredAutofillFields && |
- num_control_elements > 0); |
Evan Stade
2015/11/04 17:15:18
prefer this way of checking against 0 rather than
sebsg
2015/11/10 19:04:50
Done.
|
+ return (!num_editable_elements && num_control_elements); |
Evan Stade
2015/11/04 17:15:18
nit: remove excess parens
sebsg
2015/11/10 19:04:50
Done.
|
} |
} // namespace |
@@ -117,8 +116,7 @@ std::vector<FormData> FormCache::ExtractNewForms() { |
if (num_fields_seen > form_util::kMaxParseableFields) |
return forms; |
- if (form.fields.size() >= kRequiredAutofillFields && |
- !ContainsKey(parsed_forms_, form)) { |
+ if (!ContainsKey(parsed_forms_, form) && IsFormInteresting(form)) { |
for (auto it = parsed_forms_.begin(); it != parsed_forms_.end(); ++it) { |
if (it->SameFormAs(form)) { |
parsed_forms_.erase(it); |
@@ -155,8 +153,8 @@ std::vector<FormData> FormCache::ExtractNewForms() { |
if (num_fields_seen > form_util::kMaxParseableFields) |
return forms; |
- if (synthetic_form.fields.size() >= kRequiredAutofillFields && |
- !parsed_forms_.count(synthetic_form)) { |
+ if (!parsed_forms_.count(synthetic_form) && |
+ IsFormInteresting(synthetic_form)) { |
SaveInitialValues(control_elements); |
forms.push_back(synthetic_form); |
parsed_forms_.insert(synthetic_form); |
@@ -305,6 +303,23 @@ bool FormCache::ShowPredictions(const FormDataPredictions& form) { |
return true; |
} |
+// static |
+bool FormCache::IsFormInteresting(FormData form) { |
+ if (form.fields.empty()) |
+ return false; |
+ |
+ // If the form has at least one field with an autocomplete attribute, |
+ // autocomplete suggestions will be shown. |
Evan Stade
2015/11/04 17:15:18
this comment is misleading, we don't know if sugge
sebsg
2015/11/10 19:04:50
Done.
|
+ for (auto field : form.fields) { |
+ if (!field.autocomplete_attribute.empty()) |
+ return true; |
+ } |
+ |
+ // If there are no autocomplete attributes, the form needs to have at least |
+ // the required number of fields to be a candidate for autofill. |
+ return form.fields.size() >= kRequiredAutofillFields; |
+} |
+ |
size_t FormCache::ScanFormControlElements( |
const std::vector<WebFormControlElement>& control_elements, |
bool log_deprecation_messages) { |