Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(472)

Unified Diff: components/password_manager/core/browser/password_form_manager_unittest.cc

Issue 2796873002: Sending autofill types for username fields in sign-in forms for improving username detection. (Closed)
Patch Set: Fix compilation error Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/password_manager/core/browser/password_form_manager.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/password_manager/core/browser/password_form_manager_unittest.cc
diff --git a/components/password_manager/core/browser/password_form_manager_unittest.cc b/components/password_manager/core/browser/password_form_manager_unittest.cc
index ae2822c852fcd2076be3449bbdd045266e213e2c..fd752c0aa7a566386e48a946a4bb4e582b04112b 100644
--- a/components/password_manager/core/browser/password_form_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_form_manager_unittest.cc
@@ -58,6 +58,7 @@ using ::testing::Return;
using ::testing::SaveArg;
using ::testing::SaveArgPointee;
using ::testing::UnorderedElementsAre;
+using ::testing::WithArg;
namespace password_manager {
@@ -253,6 +254,17 @@ class MockAutofillManager : public autofill::AutofillManager {
set_download_manager(manager);
}
+ // Workaround for std::unique_ptr<> lacking a copy constructor.
+ void StartUploadProcess(std::unique_ptr<FormStructure> form_structure,
+ const base::TimeTicks& timestamp,
+ bool observed_submission) {
+ StartUploadProcessPtr(form_structure.release(), timestamp,
+ observed_submission);
+ }
+
+ MOCK_METHOD3(StartUploadProcessPtr,
+ void(FormStructure*, const base::TimeTicks&, bool));
+
private:
DISALLOW_COPY_AND_ASSIGN(MockAutofillManager);
};
@@ -324,6 +336,10 @@ class TestPasswordManagerClient : public StubPasswordManagerClient {
std::unique_ptr<MockPasswordManagerDriver> driver_;
};
+ACTION_P(SaveToUniquePtr, scoped) {
+ scoped->reset(arg0);
+}
+
} // namespace
class PasswordFormManagerTest : public testing::Test {
@@ -3098,4 +3114,70 @@ TEST_F(PasswordFormManagerTest, GrabFetcher_Remove) {
form_manager.GrabFetcher(std::move(new_fetcher));
}
+TEST_F(PasswordFormManagerTest, UploadSignInForm_WithAutofillTypes) {
+ // For newly saved passwords on a sign-in form, upload an autofill vote for a
+ // username field and a autofill::PASSWORD vote for a password field.
+ autofill::FormFieldData field;
+ field.name = ASCIIToUTF16("Email");
+ field.form_control_type = "text";
+ observed_form()->form_data.fields.push_back(field);
+
+ field.name = ASCIIToUTF16("Passwd");
+ field.form_control_type = "password";
+ observed_form()->form_data.fields.push_back(field);
+
+ FakeFormFetcher fetcher;
+ fetcher.Fetch();
+ PasswordFormManager form_manager(
+ password_manager(), client(), client()->driver(), *observed_form(),
+ base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
+ fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
+
+ PasswordForm form_to_save(*observed_form());
+ form_to_save.preferred = true;
+ form_to_save.username_value = ASCIIToUTF16("test@gmail.com");
+ form_to_save.password_value = ASCIIToUTF16("password");
+
+ std::unique_ptr<FormStructure> uploaded_form_structure;
+ auto* mock_autofill_manager =
+ client()->mock_driver()->mock_autofill_manager();
+ EXPECT_CALL(*mock_autofill_manager, StartUploadProcessPtr(_, _, true))
+ .WillOnce(WithArg<0>(SaveToUniquePtr(&uploaded_form_structure)));
+ form_manager.ProvisionallySave(
+ form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
+ form_manager.Save();
+
+ ASSERT_EQ(2u, uploaded_form_structure->field_count());
+ autofill::ServerFieldTypeSet expected_types = {autofill::PASSWORD};
+ EXPECT_EQ(expected_types,
+ uploaded_form_structure->field(1)->possible_types());
+}
+
+// Checks that there is no upload on saving a password on a password form only
+// with 1 field.
+TEST_F(PasswordFormManagerTest, NoUploadsForSubmittedFormWithOnlyOneField) {
+ autofill::FormFieldData field;
+ field.name = ASCIIToUTF16("Passwd");
+ field.form_control_type = "password";
+ observed_form()->form_data.fields.push_back(field);
+
+ FakeFormFetcher fetcher;
+ fetcher.Fetch();
+ PasswordFormManager form_manager(
+ password_manager(), client(), client()->driver(), *observed_form(),
+ base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
+ fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
+
+ PasswordForm form_to_save(*observed_form());
+ form_to_save.preferred = true;
+ form_to_save.password_value = ASCIIToUTF16("password");
+
+ auto* mock_autofill_manager =
+ client()->mock_driver()->mock_autofill_manager();
+ EXPECT_CALL(*mock_autofill_manager, StartUploadProcessPtr(_, _, _)).Times(0);
+ form_manager.ProvisionallySave(
+ form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
+ form_manager.Save();
+}
+
} // namespace password_manager
« no previous file with comments | « components/password_manager/core/browser/password_form_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698