Index: chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc |
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc |
index ea97c61823c588f4c2dc089330f8780c89905891..30be83e7ee376a56d60124547467d36f893da93d 100644 |
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc |
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc |
@@ -19,16 +19,71 @@ |
#include "components/password_manager/core/browser/stub_password_manager_client.h" |
#include "components/password_manager/core/browser/stub_password_manager_driver.h" |
#include "components/password_manager/core/common/password_manager_ui.h" |
+#include "content/public/browser/navigation_details.h" |
#include "content/public/test/test_browser_thread_bundle.h" |
#include "content/public/test/web_contents_tester.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+using ::testing::ElementsAre; |
+using ::testing::Pointee; |
+ |
namespace { |
const int64 kSlowNavigationDelayInMS = 2000; |
const int64 kQuickNavigationDelayInMS = 500; |
+// This sublass is used to disable some code paths which are not essential for |
+// testing. |
+class TestManagePasswordsUIController : public ManagePasswordsUIController { |
+ public: |
+ TestManagePasswordsUIController( |
+ content::WebContents* contents, |
+ password_manager::PasswordManagerClient* client); |
+ ~TestManagePasswordsUIController() override; |
+ |
+ base::TimeDelta Elapsed() const override; |
+ void SetElapsed(base::TimeDelta elapsed) { elapsed_ = elapsed; } |
+ |
+ using ManagePasswordsUIController::DidNavigateMainFrame; |
+ |
+ private: |
+ void UpdateBubbleAndIconVisibility() override; |
+ void UpdateAndroidAccountChooserInfoBarVisibility() override; |
+ void SavePasswordInternal() override {} |
+ void NeverSavePasswordInternal() override {} |
+ |
+ base::TimeDelta elapsed_; |
+}; |
+ |
+TestManagePasswordsUIController::TestManagePasswordsUIController( |
+ content::WebContents* contents, |
+ password_manager::PasswordManagerClient* client) |
+ : ManagePasswordsUIController(contents) { |
+ // Do not silently replace an existing ManagePasswordsUIController because it |
+ // unregisters itself in WebContentsDestroyed(). |
+ EXPECT_FALSE(contents->GetUserData(UserDataKey())); |
+ contents->SetUserData(UserDataKey(), this); |
+ set_client(client); |
+} |
+ |
+TestManagePasswordsUIController::~TestManagePasswordsUIController() { |
+} |
+ |
+base::TimeDelta TestManagePasswordsUIController::Elapsed() const { |
+ return elapsed_; |
+} |
+ |
+void TestManagePasswordsUIController::UpdateBubbleAndIconVisibility() { |
+ ManagePasswordsUIController::UpdateBubbleAndIconVisibility(); |
+ OnBubbleShown(); |
+} |
+ |
+void TestManagePasswordsUIController:: |
+ UpdateAndroidAccountChooserInfoBarVisibility() { |
+ OnBubbleShown(); |
+} |
+ |
} // namespace |
class ManagePasswordsUIControllerTest : public ChromeRenderViewHostTestHarness { |
@@ -41,7 +96,7 @@ class ManagePasswordsUIControllerTest : public ChromeRenderViewHostTestHarness { |
// Create the test UIController here so that it's bound to |
// |test_web_contents_|, and will be retrieved correctly via |
// ManagePasswordsUIController::FromWebContents in |controller()|. |
- new ManagePasswordsUIControllerMock(web_contents()); |
+ new TestManagePasswordsUIController(web_contents(), &client_); |
test_local_form_.origin = GURL("http://example.com"); |
test_local_form_.username_value = base::ASCIIToUTF16("username"); |
@@ -62,8 +117,8 @@ class ManagePasswordsUIControllerTest : public ChromeRenderViewHostTestHarness { |
return credential_info_.get(); |
} |
- ManagePasswordsUIControllerMock* controller() { |
- return static_cast<ManagePasswordsUIControllerMock*>( |
+ TestManagePasswordsUIController* controller() { |
+ return static_cast<TestManagePasswordsUIController*>( |
ManagePasswordsUIController::FromWebContents(web_contents())); |
} |
@@ -71,12 +126,24 @@ class ManagePasswordsUIControllerTest : public ChromeRenderViewHostTestHarness { |
credential_info_.reset(new password_manager::CredentialInfo(info)); |
} |
+ scoped_ptr<password_manager::PasswordFormManager> CreateFormManager(); |
+ |
private: |
+ password_manager::StubPasswordManagerClient client_; |
+ |
autofill::PasswordForm test_local_form_; |
autofill::PasswordForm test_federated_form_; |
scoped_ptr<password_manager::CredentialInfo> credential_info_; |
}; |
+scoped_ptr<password_manager::PasswordFormManager> |
+ManagePasswordsUIControllerTest::CreateFormManager() { |
+ ScopedVector<autofill::PasswordForm> stored_forms; |
+ stored_forms.push_back(new autofill::PasswordForm(test_local_form())); |
+ return ManagePasswordsUIControllerMock::CreateFormManager( |
+ &client_, test_local_form(), stored_forms.Pass()); |
+} |
+ |
TEST_F(ManagePasswordsUIControllerTest, DefaultState) { |
EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); |
EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
@@ -88,7 +155,7 @@ TEST_F(ManagePasswordsUIControllerTest, DefaultState) { |
} |
TEST_F(ManagePasswordsUIControllerTest, PasswordAutofilled) { |
- base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); |
+ base::string16 kTestUsername = test_local_form().username_value; |
autofill::PasswordFormMap map; |
map[kTestUsername] = &test_local_form(); |
controller()->OnPasswordAutofilled(map); |
@@ -96,12 +163,11 @@ TEST_F(ManagePasswordsUIControllerTest, PasswordAutofilled) { |
EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); |
EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
EXPECT_EQ(test_local_form().origin, controller()->origin()); |
- EXPECT_EQ(1u, controller()->best_matches().size()); |
- ASSERT_EQ(1u, controller()->best_matches().count(kTestUsername)); |
+ ASSERT_EQ(1u, controller()->GetCurrentForms().size()); |
+ EXPECT_EQ(kTestUsername, controller()->GetCurrentForms()[0]->username_value); |
// Controller should store a separate copy of the form as it doesn't own it. |
- EXPECT_NE(&test_local_form(), |
- controller()->best_matches().find(kTestUsername)->second); |
+ EXPECT_NE(&test_local_form(), controller()->GetCurrentForms()[0]); |
ManagePasswordsIconMock mock; |
controller()->UpdateIconAndBubbleState(&mock); |
@@ -109,11 +175,8 @@ TEST_F(ManagePasswordsUIControllerTest, PasswordAutofilled) { |
} |
TEST_F(ManagePasswordsUIControllerTest, PasswordSubmitted) { |
- password_manager::StubPasswordManagerClient client; |
- password_manager::StubPasswordManagerDriver driver; |
scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
- new password_manager::PasswordFormManager( |
- NULL, &client, driver.AsWeakPtr(), test_local_form(), false)); |
+ CreateFormManager()); |
controller()->OnPasswordSubmitted(test_form_manager.Pass()); |
EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, |
controller()->state()); |
@@ -131,11 +194,11 @@ TEST_F(ManagePasswordsUIControllerTest, PasswordSubmitted) { |
} |
TEST_F(ManagePasswordsUIControllerTest, PasswordSaved) { |
- password_manager::StubPasswordManagerClient client; |
- password_manager::StubPasswordManagerDriver driver; |
scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
- new password_manager::PasswordFormManager( |
- NULL, &client, driver.AsWeakPtr(), test_local_form(), false)); |
+ CreateFormManager()); |
+ test_form_manager->ProvisionallySave( |
+ test_local_form(), |
+ password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
controller()->OnPasswordSubmitted(test_form_manager.Pass()); |
ManagePasswordsIconMock mock; |
@@ -146,11 +209,11 @@ TEST_F(ManagePasswordsUIControllerTest, PasswordSaved) { |
} |
TEST_F(ManagePasswordsUIControllerTest, PasswordBlacklisted) { |
- password_manager::StubPasswordManagerClient client; |
- password_manager::StubPasswordManagerDriver driver; |
scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
- new password_manager::PasswordFormManager( |
- NULL, &client, driver.AsWeakPtr(), test_local_form(), false)); |
+ CreateFormManager()); |
+ test_form_manager->ProvisionallySave( |
+ test_local_form(), |
+ password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
controller()->OnPasswordSubmitted(test_form_manager.Pass()); |
ManagePasswordsIconMock mock; |
@@ -161,11 +224,8 @@ TEST_F(ManagePasswordsUIControllerTest, PasswordBlacklisted) { |
} |
TEST_F(ManagePasswordsUIControllerTest, QuickNavigations) { |
- password_manager::StubPasswordManagerClient client; |
- password_manager::StubPasswordManagerDriver driver; |
scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
- new password_manager::PasswordFormManager( |
- NULL, &client, driver.AsWeakPtr(), test_local_form(), false)); |
+ CreateFormManager()); |
controller()->OnPasswordSubmitted(test_form_manager.Pass()); |
ManagePasswordsIconMock mock; |
controller()->UpdateIconAndBubbleState(&mock); |
@@ -187,11 +247,8 @@ TEST_F(ManagePasswordsUIControllerTest, QuickNavigations) { |
} |
TEST_F(ManagePasswordsUIControllerTest, SlowNavigations) { |
- password_manager::StubPasswordManagerClient client; |
- password_manager::StubPasswordManagerDriver driver; |
scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
- new password_manager::PasswordFormManager( |
- NULL, &client, driver.AsWeakPtr(), test_local_form(), false)); |
+ CreateFormManager()); |
controller()->OnPasswordSubmitted(test_form_manager.Pass()); |
ManagePasswordsIconMock mock; |
controller()->UpdateIconAndBubbleState(&mock); |
@@ -214,11 +271,8 @@ TEST_F(ManagePasswordsUIControllerTest, PasswordSubmittedToNonWebbyURL) { |
content::WebContentsTester::For(web_contents()) |
->NavigateAndCommit(GURL("chrome://sign-in")); |
- password_manager::StubPasswordManagerClient client; |
- password_manager::StubPasswordManagerDriver driver; |
scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
- new password_manager::PasswordFormManager( |
- NULL, &client, driver.AsWeakPtr(), test_local_form(), false)); |
+ CreateFormManager()); |
controller()->OnPasswordSubmitted(test_form_manager.Pass()); |
EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); |
EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
@@ -235,7 +289,7 @@ TEST_F(ManagePasswordsUIControllerTest, PasswordSubmittedToNonWebbyURL) { |
TEST_F(ManagePasswordsUIControllerTest, BlacklistBlockedAutofill) { |
test_local_form().blacklisted_by_user = true; |
- base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); |
+ base::string16 kTestUsername = test_local_form().username_value; |
autofill::PasswordFormMap map; |
map[kTestUsername] = &test_local_form(); |
controller()->OnBlacklistBlockedAutofill(map); |
@@ -243,12 +297,11 @@ TEST_F(ManagePasswordsUIControllerTest, BlacklistBlockedAutofill) { |
EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, controller()->state()); |
EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
EXPECT_EQ(test_local_form().origin, controller()->origin()); |
- EXPECT_EQ(1u, controller()->best_matches().size()); |
- ASSERT_EQ(1u, controller()->best_matches().count(kTestUsername)); |
+ ASSERT_EQ(1u, controller()->GetCurrentForms().size()); |
+ EXPECT_EQ(kTestUsername, controller()->GetCurrentForms()[0]->username_value); |
// Controller should store a separate copy of the form as it doesn't own it. |
- EXPECT_NE(&test_local_form(), |
- controller()->best_matches().find(kTestUsername)->second); |
+ EXPECT_NE(&test_local_form(), controller()->GetCurrentForms()[0]); |
ManagePasswordsIconMock mock; |
controller()->UpdateIconAndBubbleState(&mock); |
@@ -259,6 +312,7 @@ TEST_F(ManagePasswordsUIControllerTest, ClickedUnblacklist) { |
base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); |
autofill::PasswordFormMap map; |
map[kTestUsername] = &test_local_form(); |
+ test_local_form().blacklisted_by_user = true; |
controller()->OnBlacklistBlockedAutofill(map); |
controller()->UnblacklistSite(); |
@@ -314,11 +368,8 @@ TEST_F(ManagePasswordsUIControllerTest, BlacklistedElsewhere) { |
} |
TEST_F(ManagePasswordsUIControllerTest, AutomaticPasswordSave) { |
- password_manager::StubPasswordManagerClient client; |
- password_manager::StubPasswordManagerDriver driver; |
scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
- new password_manager::PasswordFormManager( |
- NULL, &client, driver.AsWeakPtr(), test_local_form(), false)); |
+ CreateFormManager()); |
controller()->OnAutomaticPasswordSave(test_form_manager.Pass()); |
EXPECT_EQ(password_manager::ui::CONFIRMATION_STATE, controller()->state()); |
@@ -342,7 +393,8 @@ TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialLocal) { |
controller()->state()); |
EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
EXPECT_EQ(origin, controller()->origin()); |
- EXPECT_EQ(autofill::ConstPasswordFormMap(), controller()->best_matches()); |
+ EXPECT_THAT(controller()->GetCurrentForms(), |
+ ElementsAre(Pointee(test_local_form()))); |
ManagePasswordsIconMock mock; |
controller()->UpdateIconAndBubbleState(&mock); |
@@ -352,7 +404,7 @@ TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialLocal) { |
test_local_form(), |
password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL); |
controller()->OnBubbleHidden(); |
- EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); |
+ EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); |
ASSERT_TRUE(credential_info()); |
EXPECT_EQ(test_local_form().username_value, credential_info()->id); |
EXPECT_EQ(test_local_form().password_value, credential_info()->password); |
@@ -375,7 +427,8 @@ TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialLocalButFederated) { |
controller()->state()); |
EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
EXPECT_EQ(origin, controller()->origin()); |
- EXPECT_EQ(autofill::ConstPasswordFormMap(), controller()->best_matches()); |
+ EXPECT_THAT(controller()->GetCurrentForms(), |
+ ElementsAre(Pointee(test_federated_form()))); |
ManagePasswordsIconMock mock; |
controller()->UpdateIconAndBubbleState(&mock); |
@@ -385,7 +438,7 @@ TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialLocalButFederated) { |
test_federated_form(), |
password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL); |
controller()->OnBubbleHidden(); |
- EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); |
+ EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); |
ASSERT_TRUE(credential_info()); |
EXPECT_EQ(test_federated_form().username_value, credential_info()->id); |
EXPECT_EQ(test_federated_form().federation_url, |
@@ -408,7 +461,7 @@ TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialFederated) { |
EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, |
controller()->state()); |
EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
- EXPECT_EQ(autofill::ConstPasswordFormMap(), controller()->best_matches()); |
+ EXPECT_EQ(0u, controller()->GetCurrentForms().size()); |
EXPECT_EQ(origin, controller()->origin()); |
ManagePasswordsIconMock mock; |
@@ -419,7 +472,7 @@ TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialFederated) { |
test_local_form(), |
password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED); |
controller()->OnBubbleHidden(); |
- EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); |
+ EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); |
ASSERT_TRUE(credential_info()); |
EXPECT_EQ(test_local_form().username_value, credential_info()->id); |
EXPECT_TRUE(credential_info()->password.empty()); |
@@ -443,7 +496,7 @@ TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialCancel) { |
test_local_form(), |
password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY); |
controller()->OnBubbleHidden(); |
- EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); |
+ EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); |
ASSERT_TRUE(credential_info()); |
EXPECT_TRUE(credential_info()->federation.is_empty()); |
EXPECT_TRUE(credential_info()->password.empty()); |
@@ -457,8 +510,8 @@ TEST_F(ManagePasswordsUIControllerTest, AutoSignin) { |
controller()->OnAutoSignin(local_credentials.Pass()); |
EXPECT_EQ(password_manager::ui::AUTO_SIGNIN_STATE, controller()->state()); |
EXPECT_EQ(test_local_form().origin, controller()->origin()); |
- ASSERT_FALSE(controller()->local_credentials_forms().empty()); |
- EXPECT_EQ(test_local_form(), *controller()->local_credentials_forms()[0]); |
+ ASSERT_FALSE(controller()->GetCurrentForms().empty()); |
+ EXPECT_EQ(test_local_form(), *controller()->GetCurrentForms()[0]); |
ManagePasswordsIconMock mock; |
controller()->UpdateIconAndBubbleState(&mock); |
EXPECT_EQ(password_manager::ui::AUTO_SIGNIN_STATE, mock.state()); |