Index: components/password_manager/core/browser/password_form_manager.cc |
diff --git a/components/password_manager/core/browser/password_form_manager.cc b/components/password_manager/core/browser/password_form_manager.cc |
index 272699e0b163ecea95e3f9760e5283ecae5aac95..cb39586bb887357910763c82ca470683c6882c74 100644 |
--- a/components/password_manager/core/browser/password_form_manager.cc |
+++ b/components/password_manager/core/browser/password_form_manager.cc |
@@ -159,6 +159,20 @@ void SanitizePossibleUsernames(PasswordForm* form) { |
usernames.erase(new_end, usernames.end()); |
} |
+// Copies field properties masks from the form |from| to the form |to|. |
+void CopyFieldPropertiesMasks(const PasswordForm& from, PasswordForm* to) { |
+ // Skip copying if the number of fields is different. |
+ if (from.form_data.fields.size() != to->form_data.fields.size()) |
+ return; |
+ |
+ for (size_t i = 0; i < from.form_data.fields.size(); ++i) { |
+ to->form_data.fields[i].properties_mask = |
+ to->form_data.fields[i].name == from.form_data.fields[i].name |
+ ? from.form_data.fields[i].properties_mask |
+ : autofill::FieldPropertiesFlags::ERROR_OCCURRED; |
+ } |
+} |
+ |
} // namespace |
PasswordFormManager::PasswordFormManager( |
@@ -1063,6 +1077,7 @@ void PasswordFormManager::CreatePendingCredentials() { |
pending_credentials_.password_value = password_to_save; |
pending_credentials_.preferred = provisionally_saved_form_->preferred; |
+ CopyFieldPropertiesMasks(*provisionally_saved_form_, &pending_credentials_); |
// If we're dealing with an API-driven provisionally saved form, then take |
// the server provided values. We don't do this for non-API forms, as |