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

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

Issue 1050903002: Postpone check if password form is loaded from store (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments fix Created 5 years, 8 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_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 08b30bf20f31c43b27a7eef8918d0162cca738d5..e5746e54b196a7dba2f0a8dd637760401382b59d 100644
--- a/components/password_manager/core/browser/password_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -25,6 +25,7 @@ using base::ASCIIToUTF16;
using testing::_;
using testing::AnyNumber;
using testing::Exactly;
+using testing::Invoke;
using testing::Return;
using testing::WithArg;
@@ -1028,4 +1029,52 @@ TEST_F(PasswordManagerTest, FormSubmittedChangedWithAutofillResponse) {
form_to_save->Save();
}
+TEST_F(PasswordManagerTest, SubmitNotFetchedFromStoreForm) {
+ // Test that observing a newly submitted form that is fetched after on submit
+ // shows the save password bar.
+ EXPECT_CALL(driver_, FillPasswordForm(_)).Times(Exactly(0));
+ std::vector<PasswordForm> observed;
+ PasswordForm form(MakeSimpleForm());
+ observed.push_back(form);
+
+ PasswordStoreConsumer* form_manager = nullptr;
+ // Do not call back from store after GetLogins is called. Instead, save the
+ // pointer to the form manager for calling back later. This emulates that
+ // PasswordStore does not manage to fetch a form till moment of submission.
+ ON_CALL(*store_, GetLogins(_, _, _))
+ .WillByDefault(testing::SaveArg<2>(&form_manager));
+ // The initial load.
+ manager()->OnPasswordFormsParsed(&driver_, observed);
+ // The initial layout.
+ manager()->OnPasswordFormsRendered(&driver_, observed, true);
+ ASSERT_TRUE(form_manager);
+
+ // And the form submit contract is to call ProvisionallySavePassword.
+ manager()->ProvisionallySavePassword(form);
+
+ // Emulate fetching password form from PasswordStore after submission but
+ // before post-navigation load.
+ form_manager->OnGetPasswordStoreResults(
+ ScopedVector<autofill::PasswordForm>());
+
+ scoped_ptr<PasswordFormManager> form_to_save;
+ EXPECT_CALL(client_,
+ PromptUserToSavePasswordPtr(
+ _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
+ .WillOnce(WithArg<0>(SaveToScopedPtr(&form_to_save)));
+
+ // Now the password manager waits for the navigation to complete.
+ observed.clear();
+ // The post-navigation load.
+ manager()->OnPasswordFormsParsed(&driver_, observed);
+ // The post-navigation layout.
+ manager()->OnPasswordFormsRendered(&driver_, observed, true);
+
+ ASSERT_TRUE(form_to_save);
+ EXPECT_CALL(*store_, AddLogin(FormMatches(form)));
+
+ // Simulate saving the form, as if the info bar was accepted.
+ form_to_save->Save();
+}
+
} // namespace password_manager

Powered by Google App Engine
This is Rietveld 408576698