Index: components/password_manager/core/browser/password_form_manager_unittest.cc |
diff --git a/components/password_manager/core/browser/password_form_manager_unittest.cc b/components/password_manager/core/browser/password_form_manager_unittest.cc |
index 03d149f2bae81e5e164b2ca73e9656975f6a978b..b294ad38ca682431fa2fede85b230a75e3c20295 100644 |
--- a/components/password_manager/core/browser/password_form_manager_unittest.cc |
+++ b/components/password_manager/core/browser/password_form_manager_unittest.cc |
@@ -43,6 +43,8 @@ |
#include "url/gurl.h" |
#include "url/origin.h" |
+using autofill::FieldPropertiesFlags; |
+using autofill::FieldPropertiesMask; |
using autofill::PasswordForm; |
using base::ASCIIToUTF16; |
using ::testing::_; |
@@ -200,6 +202,25 @@ MATCHER_P2(CheckUploadedFormClassifierVote, |
return true; |
} |
+MATCHER_P(CheckFieldPropertiesMasksUpload, |
+ expected_field_properties, |
+ "Wrong field properties flags") { |
+ for (const autofill::AutofillField* field : arg) { |
+ autofill::FieldPropertiesMask expected_mask = |
+ expected_field_properties.find(field->name) != |
+ expected_field_properties.end() |
+ ? FieldPropertiesFlags::USER_TYPED |
+ : 0; |
+ if (field->properties_mask != expected_mask) { |
+ ADD_FAILURE() << "Wrong field properties flags for field " << field->name |
+ << ": expected mask " << expected_mask << ", but found " |
+ << field->properties_mask; |
+ return false; |
+ } |
+ } |
+ return true; |
+} |
+ |
void ClearVector(ScopedVector<PasswordForm>* results) { |
results->clear(); |
} |
@@ -2858,6 +2879,44 @@ TEST_F(PasswordFormManagerTest, FormClassifierVoteUpload) { |
} |
} |
+TEST_F(PasswordFormManagerTest, FieldPropertiesMasksUpload) { |
+ PasswordForm form(*observed_form()); |
+ form.form_data = saved_match()->form_data; |
+ |
+ // Create submitted form. |
+ PasswordForm submitted_form(form); |
+ submitted_form.preferred = true; |
+ submitted_form.username_value = saved_match()->username_value; |
+ submitted_form.password_value = saved_match()->password_value; |
+ |
+ PasswordFormManager form_manager( |
+ password_manager(), client(), client()->driver(), form, |
+ base::WrapUnique(new NiceMock<MockFormSaver>())); |
+ ScopedVector<PasswordForm> result; |
+ form_manager.SimulateFetchMatchingLoginsFromPasswordStore(); |
+ form_manager.OnGetPasswordStoreResults(std::move(result)); |
+ |
+ DCHECK_EQ(3U, form.form_data.fields.size()); |
+ submitted_form.form_data.fields[1].properties_mask = |
+ FieldPropertiesFlags::USER_TYPED; |
+ submitted_form.form_data.fields[2].properties_mask = |
+ FieldPropertiesFlags::USER_TYPED; |
+ |
+ std::map<base::string16, autofill::FieldPropertiesMask> |
+ expected_field_properties; |
+ for (const autofill::FormFieldData& field : submitted_form.form_data.fields) |
+ if (field.properties_mask) |
+ expected_field_properties[field.name] = field.properties_mask; |
+ |
+ EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(), |
+ StartUploadRequest( |
+ CheckFieldPropertiesMasksUpload(expected_field_properties), |
+ false, _, _, true)); |
+ form_manager.ProvisionallySave( |
+ submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
+ form_manager.Save(); |
+} |
+ |
TEST_F(PasswordFormManagerTest, TestSavingAPIFormsWithSamePassword) { |
// Turn |observed_form| and |saved_match| to API created forms. |
observed_form()->username_element.clear(); |