| 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 35377086853440553bc7e29020e754d0fdf39c0a..c224b3d863795897bf8a7d26007e103c3465964c 100644
|
| --- a/components/password_manager/core/browser/password_form_manager_unittest.cc
|
| +++ b/components/password_manager/core/browser/password_form_manager_unittest.cc
|
| @@ -30,6 +30,7 @@
|
| #include "components/password_manager/core/browser/password_manager_test_utils.h"
|
| #include "components/password_manager/core/browser/password_store.h"
|
| #include "components/password_manager/core/browser/statistics_table.h"
|
| +#include "components/password_manager/core/browser/stub_form_saver.h"
|
| #include "components/password_manager/core/browser/stub_password_manager_client.h"
|
| #include "components/password_manager/core/browser/stub_password_manager_driver.h"
|
| #include "components/password_manager/core/common/password_manager_features.h"
|
| @@ -46,17 +47,44 @@ using autofill::PasswordForm;
|
| using base::ASCIIToUTF16;
|
| using ::testing::_;
|
| using ::testing::ElementsAre;
|
| +using ::testing::IsEmpty;
|
| using ::testing::Mock;
|
| using ::testing::NiceMock;
|
| using ::testing::Pointee;
|
| using ::testing::Return;
|
| using ::testing::SaveArg;
|
| +using ::testing::SaveArgPointee;
|
| using ::testing::UnorderedElementsAre;
|
|
|
| namespace password_manager {
|
|
|
| namespace {
|
|
|
| +class MockFormSaver : public StubFormSaver {
|
| + public:
|
| + MockFormSaver() = default;
|
| +
|
| + ~MockFormSaver() override = default;
|
| +
|
| + // FormSaver:
|
| + MOCK_METHOD1(PermanentlyBlacklist, void(autofill::PasswordForm* observed));
|
| + MOCK_METHOD5(Save,
|
| + void(const autofill::PasswordForm& pending,
|
| + bool is_new_login,
|
| + const autofill::PasswordFormMap& best_matches,
|
| + const std::vector<const autofill::PasswordForm*>*
|
| + credentials_to_update,
|
| + const autofill::PasswordForm* old_primary_key));
|
| +
|
| + // Convenience downcasting method.
|
| + static MockFormSaver& Get(PasswordFormManager* form_manager) {
|
| + return *static_cast<MockFormSaver*>(form_manager->form_saver());
|
| + }
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(MockFormSaver);
|
| +};
|
| +
|
| // Invokes the password store consumer with a copy of all forms.
|
| ACTION_P4(InvokeConsumer, form1, form2, form3, form4) {
|
| ScopedVector<PasswordForm> result;
|
| @@ -71,6 +99,10 @@ MATCHER_P(CheckUsername, username_value, "Username incorrect") {
|
| return arg.username_value == username_value;
|
| }
|
|
|
| +MATCHER_P(CheckUsernamePtr, username_value, "Username incorrect") {
|
| + return arg && arg->username_value == username_value;
|
| +}
|
| +
|
| MATCHER_P2(CheckUploadedAutofillTypesAndSignature,
|
| form_signature,
|
| expected_types,
|
| @@ -377,7 +409,7 @@ class PasswordFormManagerTest : public testing::Test {
|
| password_manager_.reset(new PasswordManager(client_.get()));
|
| form_manager_.reset(new PasswordFormManager(
|
| password_manager_.get(), client_.get(), client_.get()->driver(),
|
| - observed_form_, false));
|
| + observed_form_, false, base::WrapUnique(new MockFormSaver())));
|
| }
|
|
|
| void TearDown() override {
|
| @@ -419,7 +451,8 @@ class PasswordFormManagerTest : public testing::Test {
|
| form.form_data = observed_form_data;
|
|
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), form, false);
|
| + client()->driver(), form, false,
|
| + base::WrapUnique(new MockFormSaver()));
|
| ScopedVector<PasswordForm> result;
|
| result.push_back(CreateSavedMatch(false));
|
| result[0]->generation_upload_status = status;
|
| @@ -495,9 +528,9 @@ class PasswordFormManagerTest : public testing::Test {
|
| observed_form()->form_data.fields.push_back(field);
|
|
|
| client()->set_is_update_password_ui_enabled(true);
|
| - PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), *observed_form(),
|
| - false);
|
| + PasswordFormManager form_manager(
|
| + password_manager(), client(), client()->driver(), *observed_form(),
|
| + false, base::WrapUnique(new MockFormSaver()));
|
|
|
| SimulateMatchingPhase(&form_manager, RESULT_SAVED_MATCH);
|
|
|
| @@ -625,7 +658,8 @@ class PasswordFormManagerTest : public testing::Test {
|
| }
|
|
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), form, false);
|
| + client()->driver(), form, false,
|
| + base::WrapUnique(new MockFormSaver()));
|
|
|
| ScopedVector<PasswordForm> result;
|
| form_manager.SimulateFetchMatchingLoginsFromPasswordStore();
|
| @@ -797,9 +831,8 @@ TEST_F(PasswordFormManagerTest, TestBlacklist) {
|
|
|
| const PasswordForm pending_form = form_manager()->pending_credentials();
|
| PasswordForm actual_add_form;
|
| - EXPECT_CALL(*mock_store(), RemoveLogin(_)).Times(0);
|
| - EXPECT_CALL(*mock_store(), AddLogin(_))
|
| - .WillOnce(SaveArg<0>(&actual_add_form));
|
| + EXPECT_CALL(MockFormSaver::Get(form_manager()), PermanentlyBlacklist(_))
|
| + .WillOnce(SaveArgPointee<0>(&actual_add_form));
|
| form_manager()->PermanentlyBlacklist();
|
| EXPECT_EQ(pending_form, form_manager()->pending_credentials());
|
| EXPECT_TRUE(form_manager()->IsBlacklisted());
|
| @@ -812,7 +845,8 @@ TEST_F(PasswordFormManagerTest, TestBlacklistMatching) {
|
| observed_form()->action = GURL("http://accounts.google.com/a/Login");
|
| observed_form()->signon_realm = "http://accounts.google.com";
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), *observed_form(), false);
|
| + client()->driver(), *observed_form(), false,
|
| + base::WrapUnique(new MockFormSaver()));
|
| form_manager.SimulateFetchMatchingLoginsFromPasswordStore();
|
|
|
| // Doesn't match because of PSL.
|
| @@ -933,9 +967,8 @@ TEST_F(PasswordFormManagerTest, PSLMatchedCredentialsMetadataUpdated) {
|
| expected_available_field_types.insert(autofill::ACCOUNT_CREATION_PASSWORD);
|
| EXPECT_CALL(
|
| *client()->mock_driver()->mock_autofill_download_manager(),
|
| - StartUploadRequest(_, false, expected_available_field_types, _, true))
|
| - .Times(1);
|
| - EXPECT_CALL(*mock_store(), AddLogin(_))
|
| + StartUploadRequest(_, false, expected_available_field_types, _, true));
|
| + EXPECT_CALL(MockFormSaver::Get(form_manager()), Save(_, true, _, _, nullptr))
|
| .WillOnce(SaveArg<0>(&actual_saved_form));
|
| form_manager()->Save();
|
|
|
| @@ -951,7 +984,8 @@ TEST_F(PasswordFormManagerTest, TestNewLoginFromNewPasswordElement) {
|
| observed_form()->username_marked_by_site = true;
|
|
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), *observed_form(), false);
|
| + client()->driver(), *observed_form(), false,
|
| + base::WrapUnique(new MockFormSaver()));
|
| SimulateMatchingPhase(&form_manager, RESULT_NO_MATCH);
|
|
|
| // User enters current and new credentials to the observed form.
|
| @@ -1025,13 +1059,14 @@ TEST_F(PasswordFormManagerTest, TestUpdatePasswordFromNewPasswordElement) {
|
| // should not serve as a source for updating meta-information stored with the
|
| // old credentials, such as element names, as they are likely going to be
|
| // different between change password and login forms. To test this in depth,
|
| - // forcibly wipe |submit_element|, which should normally trigger updating this
|
| - // field from |observed_form| in the UpdateLogin() step as a special case. We
|
| - // will verify in the end that this did not happen.
|
| + // forcibly wipe |submit_element|, which should normally trigger updating
|
| + // this field from |observed_form| during updating as a special case. We will
|
| + // verify in the end that this did not happen.
|
| saved_match()->submit_element.clear();
|
|
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), *observed_form(), false);
|
| + client()->driver(), *observed_form(), false,
|
| + base::WrapUnique(new MockFormSaver()));
|
| SimulateMatchingPhase(&form_manager, RESULT_SAVED_MATCH);
|
|
|
| // User submits current and new credentials to the observed form.
|
| @@ -1056,9 +1091,9 @@ TEST_F(PasswordFormManagerTest, TestUpdatePasswordFromNewPasswordElement) {
|
| EXPECT_TRUE(form_manager.pending_credentials().new_password_element.empty());
|
| EXPECT_TRUE(form_manager.pending_credentials().new_password_value.empty());
|
|
|
| - // Trigger saving to exercise some special case handling in UpdateLogin().
|
| + // Trigger saving to exercise some special case handling for updating.
|
| PasswordForm new_credentials;
|
| - EXPECT_CALL(*mock_store(), UpdateLogin(_))
|
| + EXPECT_CALL(MockFormSaver::Get(&form_manager), Save(_, false, _, _, nullptr))
|
| .WillOnce(testing::SaveArg<0>(&new_credentials));
|
|
|
| form_manager.Save();
|
| @@ -1073,9 +1108,9 @@ TEST_F(PasswordFormManagerTest, TestUpdatePasswordFromNewPasswordElement) {
|
|
|
| TEST_F(PasswordFormManagerTest, TestIgnoreResult_SSL) {
|
| const bool kObservedFormSSLValid = false;
|
| - PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), *observed_form(),
|
| - kObservedFormSSLValid);
|
| + PasswordFormManager form_manager(
|
| + password_manager(), client(), client()->driver(), *observed_form(),
|
| + kObservedFormSSLValid, base::WrapUnique(new MockFormSaver()));
|
|
|
| PasswordForm saved_form = *observed_form();
|
| saved_form.ssl_valid = !kObservedFormSSLValid;
|
| @@ -1103,7 +1138,8 @@ TEST_F(PasswordFormManagerTest, TestIgnoreResult_Paths) {
|
| observed.signon_realm = "https://accounts.google.com";
|
|
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), observed, false);
|
| + client()->driver(), observed, false,
|
| + base::WrapUnique(new MockFormSaver()));
|
|
|
| PasswordForm saved_form = observed;
|
| saved_form.origin = GURL("https://accounts.google.com/a/OtherLoginAuth");
|
| @@ -1124,7 +1160,8 @@ TEST_F(PasswordFormManagerTest, TestIgnoreResult_IgnoredCredentials) {
|
| observed.signon_realm = "https://accounts.google.com";
|
|
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), observed, false);
|
| + client()->driver(), observed, false,
|
| + base::WrapUnique(new MockFormSaver()));
|
| client()->FilterAllResults();
|
|
|
| PasswordForm saved_form = observed;
|
| @@ -1208,10 +1245,8 @@ TEST_F(PasswordFormManagerTest, TestAlternateUsername_NoChange) {
|
| EXPECT_FALSE(form_manager()->IsNewLogin());
|
|
|
| PasswordForm saved_result;
|
| - EXPECT_CALL(*mock_store(), UpdateLogin(_))
|
| + EXPECT_CALL(MockFormSaver::Get(form_manager()), Save(_, false, _, _, nullptr))
|
| .WillOnce(SaveArg<0>(&saved_result));
|
| - EXPECT_CALL(*mock_store(), UpdateLoginWithPrimaryKey(_, _)).Times(0);
|
| - EXPECT_CALL(*mock_store(), AddLogin(_)).Times(0);
|
| EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
|
| StartUploadRequest(_, false, _, _, true));
|
|
|
| @@ -1248,11 +1283,9 @@ TEST_F(PasswordFormManagerTest, TestAlternateUsername_OtherUsername) {
|
|
|
| PasswordForm saved_result;
|
| // Changing the username changes the primary key of the stored credential.
|
| - EXPECT_CALL(*mock_store(), UpdateLoginWithPrimaryKey(
|
| - _, CheckUsername(saved_form.username_value)))
|
| + EXPECT_CALL(MockFormSaver::Get(form_manager()),
|
| + Save(_, false, _, _, CheckUsernamePtr(saved_form.username_value)))
|
| .WillOnce(SaveArg<0>(&saved_result));
|
| - EXPECT_CALL(*mock_store(), UpdateLogin(_)).Times(0);
|
| - EXPECT_CALL(*mock_store(), AddLogin(_)).Times(0);
|
|
|
| form_manager()->Save();
|
|
|
| @@ -1294,7 +1327,8 @@ TEST_F(PasswordFormManagerTest,
|
| signup_form.new_password_element = base::ASCIIToUTF16("new_password_field");
|
|
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), signup_form, false);
|
| + client()->driver(), signup_form, false,
|
| + base::WrapUnique(new MockFormSaver()));
|
| EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_))
|
| .Times(1);
|
| form_manager.SimulateFetchMatchingLoginsFromPasswordStore();
|
| @@ -1406,9 +1440,8 @@ TEST_F(PasswordFormManagerTest, TestSanitizePossibleUsernames) {
|
| credentials, PasswordFormManager::ALLOW_OTHER_POSSIBLE_USERNAMES);
|
|
|
| PasswordForm saved_result;
|
| - EXPECT_CALL(*mock_store(), UpdateLogin(_)).Times(0);
|
| - EXPECT_CALL(*mock_store(), UpdateLoginWithPrimaryKey(_, _)).Times(0);
|
| - EXPECT_CALL(*mock_store(), AddLogin(_)).WillOnce(SaveArg<0>(&saved_result));
|
| + EXPECT_CALL(MockFormSaver::Get(form_manager()), Save(_, true, _, _, nullptr))
|
| + .WillOnce(SaveArg<0>(&saved_result));
|
| form_manager()->Save();
|
|
|
| // Possible credit card number and SSN are stripped.
|
| @@ -1439,9 +1472,8 @@ TEST_F(PasswordFormManagerTest, TestSanitizePossibleUsernamesDuplicates) {
|
| credentials, PasswordFormManager::ALLOW_OTHER_POSSIBLE_USERNAMES);
|
|
|
| PasswordForm saved_result;
|
| - EXPECT_CALL(*mock_store(), UpdateLogin(_)).Times(0);
|
| - EXPECT_CALL(*mock_store(), UpdateLoginWithPrimaryKey(_, _)).Times(0);
|
| - EXPECT_CALL(*mock_store(), AddLogin(_)).WillOnce(SaveArg<0>(&saved_result));
|
| + EXPECT_CALL(MockFormSaver::Get(form_manager()), Save(_, true, _, _, nullptr))
|
| + .WillOnce(SaveArg<0>(&saved_result));
|
| form_manager()->Save();
|
|
|
| // SSN, duplicate in |other_possible_usernames| and duplicate of
|
| @@ -1463,7 +1495,8 @@ TEST_F(PasswordFormManagerTest, TestUpdateIncompleteCredentials) {
|
| EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_));
|
|
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), encountered_form, false);
|
| + client()->driver(), encountered_form, false,
|
| + base::WrapUnique(new MockFormSaver()));
|
|
|
| EXPECT_CALL(*mock_store(), GetLogins(encountered_form, &form_manager));
|
| form_manager.FetchDataFromPasswordStore();
|
| @@ -1503,8 +1536,8 @@ TEST_F(PasswordFormManagerTest, TestUpdateIncompleteCredentials) {
|
| obsolete_form.times_used = 1;
|
|
|
| // Check that PasswordStore receives an update request with the complete form.
|
| - EXPECT_CALL(*mock_store(),
|
| - UpdateLoginWithPrimaryKey(complete_form, obsolete_form));
|
| + EXPECT_CALL(MockFormSaver::Get(&form_manager),
|
| + Save(complete_form, false, _, _, Pointee(obsolete_form)));
|
| form_manager.Save();
|
| }
|
|
|
| @@ -1576,10 +1609,8 @@ TEST_F(PasswordFormManagerTest, AndroidCredentialsAreAutofilled) {
|
| EXPECT_FALSE(form_manager()->IsNewLogin());
|
|
|
| PasswordForm updated_credential;
|
| - EXPECT_CALL(*mock_store(), UpdateLogin(_))
|
| + EXPECT_CALL(MockFormSaver::Get(form_manager()), Save(_, false, _, _, nullptr))
|
| .WillOnce(testing::SaveArg<0>(&updated_credential));
|
| - EXPECT_CALL(*mock_store(), UpdateLoginWithPrimaryKey(_, _)).Times(0);
|
| - EXPECT_CALL(*mock_store(), AddLogin(_)).Times(0);
|
| form_manager()->Save();
|
| Mock::VerifyAndClearExpectations(mock_store());
|
|
|
| @@ -1652,9 +1683,9 @@ TEST_F(PasswordFormManagerTest, InvalidActionURLsDoNotMatch) {
|
| PasswordFormManager::RESULT_ACTION_MATCH);
|
| // Then when the observed form has an invalid URL:
|
| PasswordForm valid_action_form(*observed_form());
|
| - PasswordFormManager invalid_manager(password_manager(), client(),
|
| - client()->driver(), invalid_action_form,
|
| - false);
|
| + PasswordFormManager invalid_manager(
|
| + password_manager(), client(), client()->driver(), invalid_action_form,
|
| + false, base::WrapUnique(new MockFormSaver()));
|
| EXPECT_EQ(0,
|
| invalid_manager.DoesManage(valid_action_form) &
|
| PasswordFormManager::RESULT_ACTION_MATCH);
|
| @@ -1670,9 +1701,9 @@ TEST_F(PasswordFormManagerTest, EmptyActionURLsDoNotMatchNonEmpty) {
|
| PasswordFormManager::RESULT_ACTION_MATCH);
|
| // Then when the observed form has an empty URL:
|
| PasswordForm valid_action_form(*observed_form());
|
| - PasswordFormManager empty_action_manager(password_manager(), client(),
|
| - client()->driver(),
|
| - empty_action_form, false);
|
| + PasswordFormManager empty_action_manager(
|
| + password_manager(), client(), client()->driver(), empty_action_form,
|
| + false, base::WrapUnique(new MockFormSaver()));
|
| EXPECT_EQ(0,
|
| empty_action_manager.DoesManage(valid_action_form) &
|
| PasswordFormManager::RESULT_ACTION_MATCH);
|
| @@ -1688,7 +1719,8 @@ TEST_F(PasswordFormManagerTest, NonHTMLFormsDoNotMatchHTMLForms) {
|
| // The other way round: observing a non-HTML form, don't match a HTML form.
|
| PasswordForm html_form(*observed_form());
|
| PasswordFormManager non_html_manager(password_manager(), client(), kNoDriver,
|
| - non_html_form, false);
|
| + non_html_form, false,
|
| + base::WrapUnique(new MockFormSaver()));
|
| EXPECT_EQ(0, non_html_manager.DoesManage(html_form) &
|
| PasswordFormManager::RESULT_HTML_ATTRIBUTES_MATCH);
|
| }
|
| @@ -1723,9 +1755,9 @@ TEST_F(PasswordFormManagerTest,
|
|
|
| PasswordForm secure_observed_form(*observed_form());
|
| secure_observed_form.origin = GURL("https://accounts.google.com/a/LoginAuth");
|
| - PasswordFormManager secure_manager(password_manager(), client(),
|
| - client()->driver(), secure_observed_form,
|
| - true);
|
| + PasswordFormManager secure_manager(
|
| + password_manager(), client(), client()->driver(), secure_observed_form,
|
| + true, base::WrapUnique(new MockFormSaver()));
|
| // Also for HTTPS in the observed form, and HTTP in the compared form, an
|
| // exact path match is expected.
|
| EXPECT_EQ(0, secure_manager.DoesManage(form_longer_path) &
|
| @@ -1786,10 +1818,8 @@ TEST_F(PasswordFormManagerTest, CorrectlyUpdatePasswordsWithSameUsername) {
|
| EXPECT_FALSE(form_manager()->IsNewLogin());
|
|
|
| PasswordForm saved_result;
|
| - EXPECT_CALL(*mock_store(), UpdateLogin(_))
|
| - .WillOnce(SaveArg<0>(&saved_result));
|
| - EXPECT_CALL(*mock_store(), UpdateLoginWithPrimaryKey(_, _)).Times(0);
|
| - EXPECT_CALL(*mock_store(), AddLogin(_)).Times(0);
|
| + EXPECT_CALL(MockFormSaver::Get(form_manager()), Save(_, false, _, _, nullptr))
|
| + .WillOnce(testing::SaveArg<0>(&saved_result));
|
| EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
|
| StartUploadRequest(_, false, _, _, true));
|
|
|
| @@ -1803,7 +1833,8 @@ TEST_F(PasswordFormManagerTest, UploadFormData_NewPassword) {
|
| // For newly saved passwords, upload a password vote for autofill::PASSWORD.
|
| // Don't vote for the username field yet.
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), *saved_match(), false);
|
| + client()->driver(), *saved_match(), false,
|
| + base::WrapUnique(new MockFormSaver()));
|
| SimulateMatchingPhase(&form_manager, RESULT_NO_MATCH);
|
|
|
| PasswordForm form_to_save(*saved_match());
|
| @@ -1824,7 +1855,8 @@ TEST_F(PasswordFormManagerTest, UploadFormData_NewPassword) {
|
|
|
| // Do not upload a vote if the user is blacklisting the form.
|
| PasswordFormManager blacklist_form_manager(
|
| - password_manager(), client(), client()->driver(), *saved_match(), false);
|
| + password_manager(), client(), client()->driver(), *saved_match(), false,
|
| + base::WrapUnique(new MockFormSaver()));
|
| SimulateMatchingPhase(&blacklist_form_manager, RESULT_NO_MATCH);
|
|
|
| expected_available_field_types.clear();
|
| @@ -1892,9 +1924,8 @@ TEST_F(PasswordFormManagerTest, CorrectlySavePasswordWithoutUsernameFields) {
|
| EXPECT_TRUE(form_manager()->IsNewLogin());
|
|
|
| PasswordForm saved_result;
|
| - EXPECT_CALL(*mock_store(), UpdateLogin(_)).Times(0);
|
| - EXPECT_CALL(*mock_store(), UpdateLoginWithPrimaryKey(_, _)).Times(0);
|
| - EXPECT_CALL(*mock_store(), AddLogin(_)).WillOnce(SaveArg<0>(&saved_result));
|
| + EXPECT_CALL(MockFormSaver::Get(form_manager()), Save(_, true, _, _, nullptr))
|
| + .WillOnce(SaveArg<0>(&saved_result));
|
|
|
| form_manager()->Save();
|
|
|
| @@ -1920,7 +1951,8 @@ TEST_F(PasswordFormManagerTest, DriverDeletedBeforeStoreDone) {
|
| form->submit_element = ASCIIToUTF16("s");
|
|
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), *form, false);
|
| + client()->driver(), *form, false,
|
| + base::WrapUnique(new MockFormSaver()));
|
|
|
| EXPECT_CALL(*mock_store(), GetLogins(*form, &form_manager));
|
| form_manager.FetchDataFromPasswordStore();
|
| @@ -1967,7 +1999,8 @@ TEST_F(PasswordFormManagerTest,
|
| base::ASCIIToUTF16("new_password_field");
|
|
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), *observed_form(), false);
|
| + client()->driver(), *observed_form(), false,
|
| + base::WrapUnique(new MockFormSaver()));
|
| SimulateMatchingPhase(&form_manager, RESULT_SAVED_MATCH);
|
|
|
| // The user submits a password on a change-password form, which does not use
|
| @@ -2065,7 +2098,8 @@ TEST_F(PasswordFormManagerTest, TestSuggestingPasswordChangeForms) {
|
| base::ASCIIToUTF16("new_pwd");
|
| PasswordFormManager manager_creds(password_manager(), client(),
|
| client()->driver(),
|
| - observed_change_password_form, false);
|
| + observed_change_password_form, false,
|
| + base::WrapUnique(new MockFormSaver()));
|
| manager_creds.SimulateFetchMatchingLoginsFromPasswordStore();
|
| ScopedVector<PasswordForm> simulated_results;
|
| simulated_results.push_back(CreateSavedMatch(false));
|
| @@ -2094,14 +2128,15 @@ TEST_F(PasswordFormManagerTest, TestUpdateMethod) {
|
| // should not serve as a source for updating meta-information stored with the
|
| // old credentials, such as element names, as they are likely going to be
|
| // different between change password and login forms. To test this in depth,
|
| - // forcibly wipe |submit_element|, which should normally trigger updating this
|
| - // field from |observed_form| in the UpdateLogin() step as a special case. We
|
| - // will verify in the end that this did not happen.
|
| + // forcibly wipe |submit_element|, which should normally trigger updating
|
| + // this field from |observed_form| during updating as a special case. We will
|
| + // verify in the end that this did not happen.
|
| saved_match()->submit_element.clear();
|
|
|
| client()->set_is_update_password_ui_enabled(true);
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), *observed_form(), false);
|
| + client()->driver(), *observed_form(), false,
|
| + base::WrapUnique(new MockFormSaver()));
|
|
|
| SimulateMatchingPhase(&form_manager, RESULT_SAVED_MATCH);
|
| // User submits current and new credentials to the observed form.
|
| @@ -2127,9 +2162,9 @@ TEST_F(PasswordFormManagerTest, TestUpdateMethod) {
|
| form_manager.pending_credentials().password_value);
|
| EXPECT_TRUE(form_manager.pending_credentials().new_password_value.empty());
|
|
|
| - // Trigger saving to exercise some special case handling in UpdateLogin().
|
| + // Trigger saving to exercise some special case handling during updating.
|
| PasswordForm new_credentials;
|
| - EXPECT_CALL(*mock_store(), UpdateLogin(_))
|
| + EXPECT_CALL(MockFormSaver::Get(&form_manager), Save(_, false, _, _, nullptr))
|
| .WillOnce(SaveArg<0>(&new_credentials));
|
|
|
| form_manager.Update(*saved_match());
|
| @@ -2157,13 +2192,14 @@ TEST_F(PasswordFormManagerTest, TestUpdateNoUsernameTextfieldPresent) {
|
| // old credentials, such as element names, as they are likely going to be
|
| // different between change password and login forms. To test this in depth,
|
| // forcibly wipe |submit_element|, which should normally trigger updating this
|
| - // field from |observed_form| in the UpdateLogin() step as a special case. We
|
| + // field from |observed_form| during updating as a special case. We
|
| // will verify in the end that this did not happen.
|
| saved_match()->submit_element.clear();
|
|
|
| client()->set_is_update_password_ui_enabled(true);
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), *observed_form(), false);
|
| + client()->driver(), *observed_form(), false,
|
| + base::WrapUnique(new MockFormSaver()));
|
|
|
| SimulateMatchingPhase(&form_manager, RESULT_SAVED_MATCH);
|
| // User submits current and new credentials to the observed form.
|
| @@ -2191,9 +2227,9 @@ TEST_F(PasswordFormManagerTest, TestUpdateNoUsernameTextfieldPresent) {
|
| form_manager.pending_credentials().password_value);
|
| EXPECT_TRUE(form_manager.pending_credentials().new_password_value.empty());
|
|
|
| - // Trigger saving to exercise some special case handling in UpdateLogin().
|
| + // Trigger saving to exercise some special case handling during updating.
|
| PasswordForm new_credentials;
|
| - EXPECT_CALL(*mock_store(), UpdateLogin(_))
|
| + EXPECT_CALL(MockFormSaver::Get(&form_manager), Save(_, false, _, _, nullptr))
|
| .WillOnce(SaveArg<0>(&new_credentials));
|
|
|
| form_manager.Update(form_manager.pending_credentials());
|
| @@ -2212,7 +2248,8 @@ TEST_F(PasswordFormManagerTest, WipeStoreCopyIfOutdated_BeforeStoreCallback) {
|
| ASSERT_FALSE(form.password_value.empty());
|
|
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), form, false);
|
| + client()->driver(), form, false,
|
| + base::WrapUnique(new MockFormSaver()));
|
|
|
| // Do not notify the store observer after this GetLogins call.
|
| EXPECT_CALL(*mock_store(), GetLogins(_, _));
|
| @@ -2236,7 +2273,8 @@ TEST_F(PasswordFormManagerTest, WipeStoreCopyIfOutdated_NotOutdated) {
|
| ASSERT_FALSE(form.password_value.empty());
|
|
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), form, false);
|
| + client()->driver(), form, false,
|
| + base::WrapUnique(new MockFormSaver()));
|
|
|
| // For GAIA authentication, the first two usernames are equivalent to
|
| // test@gmail.com, but the third is not.
|
| @@ -2266,7 +2304,8 @@ TEST_F(PasswordFormManagerTest, WipeStoreCopyIfOutdated_Outdated) {
|
| ASSERT_FALSE(form.password_value.empty());
|
|
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), form, false);
|
| + client()->driver(), form, false,
|
| + base::WrapUnique(new MockFormSaver()));
|
|
|
| // For GAIA authentication, the first two usernames are equivalent to
|
| // test@gmail.com, but the third is not.
|
| @@ -2296,143 +2335,6 @@ TEST_F(PasswordFormManagerTest, WipeStoreCopyIfOutdated_Outdated) {
|
| 1);
|
| }
|
|
|
| -TEST_F(PasswordFormManagerTest, RemoveNoUsernameAccounts) {
|
| - PasswordForm saved_form = *saved_match();
|
| - saved_form.username_value.clear();
|
| - ScopedVector<PasswordForm> result;
|
| - result.push_back(new PasswordForm(saved_form));
|
| - form_manager()->SimulateFetchMatchingLoginsFromPasswordStore();
|
| - form_manager()->OnGetPasswordStoreResults(std::move(result));
|
| -
|
| - PasswordForm submitted_form(*observed_form());
|
| - submitted_form.preferred = true;
|
| - submitted_form.username_value = saved_match()->username_value;
|
| - submitted_form.password_value = saved_match()->password_value;
|
| -
|
| - saved_form.preferred = false;
|
| - EXPECT_CALL(*mock_store(),
|
| - AddLogin(CheckUsername(saved_match()->username_value)));
|
| - EXPECT_CALL(*mock_store(), RemoveLogin(saved_form));
|
| -
|
| - form_manager()->ProvisionallySave(
|
| - submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
|
| - form_manager()->Save();
|
| -}
|
| -
|
| -TEST_F(PasswordFormManagerTest, NotRemovePSLNoUsernameAccounts) {
|
| - PasswordForm saved_form = *saved_match();
|
| - saved_form.username_value.clear();
|
| - saved_form.is_public_suffix_match = true;
|
| - ScopedVector<PasswordForm> result;
|
| - result.push_back(new PasswordForm(saved_form));
|
| - form_manager()->SimulateFetchMatchingLoginsFromPasswordStore();
|
| - form_manager()->OnGetPasswordStoreResults(std::move(result));
|
| -
|
| - PasswordForm submitted_form(*observed_form());
|
| - submitted_form.preferred = true;
|
| - submitted_form.username_value = saved_match()->username_value;
|
| - submitted_form.password_value = saved_match()->password_value;
|
| -
|
| - EXPECT_CALL(*mock_store(),
|
| - AddLogin(CheckUsername(saved_match()->username_value)));
|
| - EXPECT_CALL(*mock_store(), RemoveLogin(_)).Times(0);
|
| -
|
| - form_manager()->ProvisionallySave(
|
| - submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
|
| - form_manager()->Save();
|
| -}
|
| -
|
| -TEST_F(PasswordFormManagerTest, NotRemoveCredentialsWithUsername) {
|
| - PasswordForm saved_form = *saved_match();
|
| - ASSERT_FALSE(saved_form.username_value.empty());
|
| - ScopedVector<PasswordForm> result;
|
| - result.push_back(new PasswordForm(saved_form));
|
| - form_manager()->SimulateFetchMatchingLoginsFromPasswordStore();
|
| - form_manager()->OnGetPasswordStoreResults(std::move(result));
|
| -
|
| - PasswordForm submitted_form(*observed_form());
|
| - submitted_form.preferred = true;
|
| - base::string16 username = saved_form.username_value + ASCIIToUTF16("1");
|
| - submitted_form.username_value = username;
|
| - submitted_form.password_value = saved_match()->password_value;
|
| -
|
| - EXPECT_CALL(*mock_store(), AddLogin(CheckUsername(username)));
|
| - EXPECT_CALL(*mock_store(), RemoveLogin(_)).Times(0);
|
| -
|
| - form_manager()->ProvisionallySave(
|
| - submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
|
| - form_manager()->Save();
|
| -}
|
| -
|
| -TEST_F(PasswordFormManagerTest, NotRemoveCredentialsWithDiferrentPassword) {
|
| - PasswordForm saved_form = *saved_match();
|
| - saved_form.username_value.clear();
|
| - ScopedVector<PasswordForm> result;
|
| - result.push_back(new PasswordForm(saved_form));
|
| - form_manager()->SimulateFetchMatchingLoginsFromPasswordStore();
|
| - form_manager()->OnGetPasswordStoreResults(std::move(result));
|
| -
|
| - PasswordForm submitted_form(*observed_form());
|
| - submitted_form.preferred = true;
|
| - submitted_form.username_value = saved_match()->username_value;
|
| - submitted_form.password_value = saved_form.password_value + ASCIIToUTF16("1");
|
| -
|
| - EXPECT_CALL(*mock_store(),
|
| - AddLogin(CheckUsername(saved_match()->username_value)));
|
| - EXPECT_CALL(*mock_store(), RemoveLogin(_)).Times(0);
|
| -
|
| - form_manager()->ProvisionallySave(
|
| - submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
|
| - form_manager()->Save();
|
| -}
|
| -
|
| -TEST_F(PasswordFormManagerTest, SaveNoUsernameEvenIfWithUsernamePresent) {
|
| - PasswordForm* saved_form = saved_match();
|
| - ASSERT_FALSE(saved_match()->username_value.empty());
|
| - ScopedVector<PasswordForm> result;
|
| - result.push_back(new PasswordForm(*saved_form));
|
| - form_manager()->SimulateFetchMatchingLoginsFromPasswordStore();
|
| - form_manager()->OnGetPasswordStoreResults(std::move(result));
|
| -
|
| - PasswordForm submitted_form(*observed_form());
|
| - submitted_form.preferred = true;
|
| - submitted_form.username_value.clear();
|
| -
|
| - EXPECT_CALL(*mock_store(), AddLogin(CheckUsername(base::string16())));
|
| - EXPECT_CALL(*mock_store(), RemoveLogin(_)).Times(0);
|
| -
|
| - form_manager()->ProvisionallySave(
|
| - submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
|
| - form_manager()->Save();
|
| -}
|
| -
|
| -TEST_F(PasswordFormManagerTest, NotRemoveOnUpdate) {
|
| - ScopedVector<PasswordForm> result;
|
| - PasswordForm saved_form = *saved_match();
|
| - ASSERT_FALSE(saved_form.username_value.empty());
|
| - result.push_back(new PasswordForm(saved_form));
|
| - saved_form.username_value.clear();
|
| - saved_form.preferred = false;
|
| - result.push_back(new PasswordForm(saved_form));
|
| - form_manager()->SimulateFetchMatchingLoginsFromPasswordStore();
|
| - form_manager()->OnGetPasswordStoreResults(std::move(result));
|
| -
|
| - PasswordForm submitted_form(*observed_form());
|
| - submitted_form.preferred = true;
|
| - submitted_form.username_value = saved_match()->username_value;
|
| - submitted_form.password_value = saved_form.password_value + ASCIIToUTF16("1");
|
| -
|
| - EXPECT_CALL(*mock_store(),
|
| - UpdateLogin(CheckUsername(saved_match()->username_value)));
|
| - EXPECT_CALL(*mock_store(), RemoveLogin(_)).Times(0);
|
| - EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
|
| - StartUploadRequest(_, false, _, _, true));
|
| -
|
| - form_manager()->ProvisionallySave(
|
| - submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
|
| - form_manager()->Save();
|
| -}
|
| -
|
| TEST_F(PasswordFormManagerTest, GenerationStatusChangedWithPassword) {
|
| EXPECT_CALL(*mock_store(), GetLogins(*observed_form(), form_manager()));
|
| form_manager()->FetchDataFromPasswordStore();
|
| @@ -2455,7 +2357,7 @@ TEST_F(PasswordFormManagerTest, GenerationStatusChangedWithPassword) {
|
| submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
|
|
|
| PasswordForm new_credentials;
|
| - EXPECT_CALL(*mock_store(), UpdateLogin(_))
|
| + EXPECT_CALL(MockFormSaver::Get(form_manager()), Save(_, false, _, _, nullptr))
|
| .WillOnce(testing::SaveArg<0>(&new_credentials));
|
| form_manager()->Save();
|
|
|
| @@ -2485,7 +2387,7 @@ TEST_F(PasswordFormManagerTest, GenerationStatusNotUpdatedIfPasswordUnchanged) {
|
| submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
|
|
|
| PasswordForm new_credentials;
|
| - EXPECT_CALL(*mock_store(), UpdateLogin(_))
|
| + EXPECT_CALL(MockFormSaver::Get(form_manager()), Save(_, false, _, _, nullptr))
|
| .WillOnce(testing::SaveArg<0>(&new_credentials));
|
| form_manager()->Save();
|
|
|
| @@ -2607,7 +2509,8 @@ TEST_F(PasswordFormManagerTest, UploadChangePasswordForm_NOT_NEW_PASSWORD) {
|
|
|
| TEST_F(PasswordFormManagerTest, TestUpdatePSLMatchedCredentials) {
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), *observed_form(), false);
|
| + client()->driver(), *observed_form(), false,
|
| + base::WrapUnique(new MockFormSaver()));
|
| SimulateMatchingPhase(&form_manager, RESULT_SAVED_MATCH | RESULT_PSL_MATCH);
|
|
|
| // User submits a credentials with an old username and a new password.
|
| @@ -2623,11 +2526,12 @@ TEST_F(PasswordFormManagerTest, TestUpdatePSLMatchedCredentials) {
|
| // login.
|
| EXPECT_FALSE(form_manager.IsNewLogin());
|
|
|
| - // Trigger saving to exercise some special case handling in UpdateLogin().
|
| - PasswordForm new_credentials[2];
|
| - EXPECT_CALL(*mock_store(), UpdateLogin(_))
|
| - .WillOnce(testing::SaveArg<0>(&new_credentials[0]))
|
| - .WillOnce(testing::SaveArg<0>(&new_credentials[1]));
|
| + // Trigger saving to exercise some special case handling during updating.
|
| + PasswordForm new_credentials;
|
| + std::vector<const autofill::PasswordForm*> credentials_to_update;
|
| + EXPECT_CALL(MockFormSaver::Get(&form_manager), Save(_, false, _, _, nullptr))
|
| + .WillOnce(testing::DoAll(SaveArg<0>(&new_credentials),
|
| + SaveArgPointee<3>(&credentials_to_update)));
|
| EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
|
| StartUploadRequest(_, false, _, _, true));
|
|
|
| @@ -2635,28 +2539,29 @@ TEST_F(PasswordFormManagerTest, TestUpdatePSLMatchedCredentials) {
|
| Mock::VerifyAndClearExpectations(mock_store());
|
|
|
| // No meta-information should be updated, only the password.
|
| - EXPECT_EQ(credentials.password_value, new_credentials[0].password_value);
|
| - EXPECT_EQ(saved_match()->username_value, new_credentials[0].username_value);
|
| - EXPECT_EQ(saved_match()->username_element,
|
| - new_credentials[0].username_element);
|
| - EXPECT_EQ(saved_match()->password_element,
|
| - new_credentials[0].password_element);
|
| - EXPECT_EQ(saved_match()->origin, new_credentials[0].origin);
|
| -
|
| - EXPECT_EQ(credentials.password_value, new_credentials[1].password_value);
|
| + EXPECT_EQ(credentials.password_value, new_credentials.password_value);
|
| + EXPECT_EQ(saved_match()->username_value, new_credentials.username_value);
|
| + EXPECT_EQ(saved_match()->username_element, new_credentials.username_element);
|
| + EXPECT_EQ(saved_match()->password_element, new_credentials.password_element);
|
| + EXPECT_EQ(saved_match()->origin, new_credentials.origin);
|
| +
|
| + ASSERT_EQ(1u, credentials_to_update.size());
|
| + EXPECT_EQ(credentials.password_value,
|
| + credentials_to_update[0]->password_value);
|
| EXPECT_EQ(psl_saved_match()->username_element,
|
| - new_credentials[1].username_element);
|
| + credentials_to_update[0]->username_element);
|
| EXPECT_EQ(psl_saved_match()->username_element,
|
| - new_credentials[1].username_element);
|
| + credentials_to_update[0]->username_element);
|
| EXPECT_EQ(psl_saved_match()->password_element,
|
| - new_credentials[1].password_element);
|
| - EXPECT_EQ(psl_saved_match()->origin, new_credentials[1].origin);
|
| + credentials_to_update[0]->password_element);
|
| + EXPECT_EQ(psl_saved_match()->origin, credentials_to_update[0]->origin);
|
| }
|
|
|
| TEST_F(PasswordFormManagerTest,
|
| TestNotUpdatePSLMatchedCredentialsWithAnotherUsername) {
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), *observed_form(), false);
|
| + client()->driver(), *observed_form(), false,
|
| + base::WrapUnique(new MockFormSaver()));
|
| psl_saved_match()->username_value += ASCIIToUTF16("1");
|
| SimulateMatchingPhase(&form_manager, RESULT_SAVED_MATCH | RESULT_PSL_MATCH);
|
|
|
| @@ -2673,9 +2578,10 @@ TEST_F(PasswordFormManagerTest,
|
| // login.
|
| EXPECT_FALSE(form_manager.IsNewLogin());
|
|
|
| - // Trigger saving to exercise some special case handling in UpdateLogin().
|
| + // Trigger saving to exercise some special case handling during updating.
|
| PasswordForm new_credentials;
|
| - EXPECT_CALL(*mock_store(), UpdateLogin(_))
|
| + EXPECT_CALL(MockFormSaver::Get(&form_manager),
|
| + Save(_, false, _, Pointee(IsEmpty()), nullptr))
|
| .WillOnce(testing::SaveArg<0>(&new_credentials));
|
| EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
|
| StartUploadRequest(_, false, _, _, true));
|
| @@ -2694,7 +2600,8 @@ TEST_F(PasswordFormManagerTest,
|
| TEST_F(PasswordFormManagerTest,
|
| TestNotUpdatePSLMatchedCredentialsWithAnotherPassword) {
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), *observed_form(), false);
|
| + client()->driver(), *observed_form(), false,
|
| + base::WrapUnique(new MockFormSaver()));
|
| psl_saved_match()->password_value += ASCIIToUTF16("1");
|
| SimulateMatchingPhase(&form_manager, RESULT_SAVED_MATCH | RESULT_PSL_MATCH);
|
|
|
| @@ -2711,9 +2618,10 @@ TEST_F(PasswordFormManagerTest,
|
| // login.
|
| EXPECT_FALSE(form_manager.IsNewLogin());
|
|
|
| - // Trigger saving to exercise some special case handling in UpdateLogin().
|
| + // Trigger saving to exercise some special case handling during updating.
|
| PasswordForm new_credentials;
|
| - EXPECT_CALL(*mock_store(), UpdateLogin(_))
|
| + EXPECT_CALL(MockFormSaver::Get(&form_manager),
|
| + Save(_, false, _, Pointee(IsEmpty()), nullptr))
|
| .WillOnce(testing::SaveArg<0>(&new_credentials));
|
| EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
|
| StartUploadRequest(_, false, _, _, true));
|
| @@ -2731,7 +2639,8 @@ TEST_F(PasswordFormManagerTest,
|
|
|
| TEST_F(PasswordFormManagerTest, TestNotUpdateWhenOnlyPSLMatched) {
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), *observed_form(), false);
|
| + client()->driver(), *observed_form(), false,
|
| + base::WrapUnique(new MockFormSaver()));
|
| SimulateMatchingPhase(&form_manager, RESULT_PSL_MATCH);
|
|
|
| // User submits a credentials with an old username and a new password.
|
| @@ -2747,8 +2656,7 @@ TEST_F(PasswordFormManagerTest, TestNotUpdateWhenOnlyPSLMatched) {
|
| // PSL matched credential should not be updated, since we are not sure that
|
| // this is the same credential as submitted one.
|
| PasswordForm new_credentials;
|
| - EXPECT_CALL(*mock_store(), UpdateLogin(_)).Times(0);
|
| - EXPECT_CALL(*mock_store(), AddLogin(_))
|
| + EXPECT_CALL(MockFormSaver::Get(&form_manager), Save(_, true, _, _, nullptr))
|
| .WillOnce(testing::SaveArg<0>(&new_credentials));
|
|
|
| form_manager.Save();
|
| @@ -2916,7 +2824,8 @@ TEST_F(PasswordFormManagerTest,
|
|
|
| client()->set_is_update_password_ui_enabled(true);
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), *observed_form(), false);
|
| + client()->driver(), *observed_form(), false,
|
| + base::WrapUnique(new MockFormSaver()));
|
|
|
| SimulateMatchingPhase(&form_manager, RESULT_SAVED_MATCH);
|
|
|
| @@ -2992,7 +2901,8 @@ TEST_F(PasswordFormManagerTest, FormClassifierVoteUpload) {
|
| submitted_form.password_value = saved_match()->password_value;
|
|
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), form, false);
|
| + client()->driver(), form, false,
|
| + base::WrapUnique(new MockFormSaver()));
|
| base::string16 generation_element = form.password_element;
|
| if (found_generation_element)
|
| form_manager.SaveGenerationFieldDetectedByClassifier(generation_element);
|
| @@ -3025,7 +2935,8 @@ TEST_F(PasswordFormManagerTest, TestSavingAPIFormsWithSamePassword) {
|
| saved_match()->type = autofill::PasswordForm::TYPE_API;
|
|
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), *observed_form(), false);
|
| + client()->driver(), *observed_form(), false,
|
| + base::WrapUnique(new MockFormSaver()));
|
| SimulateMatchingPhase(&form_manager, RESULT_SAVED_MATCH);
|
|
|
| // User submits new credentials with the same password as in already saved
|
| @@ -3042,7 +2953,7 @@ TEST_F(PasswordFormManagerTest, TestSavingAPIFormsWithSamePassword) {
|
| EXPECT_TRUE(form_manager.IsNewLogin());
|
|
|
| PasswordForm new_credentials;
|
| - EXPECT_CALL(*mock_store(), AddLogin(_))
|
| + EXPECT_CALL(MockFormSaver::Get(&form_manager), Save(_, true, _, _, nullptr))
|
| .WillOnce(SaveArg<0>(&new_credentials));
|
|
|
| form_manager.Save();
|
| @@ -3081,7 +2992,8 @@ TEST_F(PasswordFormManagerTest, ProbablyAccountCreationUpload) {
|
| form.form_data = saved_match()->form_data;
|
|
|
| PasswordFormManager form_manager(password_manager(), client(),
|
| - client()->driver(), form, false);
|
| + client()->driver(), form, false,
|
| + base::WrapUnique(new MockFormSaver()));
|
|
|
| PasswordForm form_to_save(form);
|
| form_to_save.preferred = true;
|
|
|