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

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

Issue 2306513002: Reland "Filter out credentials with non-matching schemes" (Closed)
Patch Set: Restructured + more tests Created 4 years, 3 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
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

Powered by Google App Engine
This is Rietveld 408576698