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 756f546ab4176f1e6ae5acd51fab8b0256f6db11..1b0c5e9416a84f91b0984c1be166a9354e6ed5c2 100644 |
--- a/components/password_manager/core/browser/password_form_manager_unittest.cc |
+++ b/components/password_manager/core/browser/password_form_manager_unittest.cc |
@@ -2993,7 +2993,52 @@ TEST_F(PasswordFormManagerTest, GrabFetcher_Same) { |
base::MakeUnique<MockFormSaver>(), fetcher.get()); |
EXPECT_CALL(*fetcher, AddConsumer(_)).Times(0); |
+ EXPECT_CALL(*fetcher, RemoveConsumer(_)).Times(0); |
form_manager.GrabFetcher(std::move(fetcher)); |
+ // There will be a RemoveConsumer call as soon as form_manager goes out of |
+ // scope, but the test needs to ensure that there is none as a result of |
+ // GrabFetcher. |
+ Mock::VerifyAndClearExpectations(form_manager.form_fetcher()); |
+} |
+ |
+// Check that if asked to take ownership of a different FormFetcher than which |
+// it had consumed before, the PasswordFormManager adds itself as a consumer |
+// and replaces the references to the old results. |
+TEST_F(PasswordFormManagerTest, GrabFetcher_Different) { |
+ PasswordForm old_match = *observed_form(); |
+ old_match.username_value = ASCIIToUTF16("user1"); |
+ old_match.password_value = ASCIIToUTF16("pass"); |
+ fake_form_fetcher()->SetNonFederated({&old_match}, 0u); |
+ EXPECT_EQ(1u, form_manager()->best_matches().size()); |
+ EXPECT_EQ(&old_match, form_manager()->best_matches().begin()->second); |
+ |
+ // |form_manager()| uses |fake_form_fetcher()|, which is an instance different |
+ // from |fetcher| below. |
+ auto fetcher = base::MakeUnique<MockFormFetcher>(); |
+ fetcher->Fetch(); |
+ fetcher->SetNonFederated(std::vector<const PasswordForm*>(), 0u); |
+ EXPECT_CALL(*fetcher, AddConsumer(form_manager())); |
+ form_manager()->GrabFetcher(std::move(fetcher)); |
+ |
+ EXPECT_EQ(0u, form_manager()->best_matches().size()); |
+} |
+ |
+// Check that on changing FormFetcher, the PasswordFormManager removes itself |
+// from consuming the old one. |
+TEST_F(PasswordFormManagerTest, GrabFetcher_Remove) { |
+ MockFormFetcher old_fetcher; |
+ FormFetcher::Consumer* added_consumer = nullptr; |
+ EXPECT_CALL(old_fetcher, AddConsumer(_)) |
+ .WillOnce(SaveArg<0>(&added_consumer)); |
+ PasswordFormManager form_manager( |
+ password_manager(), client(), client()->driver(), *observed_form(), |
+ base::MakeUnique<MockFormSaver>(), &old_fetcher); |
+ EXPECT_EQ(&form_manager, added_consumer); |
+ |
+ auto new_fetcher = base::MakeUnique<MockFormFetcher>(); |
+ EXPECT_CALL(*new_fetcher, AddConsumer(&form_manager)); |
+ EXPECT_CALL(old_fetcher, RemoveConsumer(&form_manager)); |
+ form_manager.GrabFetcher(std::move(new_fetcher)); |
} |
} // namespace password_manager |