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 db036a0a60f249718544e612d8e68f3136c55a90..a53e6c0e029772ee125a6bd59c8e5ef1447f7cdb 100644 |
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc |
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc |
@@ -805,3 +805,86 @@ TEST_F(ManagePasswordsUIControllerTest, OpenBubbleTwice) { |
// up with the controller's state. |
EXPECT_FALSE(proxy_delegate); |
} |
+ |
+TEST_F(ManagePasswordsUIControllerTest, ManualFallbackForSaving_UseFallback) { |
+ for (bool is_update : {false, true}) { |
+ SCOPED_TRACE(testing::Message("is_update = ") << is_update); |
+ std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( |
+ CreateFormManager()); |
+ test_form_manager->ProvisionallySave( |
+ test_local_form(), |
+ password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
+ EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
+ controller()->OnShowManualFallbackForSaving( |
+ std::move(test_form_manager), false /* has_generated_password */, |
+ is_update); |
+ ExpectIconAndControllerStateIs( |
+ is_update ? password_manager::ui::PENDING_PASSWORD_UPDATE_STATE |
+ : password_manager::ui::PENDING_PASSWORD_STATE); |
+ EXPECT_FALSE(controller()->opened_bubble()); |
+ |
+ // A user clicks on omnibox icon, opens the bubble and press Save/Update. |
+ if (is_update) { |
+ EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
+ controller()->UpdatePassword(autofill::PasswordForm()); |
+ } else { |
+ controller()->SavePassword(test_local_form().username_value); |
+ } |
+ ExpectIconAndControllerStateIs(password_manager::ui::MANAGE_STATE); |
+ testing::Mock::VerifyAndClearExpectations(controller()); |
+ } |
+} |
+ |
+TEST_F(ManagePasswordsUIControllerTest, ManualFallbackForSaving_HideFallback) { |
+ for (bool is_update : {false, true}) { |
+ SCOPED_TRACE(testing::Message("is_update = ") << is_update); |
+ std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( |
+ CreateFormManager()); |
+ test_form_manager->ProvisionallySave( |
+ test_local_form(), |
+ password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
+ EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
+ controller()->OnShowManualFallbackForSaving( |
+ std::move(test_form_manager), false /* has_generated_password */, |
+ is_update); |
+ ExpectIconAndControllerStateIs( |
+ is_update ? password_manager::ui::PENDING_PASSWORD_UPDATE_STATE |
+ : password_manager::ui::PENDING_PASSWORD_STATE); |
+ EXPECT_FALSE(controller()->opened_bubble()); |
+ |
+ // A user clears the password field. It hides the fallback. |
+ EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
+ controller()->OnHideManualFallbackForSaving(); |
+ ExpectIconAndControllerStateIs(password_manager::ui::MANAGE_STATE); |
+ testing::Mock::VerifyAndClearExpectations(controller()); |
+ } |
+} |
+ |
+TEST_F(ManagePasswordsUIControllerTest, |
+ ManualFallbackForSaving_GeneratedPassword) { |
+ for (bool user_closed_bubble : {false, true}) { |
+ SCOPED_TRACE(testing::Message("user_closed_bubble = ") |
+ << user_closed_bubble); |
+ std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( |
+ CreateFormManager()); |
+ test_form_manager->ProvisionallySave( |
+ test_local_form(), |
+ password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
+ EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
+ controller()->OnShowManualFallbackForSaving( |
+ std::move(test_form_manager), true /* has_generated_password */, false); |
+ ExpectIconAndControllerStateIs(password_manager::ui::CONFIRMATION_STATE); |
+ EXPECT_FALSE(controller()->opened_bubble()); |
+ |
+ EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
+ if (user_closed_bubble) { |
+ // A user opens the confirmation bubble and presses OK. |
+ controller()->OnBubbleHidden(); |
+ } else { |
+ // The user removes the generated password. It hides the fallback. |
+ controller()->OnHideManualFallbackForSaving(); |
+ } |
+ ExpectIconAndControllerStateIs(password_manager::ui::MANAGE_STATE); |
+ testing::Mock::VerifyAndClearExpectations(controller()); |
+ } |
+} |