Commit 15feaa66 authored by Vadym Doroshenko's avatar Vadym Doroshenko Committed by Commit Bot

Save vote in FieldInfoManager for SINGLE_USERNAME/NO_USERNAME.

Bug: 959776
Change-Id: I69319dad27040cb8a6203ffd0ac0a1a66fc395c2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1911757Reviewed-by: default avatarVasilii Sukhanov <vasilii@chromium.org>
Commit-Queue: Vadym Doroshenko <dvadym@chromium.org>
Cr-Commit-Position: refs/heads/master@{#714896}
parent 542ab4db
......@@ -21,6 +21,7 @@
#include "components/autofill/core/common/form_data.h"
#include "components/autofill/core/common/form_field_data.h"
#include "components/password_manager/core/browser/browser_save_password_progress_logger.h"
#include "components/password_manager/core/browser/field_info_manager.h"
#include "components/password_manager/core/browser/password_manager_client.h"
#include "components/password_manager/core/browser/password_manager_util.h"
......@@ -490,6 +491,8 @@ void VotesUploader::MaybeSendSingleUsernameVote(bool credentials_saved) {
if (has_username_edited_vote_)
field->set_vote_type(AutofillUploadContents::Field::USERNAME_EDITED);
available_field_types.insert(type);
SaveFieldVote(form_to_upload->form_signature(),
field->GetFieldSignature(), type);
}
field->set_possible_types({type});
}
......@@ -692,4 +695,13 @@ bool VotesUploader::StartUploadRequest(
std::string(), true /* observed_submission */, nullptr /* prefs */);
}
void VotesUploader::SaveFieldVote(uint64_t form_signature,
uint32_t field_signature,
autofill::ServerFieldType field_type) {
FieldInfoManager* field_info_manager = client_->GetFieldInfoManager();
if (!field_info_manager)
return;
field_info_manager->AddFieldType(form_signature, field_signature, field_type);
}
} // namespace password_manager
......@@ -195,6 +195,12 @@ class VotesUploader {
std::unique_ptr<autofill::FormStructure> form_to_upload,
const autofill::ServerFieldTypeSet& available_field_types);
// Save a vote |field_type| for a field with |field_signature| from a form
// with |form_signature| to FieldInfoManager.
void SaveFieldVote(uint64_t form_signature,
uint32_t field_signature,
autofill::ServerFieldType field_type);
// The client which implements embedder-specific PasswordManager operations.
PasswordManagerClient* client_;
......
......@@ -17,6 +17,8 @@
#include "components/autofill/core/browser/autofill_download_manager.h"
#include "components/autofill/core/browser/form_structure.h"
#include "components/autofill/core/common/form_data.h"
#include "components/password_manager/core/browser/field_info_manager.h"
#include "components/password_manager/core/browser/mock_password_store.h"
#include "components/password_manager/core/browser/stub_password_manager_client.h"
#include "components/password_manager/core/browser/vote_uploads_test_matchers.h"
#include "components/prefs/pref_registry_simple.h"
......@@ -48,6 +50,12 @@ using testing::SaveArg;
namespace password_manager {
namespace {
MATCHER_P3(FieldInfoHasData, form_signature, field_signature, field_type, "") {
return arg.form_signature == form_signature &&
arg.field_signature == field_signature &&
arg.field_type == field_type && arg.create_time != base::Time();
}
constexpr int kNumberOfPasswordAttributes =
static_cast<int>(PasswordAttribute::kPasswordAttributesCount);
......@@ -78,6 +86,7 @@ class MockAutofillDownloadManager : public AutofillDownloadManager {
class MockPasswordManagerClient : public StubPasswordManagerClient {
public:
MOCK_METHOD0(GetAutofillDownloadManager, AutofillDownloadManager*());
MOCK_CONST_METHOD0(GetFieldInfoManager, FieldInfoManager*());
};
} // namespace
......@@ -418,4 +427,38 @@ TEST_F(VotesUploaderTest, UploadSingleUsername) {
}
}
TEST_F(VotesUploaderTest, SaveSingleUsernameVote) {
VotesUploader votes_uploader(&client_, false);
constexpr uint32_t kUsernameRendererId = 101;
constexpr uint32_t kUsernameFieldSignature = 1234;
constexpr uint64_t kFormSignature = 1000;
FormPredictions form_predictions;
form_predictions.form_signature = kFormSignature;
// Add the username field.
form_predictions.fields.emplace_back();
form_predictions.fields.back().renderer_id = kUsernameRendererId;
form_predictions.fields.back().signature = kUsernameFieldSignature;
votes_uploader.set_single_username_vote_data(kUsernameRendererId,
form_predictions);
// Init store and expect that adding field info is called.
scoped_refptr<MockPasswordStore> store = new MockPasswordStore;
store->Init(syncer::SyncableService::StartSyncFlare(), /*prefs=*/nullptr);
EXPECT_CALL(*store,
AddFieldInfoImpl(FieldInfoHasData(
kFormSignature, kUsernameFieldSignature, SINGLE_USERNAME)));
// Init FieldInfoManager.
FieldInfoManager field_info_manager(store);
EXPECT_CALL(client_, GetFieldInfoManager())
.WillOnce(Return(&field_info_manager));
votes_uploader.MaybeSendSingleUsernameVote(true /* credentials_saved */);
task_environment_.RunUntilIdle();
store->ShutdownOnUIThread();
}
} // 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