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 @@ ...@@ -21,6 +21,7 @@
#include "components/autofill/core/common/form_data.h" #include "components/autofill/core/common/form_data.h"
#include "components/autofill/core/common/form_field_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/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_client.h"
#include "components/password_manager/core/browser/password_manager_util.h" #include "components/password_manager/core/browser/password_manager_util.h"
...@@ -490,6 +491,8 @@ void VotesUploader::MaybeSendSingleUsernameVote(bool credentials_saved) { ...@@ -490,6 +491,8 @@ void VotesUploader::MaybeSendSingleUsernameVote(bool credentials_saved) {
if (has_username_edited_vote_) if (has_username_edited_vote_)
field->set_vote_type(AutofillUploadContents::Field::USERNAME_EDITED); field->set_vote_type(AutofillUploadContents::Field::USERNAME_EDITED);
available_field_types.insert(type); available_field_types.insert(type);
SaveFieldVote(form_to_upload->form_signature(),
field->GetFieldSignature(), type);
} }
field->set_possible_types({type}); field->set_possible_types({type});
} }
...@@ -692,4 +695,13 @@ bool VotesUploader::StartUploadRequest( ...@@ -692,4 +695,13 @@ bool VotesUploader::StartUploadRequest(
std::string(), true /* observed_submission */, nullptr /* prefs */); 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 } // namespace password_manager
...@@ -195,6 +195,12 @@ class VotesUploader { ...@@ -195,6 +195,12 @@ class VotesUploader {
std::unique_ptr<autofill::FormStructure> form_to_upload, std::unique_ptr<autofill::FormStructure> form_to_upload,
const autofill::ServerFieldTypeSet& available_field_types); 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. // The client which implements embedder-specific PasswordManager operations.
PasswordManagerClient* client_; PasswordManagerClient* client_;
......
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
#include "components/autofill/core/browser/autofill_download_manager.h" #include "components/autofill/core/browser/autofill_download_manager.h"
#include "components/autofill/core/browser/form_structure.h" #include "components/autofill/core/browser/form_structure.h"
#include "components/autofill/core/common/form_data.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/stub_password_manager_client.h"
#include "components/password_manager/core/browser/vote_uploads_test_matchers.h" #include "components/password_manager/core/browser/vote_uploads_test_matchers.h"
#include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_registry_simple.h"
...@@ -48,6 +50,12 @@ using testing::SaveArg; ...@@ -48,6 +50,12 @@ using testing::SaveArg;
namespace password_manager { namespace password_manager {
namespace { 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 = constexpr int kNumberOfPasswordAttributes =
static_cast<int>(PasswordAttribute::kPasswordAttributesCount); static_cast<int>(PasswordAttribute::kPasswordAttributesCount);
...@@ -78,6 +86,7 @@ class MockAutofillDownloadManager : public AutofillDownloadManager { ...@@ -78,6 +86,7 @@ class MockAutofillDownloadManager : public AutofillDownloadManager {
class MockPasswordManagerClient : public StubPasswordManagerClient { class MockPasswordManagerClient : public StubPasswordManagerClient {
public: public:
MOCK_METHOD0(GetAutofillDownloadManager, AutofillDownloadManager*()); MOCK_METHOD0(GetAutofillDownloadManager, AutofillDownloadManager*());
MOCK_CONST_METHOD0(GetFieldInfoManager, FieldInfoManager*());
}; };
} // namespace } // namespace
...@@ -418,4 +427,38 @@ TEST_F(VotesUploaderTest, UploadSingleUsername) { ...@@ -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 } // 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