Index: components/autofill/browser/form_structure.cc |
diff --git a/components/autofill/browser/form_structure.cc b/components/autofill/browser/form_structure.cc |
index ba80803642d08d021b5f070310fe19e27d00ab4f..240b346c6526d59e78399c55917654d1fc7f93b7 100644 |
--- a/components/autofill/browser/form_structure.cc |
+++ b/components/autofill/browser/form_structure.cc |
@@ -233,7 +233,7 @@ FormStructure::FormStructure(const FormData& form, |
source_url_(form.origin), |
target_url_(form.action), |
autofill_count_(0), |
- checkable_field_count_(0), |
+ active_field_count_(0), |
upload_required_(USE_UPLOAD_RATES), |
server_experiment_id_("no server response"), |
has_author_specified_types_(false), |
@@ -244,14 +244,17 @@ FormStructure::FormStructure(const FormData& form, |
form.fields.begin(); |
field != form.fields.end(); field++) { |
- // Skipping checkable elements when Autocheckout is not enabled, else |
- // these fields will interfere with existing field signatures with Autofill |
- // servers. |
- if (!field->is_checkable || IsAutocheckoutEnabled()) { |
+ // Skip checkable and password elements when Autocheckout is not enabled, |
+ // else these fields will interfere with existing field signatures with |
+ // Autofill servers. |
+ if ((!field->is_checkable && field->form_control_type != "password") || |
+ IsAutocheckoutEnabled()) { |
// Add all supported form fields (including with empty names) to the |
// signature. This is a requirement for Autofill servers. |
form_signature_field_names_.append("&"); |
form_signature_field_names_.append(UTF16ToUTF8(field->name)); |
+ |
+ ++active_field_count_; |
} |
// Generate a unique name for this field by appending a counter to the name. |
@@ -264,9 +267,6 @@ FormStructure::FormStructure(const FormData& form, |
string16 unique_name = field->name + ASCIIToUTF16("_") + |
base::IntToString16(unique_names[field->name]); |
fields_.push_back(new AutofillField(*field, unique_name)); |
- |
- if (field->is_checkable) |
- ++checkable_field_count_; |
} |
std::string method = UTF16ToUTF8(form.method); |
@@ -609,10 +609,7 @@ void FormStructure::UpdateAutofillCount() { |
} |
bool FormStructure::ShouldBeParsed(bool require_method_post) const { |
- // Ignore counting checkable elements towards minimum number of elements |
- // required to parse. This avoids trying to crowdsource forms with few text |
- // or select elements. |
- if ((field_count() - checkable_field_count()) < RequiredFillableFields()) |
+ if (active_field_count() < RequiredFillableFields()) |
return false; |
// Rule out http(s)://*/search?... |
@@ -877,8 +874,8 @@ size_t FormStructure::field_count() const { |
return fields_.size(); |
} |
-size_t FormStructure::checkable_field_count() const { |
- return checkable_field_count_; |
+size_t FormStructure::active_field_count() const { |
+ return active_field_count_; |
} |
std::string FormStructure::server_experiment_id() const { |
@@ -970,9 +967,10 @@ bool FormStructure::EncodeFormRequest( |
encompassing_xml_element->AddElement(field_element); |
} |
} else { |
- // Skip putting checkable fields in the request if Autocheckout is not |
- // enabled. |
- if (field->is_checkable && !IsAutocheckoutEnabled()) |
+ // Skip putting checkable and password fields in the request if |
+ // Autocheckout is not enabled. |
+ if ((field->is_checkable || field->form_control_type == "password") && |
+ !IsAutocheckoutEnabled()) |
continue; |
buzz::XmlElement *field_element = new buzz::XmlElement( |