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..cecba4f5465f19aead9804a1d70dde7cdc3adf46 100644 |
--- a/chrome/browser/password_manager/password_manager_unittest.cc |
+++ b/chrome/browser/password_manager/password_manager_unittest.cc |
@@ -30,6 +30,8 @@ using testing::Exactly; |
using testing::Return; |
using testing::WithArg; |
+namespace { |
+ |
class MockPasswordManagerDelegate : public PasswordManagerDelegate { |
public: |
MOCK_METHOD1(FillPasswordForm, void(const autofill::PasswordFormFillData&)); |
@@ -46,6 +48,31 @@ ACTION_P(SaveToScopedPtr, scoped) { |
scoped->reset(arg0); |
} |
+class TestPasswordManager : public PasswordManager { |
+ public: |
+ TestPasswordManager(content::WebContents* contents, |
+ PasswordManagerDelegate* delegate) |
+ : PasswordManager(contents, 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); |
+}; |
+ |
+} // namespace |
+ |
class PasswordManagerTest : public ChromeRenderViewHostTestHarness { |
protected: |
virtual void SetUp() { |
@@ -55,7 +82,7 @@ class PasswordManagerTest : public ChromeRenderViewHostTestHarness { |
profile(), MockPasswordStore::Build).get()); |
EXPECT_CALL(delegate_, GetProfile()).WillRepeatedly(Return(profile())); |
- PasswordManager::CreateForWebContentsAndDelegate( |
+ manager_ = TestPasswordManager::CreateForWebContentsAndDelegate( |
web_contents(), &delegate_); |
EXPECT_CALL(delegate_, DidLastPageLoadEncounterSSLErrors()) |
.WillRepeatedly(Return(false)); |
@@ -81,12 +108,50 @@ class PasswordManagerTest : public ChromeRenderViewHostTestHarness { |
return form; |
} |
- PasswordManager* manager() { |
- return PasswordManager::FromWebContents(web_contents()); |
+ bool FormsAreEqual(const content::PasswordForm& lhs, |
+ const content::PasswordForm& rhs) { |
+ if (lhs.origin != rhs.origin) |
+ return false; |
+ if (lhs.action != rhs.action) |
+ return false; |
+ if (lhs.username_element != rhs.username_element) |
+ return false; |
+ if (lhs.password_element != rhs.password_element) |
+ return false; |
+ if (lhs.username_value != rhs.username_value) |
+ return false; |
+ if (lhs.password_value != rhs.password_value) |
+ return false; |
+ if (lhs.password_autocomplete_set != rhs.password_autocomplete_set) |
+ return false; |
+ if (lhs.submit_element != rhs.submit_element) |
+ return false; |
+ if (lhs.signon_realm != rhs.signon_realm) |
+ return false; |
+ return true; |
+ } |
+ |
+ TestPasswordManager* manager() { |
+ return manager_; |
+ } |
+ |
+ void OnPasswordFormSubmitted(const content::PasswordForm& form) { |
+ manager()->OnPasswordFormSubmitted(form); |
+ } |
+ |
+ PasswordManager::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 +273,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 +296,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 +344,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 +353,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 +529,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_TRUE(FormsAreEqual(form, submitted_form_)); |
+} |