Commit 72b2f26c authored by Vadym Doroshenko's avatar Vadym Doroshenko Committed by Commit Bot

Implemention of NewPasswordFormManager::Update.

This function is not needed with a new UI where the user can manually
change username/password in a prompt. So it's not used on Desktop anymore.
But it's still used on Android and iOS. This CL implements the same logic
as in PasswordFormManager::Update.

Bug: 831123
Change-Id: I19edc5a6eddb9afb1d34d9d48bd0935fb551c184
Reviewed-on: https://chromium-review.googlesource.com/c/1340266Reviewed-by: default avatarVadym Doroshenko <dvadym@chromium.org>
Reviewed-by: default avatarVaclav Brozek <vabr@chromium.org>
Commit-Queue: Vadym Doroshenko <dvadym@chromium.org>
Cr-Commit-Position: refs/heads/master@{#609268}
parent 480bd04f
......@@ -284,6 +284,30 @@ void NewPasswordFormManager::Save() {
}
void NewPasswordFormManager::Update(const PasswordForm& credentials_to_update) {
metrics_util::LogPasswordAcceptedSaveUpdateSubmissionIndicatorEvent(
parsed_submitted_form_->submission_event);
metrics_recorder_->SetSubmissionIndicatorEvent(
parsed_submitted_form_->submission_event);
std::unique_ptr<PasswordForm> parsed_observed_form =
parser_.Parse(observed_form_, FormDataParser::Mode::kFilling);
FormStructure form_structure(credentials_to_update.form_data);
votes_uploader_.UploadPasswordVote(
*parsed_observed_form, *parsed_submitted_form_, autofill::NEW_PASSWORD,
form_structure.FormSignatureAsStr());
base::string16 password_to_save = pending_credentials_.password_value;
bool skip_zero_click = pending_credentials_.skip_zero_click;
pending_credentials_ = credentials_to_update;
pending_credentials_.password_value = password_to_save;
pending_credentials_.skip_zero_click = skip_zero_click;
pending_credentials_.preferred = true;
is_new_login_ = false;
ProcessUpdate();
std::vector<PasswordForm> more_credentials_to_update =
FindOtherCredentialsToUpdate();
form_saver_->Update(pending_credentials_, best_matches_,
&more_credentials_to_update, nullptr);
}
void NewPasswordFormManager::UpdateUsername(
......
......@@ -1339,6 +1339,43 @@ TEST_F(NewPasswordFormManagerTest, FillFormWaitForServerPredictions) {
expected_differences_mask, 1);
}
TEST_F(NewPasswordFormManagerTest, Update) {
TestMockTimeTaskRunner::ScopedContext scoped_context(task_runner_.get());
PasswordForm not_best_saved_match = saved_match_;
not_best_saved_match.preferred = false;
PasswordForm saved_match_another_username = saved_match_;
saved_match_another_username.username_value += ASCIIToUTF16("1");
fetcher_->SetNonFederated({&saved_match_, &saved_match_another_username}, 0u);
FormData submitted_form = observed_form_;
base::string16 username = saved_match_.username_value;
base::string16 new_password = saved_match_.password_value + ASCIIToUTF16("1");
submitted_form.fields[kUsernameFieldIndex].value = username;
submitted_form.fields[kPasswordFieldIndex].value = new_password;
EXPECT_TRUE(
form_manager_->SetSubmittedFormIfIsManaged(submitted_form, &driver_));
MockFormSaver& form_saver = MockFormSaver::Get(form_manager_.get());
PasswordForm updated_form;
std::map<base::string16, const PasswordForm*> best_matches;
std::vector<PasswordForm> credentials_to_update;
EXPECT_CALL(form_saver, Update(_, _, _, nullptr))
.WillOnce(DoAll(SaveArg<0>(&updated_form), SaveArg<1>(&best_matches),
SaveArgPointee<2>(&credentials_to_update)));
form_manager_->Update(saved_match_);
EXPECT_TRUE(ArePasswordFormUniqueKeyEqual(saved_match_, updated_form));
EXPECT_TRUE(updated_form.preferred);
EXPECT_EQ(new_password, updated_form.password_value);
EXPECT_EQ(2u, best_matches.size());
ASSERT_TRUE(best_matches.find(username) != best_matches.end());
EXPECT_EQ(saved_match_, *best_matches[username]);
EXPECT_TRUE(credentials_to_update.empty());
}
} // namespace
} // namespace password_manager
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment