Chromium Code Reviews| 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 ae2822c852fcd2076be3449bbdd045266e213e2c..90d8d71e0b3564900a3e438d76d7df212418d2c8 100644 |
| --- a/components/password_manager/core/browser/password_form_manager_unittest.cc |
| +++ b/components/password_manager/core/browser/password_form_manager_unittest.cc |
| @@ -58,6 +58,7 @@ using ::testing::Return; |
| using ::testing::SaveArg; |
| using ::testing::SaveArgPointee; |
| using ::testing::UnorderedElementsAre; |
| +using ::testing::WithArg; |
| namespace password_manager { |
| @@ -253,6 +254,17 @@ class MockAutofillManager : public autofill::AutofillManager { |
| set_download_manager(manager); |
| } |
| + // Workaround for std::unique_ptr<> lacking a copy constructor. |
| + void StartUploadProcess(std::unique_ptr<FormStructure> form_structure, |
| + const base::TimeTicks& timestamp, |
| + bool observed_submission) { |
| + StartUploadProcessPtr(form_structure.release(), timestamp, |
| + observed_submission); |
| + } |
| + |
| + MOCK_METHOD3(StartUploadProcessPtr, |
| + void(FormStructure*, const base::TimeTicks&, bool)); |
| + |
| private: |
| DISALLOW_COPY_AND_ASSIGN(MockAutofillManager); |
| }; |
| @@ -324,6 +336,10 @@ class TestPasswordManagerClient : public StubPasswordManagerClient { |
| std::unique_ptr<MockPasswordManagerDriver> driver_; |
| }; |
| +ACTION_P(SaveToScopedPtr, scoped) { |
|
vabr (Chromium)
2017/04/10 08:16:08
nit: ScopedPtr -> UniquePtr
The only smart pointe
dvadym
2017/04/10 08:43:29
Done.
|
| + scoped->reset(arg0); |
| +} |
| + |
| } // namespace |
| class PasswordFormManagerTest : public testing::Test { |
| @@ -3098,4 +3114,43 @@ TEST_F(PasswordFormManagerTest, GrabFetcher_Remove) { |
| form_manager.GrabFetcher(std::move(new_fetcher)); |
| } |
| +TEST_F(PasswordFormManagerTest, UploadSignInForm_WithAutofillTypes) { |
|
vabr (Chromium)
2017/04/10 08:16:08
Please also test some cases when IsSignInSubmissio
dvadym
2017/04/10 08:43:29
Done.
|
| + // For newly saved passwords on a sign-in form, upload an autofill vote for a |
| + // username field and a autofill::PASSWORD vote for a password field. |
| + autofill::FormFieldData field; |
| + field.name = ASCIIToUTF16("Email"); |
| + field.form_control_type = "text"; |
| + observed_form()->form_data.fields.push_back(field); |
| + |
| + field.name = ASCIIToUTF16("Passwd"); |
| + field.form_control_type = "password"; |
| + observed_form()->form_data.fields.push_back(field); |
| + |
| + FakeFormFetcher fetcher; |
| + fetcher.Fetch(); |
| + PasswordFormManager form_manager( |
| + password_manager(), client(), client()->driver(), *observed_form(), |
| + base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher); |
| + fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u); |
| + |
| + PasswordForm form_to_save(*observed_form()); |
| + form_to_save.preferred = true; |
| + form_to_save.username_value = ASCIIToUTF16("test@gmail.com"); |
| + form_to_save.password_value = ASCIIToUTF16("password"); |
| + |
| + std::unique_ptr<FormStructure> uploaded_form_structure; |
| + auto* mock_autofill_manager = |
| + client()->mock_driver()->mock_autofill_manager(); |
| + EXPECT_CALL(*mock_autofill_manager, StartUploadProcessPtr(_, _, true)) |
| + .WillOnce(WithArg<0>(SaveToScopedPtr(&uploaded_form_structure))); |
| + form_manager.ProvisionallySave( |
| + form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
| + form_manager.Save(); |
| + |
| + ASSERT_EQ(2u, uploaded_form_structure->field_count()); |
| + autofill::ServerFieldTypeSet expected_types = {autofill::PASSWORD}; |
| + EXPECT_EQ(expected_types, |
| + uploaded_form_structure->field(1)->possible_types()); |
| +} |
| + |
| } // namespace password_manager |