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 469a0a1a965d1e3edcfbac4972c54768c7c86112..b82bd3f6d7a5842e8fe22dff1af04a4755adac40 100644 |
--- a/components/password_manager/core/browser/password_manager_unittest.cc |
+++ b/components/password_manager/core/browser/password_manager_unittest.cc |
@@ -2,6 +2,7 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include <string> |
vabr (Chromium)
2014/09/15 13:01:45
Also here -- you don't introduce std::string with
Pritam Nikam
2014/09/15 15:02:08
Done.
|
#include <vector> |
#include "base/message_loop/message_loop.h" |
@@ -174,6 +175,18 @@ class PasswordManagerTest : public testing::Test { |
return form; |
} |
+ PasswordForm MakeSimpleFormWithOnlyPasswordField() { |
vabr (Chromium)
2014/09/15 13:01:46
nit: To improve readability, consider changing the
Pritam Nikam
2014/09/15 15:02:08
Done.
|
+ PasswordForm form; |
+ form.origin = GURL("http://www.google.com/a/LoginAuth"); |
+ form.action = GURL("http://www.google.com/a/Login"); |
+ form.password_element = ASCIIToUTF16("Passwd"); |
+ form.password_value = ASCIIToUTF16("password"); |
+ form.password_autocomplete_set = true; |
+ form.submit_element = ASCIIToUTF16("signIn"); |
+ form.signon_realm = "http://www.google.com"; |
+ return form; |
+ } |
+ |
bool FormsAreEqual(const autofill::PasswordForm& lhs, |
const autofill::PasswordForm& rhs) { |
if (lhs.origin != rhs.origin) |
@@ -758,4 +771,37 @@ TEST_F(PasswordManagerTest, SyncCredentialsNotSaved) { |
manager()->OnPasswordFormsRendered(observed, true); |
} |
+TEST_F(PasswordManagerTest, FormSubmitWithOnlyPassowrdField) { |
+ // Test that observing a newly submitted form shows the save password bar. |
vabr (Chromium)
2014/09/15 13:01:45
nits:
(1) Do mention what is special about the for
Pritam Nikam
2014/09/15 15:02:09
Done.
|
+ std::vector<PasswordForm*> result; // Empty password store. |
+ EXPECT_CALL(driver_, FillPasswordForm(_)).Times(Exactly(0)); |
+ EXPECT_CALL(*store_.get(), GetLogins(_, _, _)) |
+ .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return())); |
+ std::vector<PasswordForm> observed; |
+ PasswordForm form(MakeSimpleFormWithOnlyPasswordField()); |
+ observed.push_back(form); |
+ manager()->OnPasswordFormsParsed(observed); // The initial load. |
+ manager()->OnPasswordFormsRendered(observed, true); // The initial layout. |
+ |
+ // Simulate the user generating the password and submitting the form. |
vabr (Chromium)
2014/09/15 13:01:45
Don't mix password generation in -- we only allow
Pritam Nikam
2014/09/15 15:02:08
Done.
|
+ manager()->SetFormHasGeneratedPassword(form); |
+ manager()->ProvisionallySavePassword(form); |
+ |
+ // The user should not be presented with an infobar as they have already given |
vabr (Chromium)
2014/09/15 13:01:46
This whole comment looks wrong: the save password
Pritam Nikam
2014/09/15 15:02:08
Done.
|
+ // consent by using the generated password. The form should be saved once |
+ // navigation occurs. The client will be informed that automatic saving has |
+ // occured. |
+ EXPECT_CALL(client_, PromptUserToSavePasswordPtr(_)).Times(Exactly(0)); |
vabr (Chromium)
2014/09/15 13:01:46
Please update the expectations following the clari
Pritam Nikam
2014/09/15 15:02:08
Done.
|
+ EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form))); |
+ scoped_ptr<PasswordFormManager> saved_form_manager; |
+ EXPECT_CALL(client_, AutomaticPasswordSavePtr(_)).Times(Exactly(1)).WillOnce( |
+ WithArg<0>(SaveToScopedPtr(&saved_form_manager))); |
+ |
+ // Now the password manager waits for the navigation to complete. |
+ observed.clear(); |
+ manager()->OnPasswordFormsParsed(observed); // The post-navigation load. |
+ manager()->OnPasswordFormsRendered(observed, |
+ true); // The post-navigation layout. |
+} |
+ |
} // namespace password_manager |