| Index: chrome/browser/password_manager/password_manager_unittest.cc
|
| diff --git a/chrome/browser/password_manager/password_manager_unittest.cc b/chrome/browser/password_manager/password_manager_unittest.cc
|
| index f68500c1b4863d6e04a5d0a5e9e1fa4e4797d35b..e345e1fd32603421778ca41c401333345f46c246 100644
|
| --- a/chrome/browser/password_manager/password_manager_unittest.cc
|
| +++ b/chrome/browser/password_manager/password_manager_unittest.cc
|
| @@ -67,6 +67,8 @@ class TestPasswordManager : public PasswordManager {
|
| return tpm;
|
| }
|
|
|
| + int PendingManagersCount() { return pending_login_managers_.size(); }
|
| +
|
| private:
|
| DISALLOW_COPY_AND_ASSIGN(TestPasswordManager);
|
| };
|
| @@ -526,3 +528,77 @@ TEST_F(PasswordManagerTest, PasswordFormReappearance) {
|
| manager()->OnPasswordFormsParsed(observed);
|
| manager()->OnPasswordFormsRendered(observed);
|
| }
|
| +
|
| +TEST_F(PasswordManagerTest, RemovePasswordFormSubmitEmptyStore) {
|
| +
|
| + std::vector<PasswordForm*> result; // Empty password store.
|
| + EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0));
|
| + EXPECT_CALL(*store_.get(), GetLogins(_, _))
|
| + .WillOnce(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1)));
|
| + std::vector<PasswordForm> observed;
|
| + PasswordForm form(MakeSimpleForm());
|
| + observed.push_back(form);
|
| + manager()->OnPasswordFormsParsed(observed); // The initial load.
|
| + manager()->OnPasswordFormsRendered(observed); // The initial layout.
|
| +
|
| + // And the form submit contract is to call ProvisionallySavePassword.
|
| + manager()->ProvisionallySavePassword(form);
|
| +
|
| + scoped_ptr<PasswordFormManager> form_to_save;
|
| + EXPECT_CALL(delegate_, AddSavePasswordInfoBarIfPermitted(_))
|
| + .WillOnce(WithArg<0>(SaveToScopedPtr(&form_to_save)));
|
| +
|
| + // Now the password manager waits for the navigation to complete.
|
| + observed.clear();
|
| + manager()->OnPasswordFormsParsed(observed); // The post-navigation load.
|
| + manager()->OnPasswordFormsRendered(observed); // The post-navigation layout.
|
| +
|
| + ASSERT_TRUE(form_to_save.get());
|
| + EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form)));
|
| +
|
| + // Simulate saving the form, as if the info bar was accepted.
|
| + form_to_save->Save();
|
| +
|
| + EXPECT_CALL(*store_.get(), RemoveLoginImpl(_)).Times(Exactly(1));
|
| + EXPECT_CALL(delegate_, DidLastPageLoadEncounterSSLErrors()).Times(Exactly(0));
|
| +
|
| + manager()->OnRemovePasswordSuggestion(form);
|
| +}
|
| +
|
| +TEST_F(PasswordManagerTest, RemovePasswordFormSubmitEmptyStore2) {
|
| +
|
| + std::vector<PasswordForm*> result; // Empty password store.
|
| + EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0));
|
| + EXPECT_CALL(*store_.get(), GetLogins(_, _))
|
| + .WillOnce(DoAll(WithArg<1>(InvokeConsumer(result)), Return(1)));
|
| + std::vector<PasswordForm> observed;
|
| + PasswordForm form(MakeSimpleForm());
|
| + observed.push_back(form);
|
| + ASSERT_TRUE(manager()->PendingManagersCount() == 0);
|
| + manager()->OnPasswordFormsParsed(observed); // The initial load.
|
| + manager()->OnPasswordFormsRendered(observed); // The initial layout.
|
| + ASSERT_TRUE(manager()->PendingManagersCount() == 1);
|
| + // And the form submit contract is to call ProvisionallySavePassword.
|
| + manager()->ProvisionallySavePassword(form);
|
| +
|
| + scoped_ptr<PasswordFormManager> form_to_save;
|
| + EXPECT_CALL(delegate_, AddSavePasswordInfoBarIfPermitted(_))
|
| + .WillOnce(WithArg<0>(SaveToScopedPtr(&form_to_save)));
|
| +
|
| + EXPECT_CALL(*store_.get(), RemoveLoginImpl(_)).Times(Exactly(1));
|
| + EXPECT_CALL(delegate_, DidLastPageLoadEncounterSSLErrors()).Times(Exactly(1));
|
| + manager()->OnRemovePasswordSuggestion(form);
|
| +
|
| + // Now the password manager waits for the navigation to complete.
|
| + observed.clear();
|
| + manager()->OnPasswordFormsParsed(observed); // The post-navigation load.
|
| + manager()->OnPasswordFormsRendered(observed); // The post-navigation layout.
|
| + ASSERT_TRUE(manager()->PendingManagersCount() == 0);
|
| + ASSERT_TRUE(form_to_save.get());
|
| + EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form)));
|
| +
|
| + // Simulate saving the form, as if the info bar was accepted.
|
| + form_to_save->Save();
|
| +
|
| + ASSERT_TRUE(manager()->PendingManagersCount() == 0);
|
| +}
|
|
|