Chromium Code Reviews| 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()), |
|
vasilii
2016/08/08 15:34:24
I think returning const MockStoreResultFilter* fro
vabr (Chromium)
2016/08/09 12:19:52
Thanks to you, Vasilii, for teaching me that the r
|
| + 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) { |