| Index: components/password_manager/core/browser/password_manager_unittest.cc
|
| diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc
|
| index b12936639e74c398f54818306ff628c698747801..5cc6d9789f52d245bf8803f9da3404ea43e10324 100644
|
| --- a/components/password_manager/core/browser/password_manager_unittest.cc
|
| +++ b/components/password_manager/core/browser/password_manager_unittest.cc
|
| @@ -43,6 +43,8 @@ class MockStoreResultFilter : public CredentialsFilter {
|
| MOCK_CONST_METHOD1(FilterResultsPtr,
|
| void(ScopedVector<autofill::PasswordForm>* results));
|
| MOCK_CONST_METHOD1(ShouldSave, bool(const autofill::PasswordForm& form));
|
| + MOCK_CONST_METHOD1(ReportFormLoginSuccess,
|
| + void(const PasswordFormManager& form_manager));
|
|
|
| // GMock cannot handle move-only arguments.
|
| ScopedVector<autofill::PasswordForm> FilterResults(
|
| @@ -251,7 +253,7 @@ class PasswordManagerTest : public testing::Test {
|
|
|
| base::MessageLoop message_loop_;
|
| scoped_refptr<MockPasswordStore> store_;
|
| - MockPasswordManagerClient client_;
|
| + testing::NiceMock<MockPasswordManagerClient> client_;
|
| MockPasswordManagerDriver driver_;
|
| std::unique_ptr<PasswordAutofillManager> password_autofill_manager_;
|
| std::unique_ptr<PasswordManager> manager_;
|
| @@ -608,6 +610,37 @@ TEST_F(PasswordManagerTest, SyncCredentialsNotSaved) {
|
| manager()->OnPasswordFormsRendered(&driver_, observed, true);
|
| }
|
|
|
| +// On a successful login with an updated password,
|
| +// CredentialsFilter::ReportFormLoginSuccess should be called.
|
| +TEST_F(PasswordManagerTest, ReportFormLoginSuccessCalled) {
|
| + PasswordForm form(MakeSimpleForm());
|
| +
|
| + std::vector<PasswordForm> observed;
|
| + observed.push_back(form);
|
| + EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2);
|
| + // Simulate that |form| is already in the store, making this an update.
|
| + EXPECT_CALL(*store_, GetLogins(_, _))
|
| + .WillRepeatedly(WithArg<1>(InvokeConsumer(form)));
|
| + manager()->OnPasswordFormsParsed(&driver_, observed);
|
| + manager()->OnPasswordFormsRendered(&driver_, observed, true);
|
| +
|
| + // Submit form and finish navigation.
|
| + EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage())
|
| + .WillRepeatedly(Return(true));
|
| + EXPECT_CALL(client_, GetPrefs()).WillRepeatedly(Return(nullptr));
|
| + manager()->ProvisionallySavePassword(form);
|
| +
|
| + // Chrome should recognise the successful login and call
|
| + // ReportFormLoginSuccess.
|
| + EXPECT_CALL(*static_cast<const MockStoreResultFilter*>(
|
| + client_.GetStoreResultFilter()),
|
| + ReportFormLoginSuccess(_));
|
| + EXPECT_CALL(*store_, UpdateLogin(_));
|
| + observed.clear();
|
| + manager()->OnPasswordFormsParsed(&driver_, observed);
|
| + manager()->OnPasswordFormsRendered(&driver_, observed, true);
|
| +}
|
| +
|
| // When there is a sync password saved, and the user successfully uses the
|
| // stored version of it, PasswordManager should not drop that password.
|
| TEST_F(PasswordManagerTest, SyncCredentialsNotDroppedIfUpToDate) {
|
|
|