Commit cb0d8613 authored by Maxim Kolosovskiy's avatar Maxim Kolosovskiy Committed by Commit Bot

[Password Manager] Crowdsource |properties_mask| in Stable

The masks will be used for better credentials filling and password generation classifiers
Before this CL, properties mask were uploading only in Dev and Canary.

Bug: 552420
Change-Id: Ia382ef21146b2aeb22ccd15859700f9b74a91602
Reviewed-on: https://chromium-review.googlesource.com/1012072Reviewed-by: default avatarSebastien Seguin-Gagnon <sebsg@chromium.org>
Commit-Queue: Maxim Kolosovskiy <kolos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#550971}
parent 4ae7839c
...@@ -1291,6 +1291,9 @@ void FormStructure::EncodeFormForUpload(AutofillUploadContents* upload) const { ...@@ -1291,6 +1291,9 @@ void FormStructure::EncodeFormForUpload(AutofillUploadContents* upload) const {
added_field->set_signature(field->GetFieldSignature()); added_field->set_signature(field->GetFieldSignature());
if (field->properties_mask)
added_field->set_properties_mask(field->properties_mask);
if (IsAutofillFieldMetadataEnabled()) { if (IsAutofillFieldMetadataEnabled()) {
added_field->set_type(field->form_control_type); added_field->set_type(field->form_control_type);
...@@ -1305,9 +1308,6 @@ void FormStructure::EncodeFormForUpload(AutofillUploadContents* upload) const { ...@@ -1305,9 +1308,6 @@ void FormStructure::EncodeFormForUpload(AutofillUploadContents* upload) const {
if (!field->css_classes.empty()) if (!field->css_classes.empty())
added_field->set_css_classes(base::UTF16ToUTF8(field->css_classes)); added_field->set_css_classes(base::UTF16ToUTF8(field->css_classes));
if (field->properties_mask)
added_field->set_properties_mask(field->properties_mask);
} }
} }
} }
......
...@@ -2566,13 +2566,6 @@ TEST_F(FormStructureTest, ...@@ -2566,13 +2566,6 @@ TEST_F(FormStructureTest,
form_structure->field(i)->set_form_classifier_outcome( form_structure->field(i)->set_form_classifier_outcome(
AutofillUploadContents::Field::NON_GENERATION_ELEMENT); AutofillUploadContents::Field::NON_GENERATION_ELEMENT);
} }
if (form_structure->field(i)->name == ASCIIToUTF16("firstname")) {
form_structure->field(i)->properties_mask =
FieldPropertiesFlags::HAD_FOCUS;
} else {
form_structure->field(i)->properties_mask =
FieldPropertiesFlags::HAD_FOCUS | FieldPropertiesFlags::USER_TYPED;
}
if (form_structure->field(i)->name == ASCIIToUTF16("username")) { if (form_structure->field(i)->name == ASCIIToUTF16("username")) {
form_structure->field(i)->set_username_vote_type( form_structure->field(i)->set_username_vote_type(
AutofillUploadContents::Field::CREDENTIALS_REUSED); AutofillUploadContents::Field::CREDENTIALS_REUSED);
...@@ -2601,31 +2594,24 @@ TEST_F(FormStructureTest, ...@@ -2601,31 +2594,24 @@ TEST_F(FormStructureTest,
"given-name", 3U); "given-name", 3U);
upload_firstname_field->set_form_classifier_outcome( upload_firstname_field->set_form_classifier_outcome(
AutofillUploadContents::Field::NON_GENERATION_ELEMENT); AutofillUploadContents::Field::NON_GENERATION_ELEMENT);
upload_firstname_field->set_properties_mask(FieldPropertiesFlags::HAD_FOCUS);
AutofillUploadContents::Field* upload_lastname_field = upload.add_field(); AutofillUploadContents::Field* upload_lastname_field = upload.add_field();
test::FillUploadField(upload_lastname_field, 2786066110U, "lastname", "", test::FillUploadField(upload_lastname_field, 2786066110U, "lastname", "",
"family-name", 5U); "family-name", 5U);
upload_lastname_field->set_form_classifier_outcome( upload_lastname_field->set_form_classifier_outcome(
AutofillUploadContents::Field::NON_GENERATION_ELEMENT); AutofillUploadContents::Field::NON_GENERATION_ELEMENT);
upload_lastname_field->set_properties_mask(FieldPropertiesFlags::HAD_FOCUS |
FieldPropertiesFlags::USER_TYPED);
AutofillUploadContents::Field* upload_email_field = upload.add_field(); AutofillUploadContents::Field* upload_email_field = upload.add_field();
test::FillUploadField(upload_email_field, 1029417091U, "email", "email", test::FillUploadField(upload_email_field, 1029417091U, "email", "email",
"email", 9U); "email", 9U);
upload_email_field->set_form_classifier_outcome( upload_email_field->set_form_classifier_outcome(
AutofillUploadContents::Field::NON_GENERATION_ELEMENT); AutofillUploadContents::Field::NON_GENERATION_ELEMENT);
upload_email_field->set_properties_mask(FieldPropertiesFlags::HAD_FOCUS |
FieldPropertiesFlags::USER_TYPED);
AutofillUploadContents::Field* upload_username_field = upload.add_field(); AutofillUploadContents::Field* upload_username_field = upload.add_field();
test::FillUploadField(upload_username_field, 239111655U, "username", "text", test::FillUploadField(upload_username_field, 239111655U, "username", "text",
"email", 86U); "email", 86U);
upload_username_field->set_form_classifier_outcome( upload_username_field->set_form_classifier_outcome(
AutofillUploadContents::Field::NON_GENERATION_ELEMENT); AutofillUploadContents::Field::NON_GENERATION_ELEMENT);
upload_username_field->set_properties_mask(FieldPropertiesFlags::HAD_FOCUS |
FieldPropertiesFlags::USER_TYPED);
upload_username_field->set_username_vote_type( upload_username_field->set_username_vote_type(
AutofillUploadContents::Field::CREDENTIALS_REUSED); AutofillUploadContents::Field::CREDENTIALS_REUSED);
...@@ -2637,8 +2623,6 @@ TEST_F(FormStructureTest, ...@@ -2637,8 +2623,6 @@ TEST_F(FormStructureTest,
upload_password_field->set_generation_type( upload_password_field->set_generation_type(
AutofillUploadContents::Field:: AutofillUploadContents::Field::
MANUALLY_TRIGGERED_GENERATION_ON_SIGN_UP_FORM); MANUALLY_TRIGGERED_GENERATION_ON_SIGN_UP_FORM);
upload_password_field->set_properties_mask(FieldPropertiesFlags::HAD_FOCUS |
FieldPropertiesFlags::USER_TYPED);
upload_password_field->set_generated_password_changed(true); upload_password_field->set_generated_password_changed(true);
std::string expected_upload_string; std::string expected_upload_string;
...@@ -2724,6 +2708,94 @@ TEST_F(FormStructureTest, EncodeUploadRequest_WithAutocomplete) { ...@@ -2724,6 +2708,94 @@ TEST_F(FormStructureTest, EncodeUploadRequest_WithAutocomplete) {
EXPECT_EQ(expected_upload_string, encoded_upload_string); EXPECT_EQ(expected_upload_string, encoded_upload_string);
} }
TEST_F(FormStructureTest, EncodeUploadRequestWithPropertiesMask) {
DisableAutofillMetadataFieldTrial();
std::unique_ptr<FormStructure> form_structure;
std::vector<ServerFieldTypeSet> possible_field_types;
FormData form;
form_structure.reset(new FormStructure(form));
form_structure->DetermineHeuristicTypes(nullptr /* ukm_service */);
FormFieldData field;
field.form_control_type = "text";
field.label = ASCIIToUTF16("First Name");
field.name = ASCIIToUTF16("firstname");
field.id = ASCIIToUTF16("first_name");
field.autocomplete_attribute = "given-name";
field.css_classes = ASCIIToUTF16("class1 class2");
field.properties_mask = FieldPropertiesFlags::HAD_FOCUS;
form.fields.push_back(field);
possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(NAME_FIRST);
field.label = ASCIIToUTF16("Last Name");
field.name = ASCIIToUTF16("lastname");
field.id = ASCIIToUTF16("last_name");
field.autocomplete_attribute = "family-name";
field.css_classes = ASCIIToUTF16("class1 class2");
field.properties_mask =
FieldPropertiesFlags::HAD_FOCUS | FieldPropertiesFlags::USER_TYPED;
form.fields.push_back(field);
possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(NAME_LAST);
field.label = ASCIIToUTF16("Email");
field.name = ASCIIToUTF16("email");
field.id = ASCIIToUTF16("e-mail");
field.form_control_type = "email";
field.autocomplete_attribute = "email";
field.css_classes = ASCIIToUTF16("class1 class2");
field.properties_mask =
FieldPropertiesFlags::HAD_FOCUS | FieldPropertiesFlags::USER_TYPED;
form.fields.push_back(field);
possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(EMAIL_ADDRESS);
form_structure.reset(new FormStructure(form));
ASSERT_EQ(form_structure->field_count(), possible_field_types.size());
for (size_t i = 0; i < form_structure->field_count(); ++i)
form_structure->field(i)->set_possible_types(possible_field_types[i]);
ServerFieldTypeSet available_field_types;
available_field_types.insert(NAME_FIRST);
available_field_types.insert(NAME_LAST);
available_field_types.insert(EMAIL_ADDRESS);
// Prepare the expected proto string.
AutofillUploadContents upload;
upload.set_submission(true);
upload.set_client_version("6.1.1715.1442/en (GGLL)");
upload.set_form_signature(14746822798145140279U);
upload.set_autofill_used(true);
upload.set_data_present("1440");
test::FillUploadField(upload.add_field(), 3763331450U, nullptr, nullptr,
nullptr, 3U);
upload.mutable_field(0)->set_properties_mask(FieldPropertiesFlags::HAD_FOCUS);
test::FillUploadField(upload.add_field(), 3494530716U, nullptr, nullptr,
nullptr, 5U);
upload.mutable_field(1)->set_properties_mask(
FieldPropertiesFlags::HAD_FOCUS | FieldPropertiesFlags::USER_TYPED);
test::FillUploadField(upload.add_field(), 1029417091U, nullptr, nullptr,
nullptr, 9U);
upload.mutable_field(2)->set_properties_mask(
FieldPropertiesFlags::HAD_FOCUS | FieldPropertiesFlags::USER_TYPED);
std::string expected_upload_string;
ASSERT_TRUE(upload.SerializeToString(&expected_upload_string));
AutofillUploadContents encoded_upload;
EXPECT_TRUE(form_structure->EncodeUploadRequest(
available_field_types, true, std::string(), true, &encoded_upload));
std::string encoded_upload_string;
encoded_upload.SerializeToString(&encoded_upload_string);
EXPECT_EQ(expected_upload_string, encoded_upload_string);
}
TEST_F(FormStructureTest, EncodeUploadRequest_ObservedSubmissionFalse) { TEST_F(FormStructureTest, EncodeUploadRequest_ObservedSubmissionFalse) {
std::unique_ptr<FormStructure> form_structure; std::unique_ptr<FormStructure> form_structure;
std::vector<ServerFieldTypeSet> possible_field_types; std::vector<ServerFieldTypeSet> possible_field_types;
......
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