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 45ab8518e7566111bc776f8839f1c377288453cf..60c01a1297a9b92a4e7bf4cc389ed5d6ea571402 100644 |
--- a/chrome/browser/password_manager/password_manager_unittest.cc |
+++ b/chrome/browser/password_manager/password_manager_unittest.cc |
@@ -46,6 +46,28 @@ ACTION_P(SaveToScopedPtr, scoped) { |
scoped->reset(arg0); |
} |
+class TestPasswordManager : public PasswordManager { |
+ public: |
+ TestPasswordManager(content::WebContents* contents, |
+ PasswordManagerDelegate* delegate); |
+ virtual ~TestPasswordManager(); |
+ |
+ virtual void OnPasswordFormSubmitted(const PasswordForm& form) OVERRIDE { |
+ PasswordManager::OnPasswordFormSubmitted(form); |
+ } |
+ |
+ static TestPasswordManager* CreateForWebContentsAndDelegate( |
+ content::WebContents* contents, |
+ PasswordManagerDelegate* delegate) { |
+ TestPasswordManager* tpm = new TestPasswordManager(contents, delegate); |
+ contents->SetUserData(UserDataKey(), tpm); |
+ return tpm; |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(TestPasswordManager); |
+}; |
+ |
class PasswordManagerTest : public ChromeRenderViewHostTestHarness { |
protected: |
virtual void SetUp() { |
@@ -55,7 +77,7 @@ class PasswordManagerTest : public ChromeRenderViewHostTestHarness { |
profile(), MockPasswordStore::Build).get()); |
EXPECT_CALL(delegate_, GetProfile()).WillRepeatedly(Return(profile())); |
- PasswordManager::CreateForWebContentsAndDelegate( |
+ password_manager_ = TestPasswordManager::CreateForWebContentsAndDelegate( |
web_contents(), &delegate_); |
EXPECT_CALL(delegate_, DidLastPageLoadEncounterSSLErrors()) |
.WillRepeatedly(Return(false)); |
@@ -81,12 +103,27 @@ class PasswordManagerTest : public ChromeRenderViewHostTestHarness { |
return form; |
} |
- PasswordManager* manager() { |
- return PasswordManager::FromWebContents(web_contents()); |
+ TestPasswordManager* manager() { |
+ return manager_; |
+ } |
+ |
+ void OnPasswordFormSubmitted(const content::PasswordForm& form) { |
+ manager()->OnPasswordFormSubmitted(form); |
+ } |
+ |
+ PasswordSubmittedCallback SubmissionCallback() { |
+ return base::Bind(&PasswordManagerTest::FormSubmitted, |
+ base::Unretained(this)); |
+ } |
+ |
+ void FormSubmitted(const content::PasswordForm& form) { |
+ submitted_form_ = form; |
} |
scoped_refptr<MockPasswordStore> store_; |
+ TestPasswordManager manager_; |
MockPasswordManagerDelegate delegate_; // Owned by manager_. |
+ PasswordForm submitted_form_; |
}; |
MATCHER_P(FormMatches, form, "") { |
@@ -208,15 +245,8 @@ TEST_F(PasswordManagerTest, FormSeenThenLeftPage) { |
manager()->OnPasswordFormsParsed(observed); // The initial load. |
manager()->OnPasswordFormsRendered(observed); // The initial layout. |
- PasswordForm empty_form(form); |
- empty_form.username_value = string16(); |
- empty_form.password_value = string16(); |
- content::LoadCommittedDetails details; |
- content::FrameNavigateParams params; |
- params.password_form = empty_form; |
- manager()->DidNavigateAnyFrame(details, params); |
- |
- // No expected calls. |
+ // No message from the renderer that a password was submitted. No |
+ // expected calls. |
EXPECT_CALL(delegate_, AddSavePasswordInfoBarIfPermitted(_)).Times(0); |
observed.clear(); |
manager()->OnPasswordFormsParsed(observed); // The post-navigation load. |
@@ -238,14 +268,11 @@ TEST_F(PasswordManagerTest, FormSubmitAfterNavigateSubframe) { |
// Simulate navigating a sub-frame. |
content::LoadCommittedDetails details; |
- details.is_main_frame = false; |
content::FrameNavigateParams params; |
manager()->DidNavigateAnyFrame(details, params); |
- // Simulate navigating the real page. |
- details.is_main_frame = true; |
- params.password_form = form; |
- manager()->DidNavigateAnyFrame(details, params); |
+ // Simulate submitting the password. |
+ OnPasswordFormSubmitted(form); |
// Now the password manager waits for the navigation to complete. |
scoped_ptr<PasswordFormManager> form_to_save; |
@@ -289,7 +316,7 @@ TEST_F(PasswordManagerTest, FormSubmitWithFormOnPreviousPage) { |
content::LoadCommittedDetails details; |
details.is_main_frame = true; |
content::FrameNavigateParams params; |
- manager()->DidNavigateAnyFrame(details, params); |
+ manager()->DidNavigateMainFrame(details, params); |
// This page contains a form with the same markup, but on a different |
// URL. |
@@ -298,8 +325,7 @@ TEST_F(PasswordManagerTest, FormSubmitWithFormOnPreviousPage) { |
manager()->OnPasswordFormsRendered(observed); |
// Now submit this form |
- params.password_form = second_form; |
- manager()->DidNavigateAnyFrame(details, params); |
+ OnPasswordFormSubmitted(second_form); |
// Navigation after form submit. |
scoped_ptr<PasswordFormManager> form_to_save; |
@@ -475,3 +501,10 @@ TEST_F(PasswordManagerTest, GeneratedPasswordFormSavedAutocompleteOff) { |
manager()->OnPasswordFormsParsed(observed); // The post-navigation load. |
manager()->OnPasswordFormsRendered(observed); // The post-navigation layout. |
} |
+ |
+TEST_F(PasswordManagerTest, SubmissionCallbackTest) { |
+ manager()->AddSubmissionCallback(SubmissionCallback()); |
+ PasswordForm form = MakeSimpleForm(); |
+ OnPasswordFormSubmitted(form); |
+ EXPECT_EQ(form, submitted_form_); |
+} |