| 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 658e12fd4168d1d489d3898da4bc576d202b9d04..e32d97624bfc6a32242589930ee611f96fe654b2 100644
|
| --- a/components/password_manager/core/browser/password_form_manager_unittest.cc
|
| +++ b/components/password_manager/core/browser/password_form_manager_unittest.cc
|
| @@ -882,6 +882,10 @@ TEST_F(PasswordFormManagerTest, TestBlacklistMatching) {
|
| blacklisted_not_match2.username_element = ASCIIToUTF16("Element");
|
| blacklisted_not_match2.blacklisted_by_user = true;
|
|
|
| + // Doesn't match because of different PasswordForm::Scheme.
|
| + PasswordForm blacklisted_not_match3 = *observed_form();
|
| + blacklisted_not_match3.scheme = PasswordForm::SCHEME_BASIC;
|
| +
|
| // Matches because of same element names, despite different page
|
| PasswordForm blacklisted_match = *observed_form();
|
| blacklisted_match.origin = GURL("http://accounts.google.com/a/LoginAuth1234");
|
| @@ -897,6 +901,7 @@ TEST_F(PasswordFormManagerTest, TestBlacklistMatching) {
|
| result.push_back(base::MakeUnique<PasswordForm>(blacklisted_psl));
|
| result.push_back(base::MakeUnique<PasswordForm>(blacklisted_not_match));
|
| result.push_back(base::MakeUnique<PasswordForm>(blacklisted_not_match2));
|
| + result.push_back(base::MakeUnique<PasswordForm>(blacklisted_not_match3));
|
| result.push_back(base::MakeUnique<PasswordForm>(blacklisted_match));
|
| result.push_back(base::MakeUnique<PasswordForm>(blacklisted_match2));
|
| result.push_back(base::MakeUnique<PasswordForm>(*saved_match()));
|
| @@ -3016,4 +3021,61 @@ TEST_F(PasswordFormManagerTest, ReportProcessingUpdate) {
|
| EXPECT_EQ(1, tester.GetActionCount("PasswordManager_LoginFollowingAutofill"));
|
| }
|
|
|
| +// Sanity check for calling ProcessMatches with empty vector. Should not crash
|
| +// or make sanitizers scream.
|
| +TEST_F(PasswordFormManagerTest, ProcessMatches_Empty) {
|
| + static_cast<FormFetcher::Consumer*>(form_manager())
|
| + ->ProcessMatches(std::vector<const PasswordForm*>(), 0u);
|
| +}
|
| +
|
| +// For all combinations of PasswordForm schemes, test that ProcessMatches
|
| +// filters out forms with schemes not matching the observed form.
|
| +TEST_F(PasswordFormManagerTest, RemoveResultsWithWrongScheme_ObservingHTML) {
|
| + for (int correct = 0; correct <= PasswordForm::SCHEME_LAST; ++correct) {
|
| + for (int wrong = 0; wrong <= PasswordForm::SCHEME_LAST; ++wrong) {
|
| + if (correct == wrong)
|
| + continue;
|
| +
|
| + const PasswordForm::Scheme kCorrectScheme =
|
| + static_cast<PasswordForm::Scheme>(correct);
|
| + const PasswordForm::Scheme kWrongScheme =
|
| + static_cast<PasswordForm::Scheme>(wrong);
|
| + SCOPED_TRACE(testing::Message() << "Correct scheme = " << kCorrectScheme
|
| + << ", wrong scheme = " << kWrongScheme);
|
| +
|
| + PasswordForm observed = *observed_form();
|
| + observed.scheme = kCorrectScheme;
|
| + PasswordFormManager form_manager(
|
| + password_manager(), client(),
|
| + (kCorrectScheme == PasswordForm::SCHEME_HTML ? client()->driver()
|
| + : nullptr),
|
| + observed, base::MakeUnique<NiceMock<MockFormSaver>>());
|
| +
|
| + PasswordForm match = *saved_match();
|
| + match.scheme = kCorrectScheme;
|
| +
|
| + PasswordForm non_match = match;
|
| + non_match.scheme = kWrongScheme;
|
| +
|
| + // First try putting the correct scheme first in returned matches.
|
| + std::vector<const PasswordForm*> all_matches = {&match, &non_match};
|
| + static_cast<FormFetcher::Consumer*>(&form_manager)
|
| + ->ProcessMatches(all_matches, 0u);
|
| +
|
| + EXPECT_EQ(1u, form_manager.best_matches().size());
|
| + EXPECT_EQ(kCorrectScheme,
|
| + form_manager.best_matches().begin()->second->scheme);
|
| +
|
| + // Now try putting the correct scheme last in returned matches.
|
| + all_matches = {&non_match, &match};
|
| + static_cast<FormFetcher::Consumer*>(&form_manager)
|
| + ->ProcessMatches(all_matches, 0u);
|
| +
|
| + EXPECT_EQ(1u, form_manager.best_matches().size());
|
| + EXPECT_EQ(kCorrectScheme,
|
| + form_manager.best_matches().begin()->second->scheme);
|
| + }
|
| + }
|
| +}
|
| +
|
| } // namespace password_manager
|
|
|