Commit 74600408 authored by Jan Wilken Dörrie's avatar Jan Wilken Dörrie Committed by Commit Bot

[Passwords] Make observed_form optional

This change makes the observed_form parameter in the APIs of
VotesUploader and PasswordSaveManager optional, since it doesn't exist
when saving or updating HTTP and proxy auth credentials.

TBR=arbesser

Bug: 943045
Change-Id: I9794c65f8950a2cb20bb4d9882cc1a2730508159
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2341637
Commit-Queue: Jan Wilken Dörrie <jdoerrie@chromium.org>
Reviewed-by: default avatarVasilii Sukhanov <vasilii@chromium.org>
Cr-Commit-Position: refs/heads/master@{#798596}
parent 008f827b
...@@ -196,7 +196,7 @@ class WebsiteLoginManagerImpl::UpdatePasswordRequest ...@@ -196,7 +196,7 @@ class WebsiteLoginManagerImpl::UpdatePasswordRequest
} }
void CommitGeneratedPassword() { void CommitGeneratedPassword() {
password_save_manager_->Save(form_data_ /* observed_form */, password_save_manager_->Save(&form_data_ /* observed_form */,
password_form_); password_form_);
} }
...@@ -206,7 +206,7 @@ class WebsiteLoginManagerImpl::UpdatePasswordRequest ...@@ -206,7 +206,7 @@ class WebsiteLoginManagerImpl::UpdatePasswordRequest
metrics_recorder_, &votes_uploader_); metrics_recorder_, &votes_uploader_);
password_save_manager_->PresaveGeneratedPassword(password_form_); password_save_manager_->PresaveGeneratedPassword(password_form_);
password_save_manager_->CreatePendingCredentials( password_save_manager_->CreatePendingCredentials(
password_form_, form_data_ /* observed_form */, password_form_, &form_data_ /* observed_form */,
form_data_ /* submitted_form */, false /* is_http_auth */, form_data_ /* submitted_form */, false /* is_http_auth */,
false /* is_credential_api_save */); false /* is_credential_api_save */);
......
...@@ -312,7 +312,7 @@ void PasswordFormManager::Save() { ...@@ -312,7 +312,7 @@ void PasswordFormManager::Save() {
newly_blacklisted_ = false; newly_blacklisted_ = false;
} }
password_save_manager_->Save(observed_form_, *parsed_submitted_form_); password_save_manager_->Save(&observed_form_, *parsed_submitted_form_);
client_->UpdateFormManagers(); client_->UpdateFormManagers();
} }
...@@ -323,7 +323,7 @@ void PasswordFormManager::Update(const PasswordForm& credentials_to_update) { ...@@ -323,7 +323,7 @@ void PasswordFormManager::Update(const PasswordForm& credentials_to_update) {
metrics_recorder_->SetSubmissionIndicatorEvent( metrics_recorder_->SetSubmissionIndicatorEvent(
parsed_submitted_form_->submission_event); parsed_submitted_form_->submission_event);
password_save_manager_->Update(credentials_to_update, observed_form_, password_save_manager_->Update(credentials_to_update, &observed_form_,
*parsed_submitted_form_); *parsed_submitted_form_);
client_->UpdateFormManagers(); client_->UpdateFormManagers();
...@@ -685,7 +685,7 @@ void PasswordFormManager::CreatePendingCredentials() { ...@@ -685,7 +685,7 @@ void PasswordFormManager::CreatePendingCredentials() {
return; return;
password_save_manager_->CreatePendingCredentials( password_save_manager_->CreatePendingCredentials(
*parsed_submitted_form_, observed_form_, submitted_form_, IsHttpAuth(), *parsed_submitted_form_, &observed_form_, submitted_form_, IsHttpAuth(),
IsCredentialAPISave()); IsCredentialAPISave());
} }
......
...@@ -105,8 +105,8 @@ MATCHER_P(FormHasPassword, password_value, "") { ...@@ -105,8 +105,8 @@ MATCHER_P(FormHasPassword, password_value, "") {
return arg.new_password_value == password_value; return arg.new_password_value == password_value;
} }
MATCHER_P(FormDataEqualTo, form_data, "") { MATCHER_P(FormDataPointeeEqualTo, form_data, "") {
return autofill::FormDataEqualForTesting(arg, form_data); return autofill::FormDataEqualForTesting(*arg, form_data);
} }
class MockPasswordManagerDriver : public StubPasswordManagerDriver { class MockPasswordManagerDriver : public StubPasswordManagerDriver {
...@@ -2380,16 +2380,16 @@ class MockPasswordSaveManager : public PasswordSaveManager { ...@@ -2380,16 +2380,16 @@ class MockPasswordSaveManager : public PasswordSaveManager {
MOCK_CONST_METHOD0(GetFormSaver, FormSaver*()); MOCK_CONST_METHOD0(GetFormSaver, FormSaver*());
MOCK_METHOD5(CreatePendingCredentials, MOCK_METHOD5(CreatePendingCredentials,
void(const autofill::PasswordForm&, void(const autofill::PasswordForm&,
const autofill::FormData&, const autofill::FormData*,
const autofill::FormData&, const autofill::FormData&,
bool, bool,
bool)); bool));
MOCK_METHOD0(ResetPendingCredentials, void()); MOCK_METHOD0(ResetPendingCredentials, void());
MOCK_METHOD2(Save, MOCK_METHOD2(Save,
void(const autofill::FormData&, const autofill::PasswordForm&)); void(const autofill::FormData*, const autofill::PasswordForm&));
MOCK_METHOD3(Update, MOCK_METHOD3(Update,
void(const autofill::PasswordForm&, void(const autofill::PasswordForm&,
const autofill::FormData&, const autofill::FormData*,
const autofill::PasswordForm&)); const autofill::PasswordForm&));
MOCK_METHOD1(PermanentlyBlacklist, void(const PasswordStore::FormDigest&)); MOCK_METHOD1(PermanentlyBlacklist, void(const PasswordStore::FormDigest&));
MOCK_METHOD1(Unblacklist, void(const PasswordStore::FormDigest&)); MOCK_METHOD1(Unblacklist, void(const PasswordStore::FormDigest&));
...@@ -2475,7 +2475,7 @@ TEST_F(PasswordFormManagerTestWithMockedSaver, SaveCredentials) { ...@@ -2475,7 +2475,7 @@ TEST_F(PasswordFormManagerTestWithMockedSaver, SaveCredentials) {
form_manager_->ProvisionallySave(submitted_form, &driver_, nullptr)); form_manager_->ProvisionallySave(submitted_form, &driver_, nullptr));
PasswordForm updated_form; PasswordForm updated_form;
EXPECT_CALL(*mock_password_save_manager(), EXPECT_CALL(*mock_password_save_manager(),
Save(FormDataEqualTo(observed_form_), _)) Save(FormDataPointeeEqualTo(observed_form_), _))
.WillOnce(SaveArg<1>(&updated_form)); .WillOnce(SaveArg<1>(&updated_form));
EXPECT_CALL(client_, UpdateFormManagers()); EXPECT_CALL(client_, UpdateFormManagers());
form_manager_->Save(); form_manager_->Save();
...@@ -2692,7 +2692,7 @@ TEST_F(PasswordFormManagerTestWithMockedSaver, ...@@ -2692,7 +2692,7 @@ TEST_F(PasswordFormManagerTestWithMockedSaver,
EXPECT_TRUE( EXPECT_TRUE(
form_manager_->ProvisionallySave(submitted_form_, &driver_, nullptr)); form_manager_->ProvisionallySave(submitted_form_, &driver_, nullptr));
EXPECT_CALL(*mock_password_save_manager(), EXPECT_CALL(*mock_password_save_manager(),
Save(FormDataEqualTo(submitted_form_), _)) Save(FormDataPointeeEqualTo(submitted_form_), _))
.WillOnce(SaveArg<1>(&updated_form)); .WillOnce(SaveArg<1>(&updated_form));
form_manager_->Save(); form_manager_->Save();
EXPECT_EQ(submitted_form_.fields[kUsernameFieldIndex].value, EXPECT_EQ(submitted_form_.fields[kUsernameFieldIndex].value,
......
...@@ -50,22 +50,28 @@ class PasswordSaveManager { ...@@ -50,22 +50,28 @@ class PasswordSaveManager {
virtual FormSaver* GetFormSaver() const = 0; virtual FormSaver* GetFormSaver() const = 0;
// Create pending credentials from |parsed_submitted_form| and // Create pending credentials from |parsed_submitted_form| and |observed_form|
// |parsed_observed_form| and |submitted_form|. // and |submitted_form|. In the case of HTTP or proxy auth no |observed_form|
// exists, so this parameter is optional.
virtual void CreatePendingCredentials( virtual void CreatePendingCredentials(
const autofill::PasswordForm& parsed_submitted_form, const autofill::PasswordForm& parsed_submitted_form,
const autofill::FormData& observed_form, const autofill::FormData* observed_form,
const autofill::FormData& submitted_form, const autofill::FormData& submitted_form,
bool is_http_auth, bool is_http_auth,
bool is_credential_api_save) = 0; bool is_credential_api_save) = 0;
virtual void ResetPendingCredentials() = 0; virtual void ResetPendingCredentials() = 0;
virtual void Save(const autofill::FormData& observed_form, // Saves `parsed_submitted_form` to the store. An optional `observed_form` is
// passed along to be able to send votes. This is null for HTTP or proxy auth.
virtual void Save(const autofill::FormData* observed_form,
const autofill::PasswordForm& parsed_submitted_form) = 0; const autofill::PasswordForm& parsed_submitted_form) = 0;
// Replaces `credentials_to_update` with `parsed_submitted_form` in the store.
// An optional `observed_form` is passed along to be able to send votes. This
// is null for HTTP or proxy auth.
virtual void Update(const autofill::PasswordForm& credentials_to_update, virtual void Update(const autofill::PasswordForm& credentials_to_update,
const autofill::FormData& observed_form, const autofill::FormData* observed_form,
const autofill::PasswordForm& parsed_submitted_form) = 0; const autofill::PasswordForm& parsed_submitted_form) = 0;
virtual void PermanentlyBlacklist( virtual void PermanentlyBlacklist(
......
...@@ -41,7 +41,7 @@ ValueElementPair PasswordToSave(const PasswordForm& form) { ...@@ -41,7 +41,7 @@ ValueElementPair PasswordToSave(const PasswordForm& form) {
PasswordForm PendingCredentialsForNewCredentials( PasswordForm PendingCredentialsForNewCredentials(
const PasswordForm& parsed_submitted_form, const PasswordForm& parsed_submitted_form,
const FormData& observed_form, const FormData* observed_form,
const base::string16& password_element, const base::string16& password_element,
bool is_http_auth, bool is_http_auth,
bool is_credential_api_save) { bool is_credential_api_save) {
...@@ -49,7 +49,8 @@ PasswordForm PendingCredentialsForNewCredentials( ...@@ -49,7 +49,8 @@ PasswordForm PendingCredentialsForNewCredentials(
return parsed_submitted_form; return parsed_submitted_form;
PasswordForm pending_credentials = parsed_submitted_form; PasswordForm pending_credentials = parsed_submitted_form;
pending_credentials.form_data = observed_form; if (observed_form)
pending_credentials.form_data = *observed_form;
// The password value will be filled in later, remove any garbage for now. // The password value will be filled in later, remove any garbage for now.
pending_credentials.password_value.clear(); pending_credentials.password_value.clear();
// The password element should be determined earlier in |PasswordToSave|. // The password element should be determined earlier in |PasswordToSave|.
...@@ -156,7 +157,7 @@ void PasswordSaveManagerImpl::Init( ...@@ -156,7 +157,7 @@ void PasswordSaveManagerImpl::Init(
void PasswordSaveManagerImpl::CreatePendingCredentials( void PasswordSaveManagerImpl::CreatePendingCredentials(
const PasswordForm& parsed_submitted_form, const PasswordForm& parsed_submitted_form,
const FormData& observed_form, const FormData* observed_form,
const FormData& submitted_form, const FormData& submitted_form,
bool is_http_auth, bool is_http_auth,
bool is_credential_api_save) { bool is_credential_api_save) {
...@@ -214,7 +215,7 @@ void PasswordSaveManagerImpl::ResetPendingCredentials() { ...@@ -214,7 +215,7 @@ void PasswordSaveManagerImpl::ResetPendingCredentials() {
pending_credentials_state_ = PendingCredentialsState::NONE; pending_credentials_state_ = PendingCredentialsState::NONE;
} }
void PasswordSaveManagerImpl::Save(const FormData& observed_form, void PasswordSaveManagerImpl::Save(const FormData* observed_form,
const PasswordForm& parsed_submitted_form) { const PasswordForm& parsed_submitted_form) {
if (IsPasswordUpdate() && if (IsPasswordUpdate() &&
pending_credentials_.type == PasswordForm::Type::kGenerated && pending_credentials_.type == PasswordForm::Type::kGenerated &&
...@@ -241,7 +242,7 @@ void PasswordSaveManagerImpl::Save(const FormData& observed_form, ...@@ -241,7 +242,7 @@ void PasswordSaveManagerImpl::Save(const FormData& observed_form,
void PasswordSaveManagerImpl::Update( void PasswordSaveManagerImpl::Update(
const PasswordForm& credentials_to_update, const PasswordForm& credentials_to_update,
const FormData& observed_form, const FormData* observed_form,
const PasswordForm& parsed_submitted_form) { const PasswordForm& parsed_submitted_form) {
base::string16 password_to_save = pending_credentials_.password_value; base::string16 password_to_save = pending_credentials_.password_value;
bool skip_zero_click = pending_credentials_.skip_zero_click; bool skip_zero_click = pending_credentials_.skip_zero_click;
...@@ -375,7 +376,7 @@ PendingCredentialsState PasswordSaveManagerImpl::ComputePendingCredentialsState( ...@@ -375,7 +376,7 @@ PendingCredentialsState PasswordSaveManagerImpl::ComputePendingCredentialsState(
PasswordForm PasswordSaveManagerImpl::BuildPendingCredentials( PasswordForm PasswordSaveManagerImpl::BuildPendingCredentials(
PendingCredentialsState pending_credentials_state, PendingCredentialsState pending_credentials_state,
const PasswordForm& parsed_submitted_form, const PasswordForm& parsed_submitted_form,
const FormData& observed_form, const FormData* observed_form,
const FormData& submitted_form, const FormData& submitted_form,
const base::Optional<base::string16>& generated_password, const base::Optional<base::string16>& generated_password,
bool is_http_auth, bool is_http_auth,
...@@ -458,7 +459,7 @@ PasswordSaveManagerImpl::FindSimilarSavedFormAndComputeState( ...@@ -458,7 +459,7 @@ PasswordSaveManagerImpl::FindSimilarSavedFormAndComputeState(
} }
void PasswordSaveManagerImpl::SavePendingToStore( void PasswordSaveManagerImpl::SavePendingToStore(
const FormData& observed_form, const FormData* observed_form,
const PasswordForm& parsed_submitted_form) { const PasswordForm& parsed_submitted_form) {
UploadVotesAndMetrics(observed_form, parsed_submitted_form); UploadVotesAndMetrics(observed_form, parsed_submitted_form);
...@@ -494,16 +495,19 @@ base::string16 PasswordSaveManagerImpl::GetOldPassword( ...@@ -494,16 +495,19 @@ base::string16 PasswordSaveManagerImpl::GetOldPassword(
} }
void PasswordSaveManagerImpl::UploadVotesAndMetrics( void PasswordSaveManagerImpl::UploadVotesAndMetrics(
const FormData& observed_form, const FormData* observed_form,
const PasswordForm& parsed_submitted_form) { const PasswordForm& parsed_submitted_form) {
if (IsNewLogin()) { if (IsNewLogin()) {
metrics_util::LogNewlySavedPasswordIsGenerated( metrics_util::LogNewlySavedPasswordIsGenerated(
pending_credentials_.type == PasswordForm::Type::kGenerated, pending_credentials_.type == PasswordForm::Type::kGenerated,
client_->GetPasswordFeatureManager() client_->GetPasswordFeatureManager()
->ComputePasswordAccountStorageUsageLevel()); ->ComputePasswordAccountStorageUsageLevel());
votes_uploader_->SendVotesOnSave(observed_form, parsed_submitted_form, // Don't send votes if there was no observed form.
form_fetcher_->GetBestMatches(), if (observed_form) {
&pending_credentials_); votes_uploader_->SendVotesOnSave(*observed_form, parsed_submitted_form,
form_fetcher_->GetBestMatches(),
&pending_credentials_);
}
return; return;
} }
...@@ -521,11 +525,12 @@ void PasswordSaveManagerImpl::UploadVotesAndMetrics( ...@@ -521,11 +525,12 @@ void PasswordSaveManagerImpl::UploadVotesAndMetrics(
base::UserMetricsAction("PasswordManager_LoginFollowingAutofill")); base::UserMetricsAction("PasswordManager_LoginFollowingAutofill"));
// Check to see if this form is a candidate for password generation. // Check to see if this form is a candidate for password generation.
// Do not send votes on change password forms, since they were already sent // Do not send votes if there was no observed form. Furthermore, don't send
// in Update() method. // votes on change password forms, since they were already sent in Update()
if (!parsed_submitted_form.IsPossibleChangePasswordForm()) { // method.
if (observed_form && !parsed_submitted_form.IsPossibleChangePasswordForm()) {
votes_uploader_->SendVoteOnCredentialsReuse( votes_uploader_->SendVoteOnCredentialsReuse(
observed_form, parsed_submitted_form, &pending_credentials_); *observed_form, parsed_submitted_form, &pending_credentials_);
} }
if (IsPasswordUpdate()) { if (IsPasswordUpdate()) {
votes_uploader_->UploadPasswordVote( votes_uploader_->UploadPasswordVote(
......
...@@ -43,18 +43,18 @@ class PasswordSaveManagerImpl : public PasswordSaveManager { ...@@ -43,18 +43,18 @@ class PasswordSaveManagerImpl : public PasswordSaveManager {
// and |submitted_form|. // and |submitted_form|.
void CreatePendingCredentials( void CreatePendingCredentials(
const autofill::PasswordForm& parsed_submitted_form, const autofill::PasswordForm& parsed_submitted_form,
const autofill::FormData& observed_form, const autofill::FormData* observed_form,
const autofill::FormData& submitted_form, const autofill::FormData& submitted_form,
bool is_http_auth, bool is_http_auth,
bool is_credential_api_save) override; bool is_credential_api_save) override;
void ResetPendingCredentials() override; void ResetPendingCredentials() override;
void Save(const autofill::FormData& observed_form, void Save(const autofill::FormData* observed_form,
const autofill::PasswordForm& parsed_submitted_form) override; const autofill::PasswordForm& parsed_submitted_form) override;
void Update(const autofill::PasswordForm& credentials_to_update, void Update(const autofill::PasswordForm& credentials_to_update,
const autofill::FormData& observed_form, const autofill::FormData* observed_form,
const autofill::PasswordForm& parsed_submitted_form) override; const autofill::PasswordForm& parsed_submitted_form) override;
void PermanentlyBlacklist( void PermanentlyBlacklist(
...@@ -95,7 +95,7 @@ class PasswordSaveManagerImpl : public PasswordSaveManager { ...@@ -95,7 +95,7 @@ class PasswordSaveManagerImpl : public PasswordSaveManager {
static autofill::PasswordForm BuildPendingCredentials( static autofill::PasswordForm BuildPendingCredentials(
PendingCredentialsState pending_credentials_state, PendingCredentialsState pending_credentials_state,
const autofill::PasswordForm& parsed_submitted_form, const autofill::PasswordForm& parsed_submitted_form,
const autofill::FormData& observed_form, const autofill::FormData* observed_form,
const autofill::FormData& submitted_form, const autofill::FormData& submitted_form,
const base::Optional<base::string16>& generated_password, const base::Optional<base::string16>& generated_password,
bool is_http_auth, bool is_http_auth,
...@@ -149,13 +149,13 @@ class PasswordSaveManagerImpl : public PasswordSaveManager { ...@@ -149,13 +149,13 @@ class PasswordSaveManagerImpl : public PasswordSaveManager {
const autofill::PasswordForm& parsed_submitted_form); const autofill::PasswordForm& parsed_submitted_form);
// Save/update |pending_credentials_| to the password store. // Save/update |pending_credentials_| to the password store.
void SavePendingToStore(const autofill::FormData& observed_form, void SavePendingToStore(const autofill::FormData* observed_form,
const autofill::PasswordForm& parsed_submitted_form); const autofill::PasswordForm& parsed_submitted_form);
// This sends needed signals to the autofill server, and also triggers some // This sends needed signals to the autofill server, and also triggers some
// UMA reporting. // UMA reporting.
void UploadVotesAndMetrics( void UploadVotesAndMetrics(
const autofill::FormData& observed_form, const autofill::FormData* observed_form,
const autofill::PasswordForm& parsed_submitted_form); const autofill::PasswordForm& parsed_submitted_form);
// Handles the user flows related to the generation. // Handles the user flows related to the generation.
......
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