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 ced8c5025518284637502b2cca52b1b5b79c7b3d..ba13327758c5b582f22cf36bb81f3e9314ee4b4e 100644 |
--- a/chrome/browser/password_manager/password_manager_unittest.cc |
+++ b/chrome/browser/password_manager/password_manager_unittest.cc |
@@ -14,6 +14,8 @@ |
#include "chrome/test/base/chrome_render_view_host_test_harness.h" |
#include "chrome/test/base/testing_profile.h" |
#include "content/browser/tab_contents/test_tab_contents.h" |
+#include "content/public/browser/navigation_details.h" |
+#include "content/public/common/frame_navigate_params.h" |
#include "content/test/test_browser_thread.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -206,12 +208,51 @@ TEST_F(PasswordManagerTest, FormSeenThenLeftPage) { |
manager()->OnPasswordFormsFound(observed); // The initial load. |
manager()->OnPasswordFormsVisible(observed); // The initial layout. |
- manager()->DidNavigate(); |
+ content::LoadCommittedDetails details; |
+ content::FrameNavigateParams params; |
+ params.password_form = form; |
+ manager()->DidNavigateAnyFrame(details, params); |
// No expected calls. |
manager()->DidStopLoading(); |
} |
+TEST_F(PasswordManagerTest, FormSubmitAfterNavigateSubframe) { |
+ // Test that navigating a subframe does not prevent us from showing the save |
+ // password infobar. |
+ std::vector<PasswordForm*> result; // Empty password store. |
+ EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0)); |
+ EXPECT_CALL(*store_, GetLogins(_,_)) |
+ .WillOnce(DoAll(WithArg<1>(InvokeConsumer(0, result)), Return(0))); |
+ std::vector<PasswordForm> observed; |
+ PasswordForm form(MakeSimpleForm()); |
+ observed.push_back(form); |
+ manager()->OnPasswordFormsFound(observed); // The initial load. |
+ manager()->OnPasswordFormsVisible(observed); // The initial layout. |
+ |
+ scoped_ptr<PasswordFormManager> form_to_save; |
+ EXPECT_CALL(delegate_, AddSavePasswordInfoBar(_)) |
+ .WillOnce(WithArg<0>(SaveToScopedPtr(&form_to_save))); |
+ |
+ // Simulate navigating a sub-frame. |
+ content::LoadCommittedDetails details; |
+ content::FrameNavigateParams params; |
+ manager()->DidNavigateAnyFrame(details, params); |
+ |
+ // Simulate navigating the real page. |
+ params.password_form = form; |
+ manager()->DidNavigateAnyFrame(details, params); |
+ |
+ // Now the password manager waits for the navigation to complete. |
+ manager()->DidStopLoading(); |
+ |
+ ASSERT_FALSE(NULL == form_to_save.get()); |
+ EXPECT_CALL(*store_, AddLogin(FormMatches(form))); |
+ |
+ // Simulate saving the form, as if the info bar was accepted. |
+ form_to_save->Save(); |
+} |
+ |
TEST_F(PasswordManagerTest, FormSubmitFailedLogin) { |
std::vector<PasswordForm*> result; // Empty password store. |
EXPECT_CALL(delegate_, FillPasswordForm(_)).Times(Exactly(0)); |