| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <map> |
| 5 #include <memory> | 6 #include <memory> |
| 6 #include <utility> | 7 #include <utility> |
| 7 #include <vector> | 8 #include <vector> |
| 8 | 9 |
| 9 #include "base/bind.h" | 10 #include "base/bind.h" |
| 10 #include "base/macros.h" | 11 #include "base/macros.h" |
| 11 #include "base/memory/ptr_util.h" | 12 #include "base/memory/ptr_util.h" |
| 13 #include "base/strings/string16.h" |
| 12 #include "base/strings/string_number_conversions.h" | 14 #include "base/strings/string_number_conversions.h" |
| 13 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
| 14 #include "build/build_config.h" | 16 #include "build/build_config.h" |
| 15 #include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h" | 17 #include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h" |
| 16 #include "chrome/browser/ui/passwords/manage_passwords_icon_view.h" | 18 #include "chrome/browser/ui/passwords/manage_passwords_icon_view.h" |
| 17 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h" | 19 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h" |
| 18 #include "chrome/browser/ui/passwords/password_dialog_controller.h" | 20 #include "chrome/browser/ui/passwords/password_dialog_controller.h" |
| 19 #include "chrome/browser/ui/passwords/password_dialog_prompts.h" | 21 #include "chrome/browser/ui/passwords/password_dialog_prompts.h" |
| 20 #include "chrome/browser/ui/passwords/passwords_model_delegate.h" | 22 #include "chrome/browser/ui/passwords/passwords_model_delegate.h" |
| 21 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 23 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); | 270 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 269 if (state == password_manager::ui::PENDING_PASSWORD_STATE) | 271 if (state == password_manager::ui::PENDING_PASSWORD_STATE) |
| 270 controller()->OnPasswordSubmitted(std::move(test_form_manager)); | 272 controller()->OnPasswordSubmitted(std::move(test_form_manager)); |
| 271 else if (state == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) | 273 else if (state == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) |
| 272 controller()->OnUpdatePasswordSubmitted(std::move(test_form_manager)); | 274 controller()->OnUpdatePasswordSubmitted(std::move(test_form_manager)); |
| 273 else // password_manager::ui::CONFIRMATION_STATE | 275 else // password_manager::ui::CONFIRMATION_STATE |
| 274 controller()->OnAutomaticPasswordSave(std::move(test_form_manager)); | 276 controller()->OnAutomaticPasswordSave(std::move(test_form_manager)); |
| 275 ASSERT_EQ(state, controller()->GetState()); | 277 ASSERT_EQ(state, controller()->GetState()); |
| 276 | 278 |
| 277 // Autofill happens. | 279 // Autofill happens. |
| 278 std::unique_ptr<autofill::PasswordForm> test_form( | 280 std::map<base::string16, const autofill::PasswordForm*> map; |
| 279 new autofill::PasswordForm(test_local_form())); | |
| 280 autofill::PasswordFormMap map; | |
| 281 map.insert( | 281 map.insert( |
| 282 std::make_pair(test_local_form().username_value, std::move(test_form))); | 282 std::make_pair(test_local_form().username_value, &test_local_form())); |
| 283 controller()->OnPasswordAutofilled(map, map.begin()->second->origin, nullptr); | 283 controller()->OnPasswordAutofilled(map, map.begin()->second->origin, nullptr); |
| 284 | 284 |
| 285 // State shouldn't changed. | 285 // State shouldn't changed. |
| 286 EXPECT_EQ(state, controller()->GetState()); | 286 EXPECT_EQ(state, controller()->GetState()); |
| 287 ExpectIconStateIs(state); | 287 ExpectIconStateIs(state); |
| 288 } | 288 } |
| 289 | 289 |
| 290 TEST_F(ManagePasswordsUIControllerTest, DefaultState) { | 290 TEST_F(ManagePasswordsUIControllerTest, DefaultState) { |
| 291 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->GetState()); | 291 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->GetState()); |
| 292 EXPECT_EQ(GURL::EmptyGURL(), controller()->GetOrigin()); | 292 EXPECT_EQ(GURL::EmptyGURL(), controller()->GetOrigin()); |
| 293 | 293 |
| 294 ExpectIconStateIs(password_manager::ui::INACTIVE_STATE); | 294 ExpectIconStateIs(password_manager::ui::INACTIVE_STATE); |
| 295 } | 295 } |
| 296 | 296 |
| 297 TEST_F(ManagePasswordsUIControllerTest, PasswordAutofilled) { | 297 TEST_F(ManagePasswordsUIControllerTest, PasswordAutofilled) { |
| 298 std::unique_ptr<autofill::PasswordForm> test_form( | 298 const autofill::PasswordForm* test_form_ptr = &test_local_form(); |
| 299 new autofill::PasswordForm(test_local_form())); | 299 base::string16 kTestUsername = test_form_ptr->username_value; |
| 300 autofill::PasswordForm* test_form_ptr = test_form.get(); | 300 std::map<base::string16, const autofill::PasswordForm*> map; |
| 301 base::string16 kTestUsername = test_form->username_value; | 301 map.insert(std::make_pair(kTestUsername, test_form_ptr)); |
| 302 autofill::PasswordFormMap map; | |
| 303 map.insert(std::make_pair(kTestUsername, std::move(test_form))); | |
| 304 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); | 302 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 305 controller()->OnPasswordAutofilled(map, map.begin()->second->origin, nullptr); | 303 controller()->OnPasswordAutofilled(map, map.begin()->second->origin, nullptr); |
| 306 | 304 |
| 307 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); | 305 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); |
| 308 EXPECT_EQ(test_form_ptr->origin, controller()->GetOrigin()); | 306 EXPECT_EQ(test_form_ptr->origin, controller()->GetOrigin()); |
| 309 ASSERT_EQ(1u, controller()->GetCurrentForms().size()); | 307 ASSERT_EQ(1u, controller()->GetCurrentForms().size()); |
| 310 EXPECT_EQ(kTestUsername, controller()->GetCurrentForms()[0]->username_value); | 308 EXPECT_EQ(kTestUsername, controller()->GetCurrentForms()[0]->username_value); |
| 311 | 309 |
| 312 // Controller should store a separate copy of the form as it doesn't own it. | 310 // Controller should store a separate copy of the form as it doesn't own it. |
| 313 EXPECT_NE(test_form_ptr, controller()->GetCurrentForms()[0].get()); | 311 EXPECT_NE(test_form_ptr, controller()->GetCurrentForms()[0].get()); |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 480 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); | 478 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 481 controller()->OnPasswordSubmitted(std::move(test_form_manager)); | 479 controller()->OnPasswordSubmitted(std::move(test_form_manager)); |
| 482 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->GetState()); | 480 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->GetState()); |
| 483 EXPECT_EQ(GURL::EmptyGURL(), controller()->GetOrigin()); | 481 EXPECT_EQ(GURL::EmptyGURL(), controller()->GetOrigin()); |
| 484 | 482 |
| 485 ExpectIconStateIs(password_manager::ui::INACTIVE_STATE); | 483 ExpectIconStateIs(password_manager::ui::INACTIVE_STATE); |
| 486 } | 484 } |
| 487 | 485 |
| 488 TEST_F(ManagePasswordsUIControllerTest, BlacklistedElsewhere) { | 486 TEST_F(ManagePasswordsUIControllerTest, BlacklistedElsewhere) { |
| 489 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); | 487 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); |
| 490 autofill::PasswordFormMap map; | 488 std::map<base::string16, const autofill::PasswordForm*> map; |
| 491 map.insert(std::make_pair( | 489 map.insert(std::make_pair(kTestUsername, &test_local_form())); |
| 492 kTestUsername, | |
| 493 base::WrapUnique(new autofill::PasswordForm(test_local_form())))); | |
| 494 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); | 490 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 495 controller()->OnPasswordAutofilled(map, map.begin()->second->origin, nullptr); | 491 controller()->OnPasswordAutofilled(map, map.begin()->second->origin, nullptr); |
| 496 | 492 |
| 497 test_local_form().blacklisted_by_user = true; | 493 test_local_form().blacklisted_by_user = true; |
| 498 password_manager::PasswordStoreChange change( | 494 password_manager::PasswordStoreChange change( |
| 499 password_manager::PasswordStoreChange::ADD, test_local_form()); | 495 password_manager::PasswordStoreChange::ADD, test_local_form()); |
| 500 password_manager::PasswordStoreChangeList list(1, change); | 496 password_manager::PasswordStoreChangeList list(1, change); |
| 501 controller()->OnLoginsChanged(list); | 497 controller()->OnLoginsChanged(list); |
| 502 | 498 |
| 503 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); | 499 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 631 Return(&dialog_prompt())); | 627 Return(&dialog_prompt())); |
| 632 EXPECT_CALL(dialog_prompt(), ShowAutoSigninPrompt()); | 628 EXPECT_CALL(dialog_prompt(), ShowAutoSigninPrompt()); |
| 633 controller()->OnPromptEnableAutoSignin(); | 629 controller()->OnPromptEnableAutoSignin(); |
| 634 | 630 |
| 635 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->GetState()); | 631 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->GetState()); |
| 636 EXPECT_CALL(dialog_prompt(), ControllerGone()); | 632 EXPECT_CALL(dialog_prompt(), ControllerGone()); |
| 637 } | 633 } |
| 638 | 634 |
| 639 TEST_F(ManagePasswordsUIControllerTest, AutoSigninFirstRunAfterAutofill) { | 635 TEST_F(ManagePasswordsUIControllerTest, AutoSigninFirstRunAfterAutofill) { |
| 640 // Setup the managed state first. | 636 // Setup the managed state first. |
| 641 std::unique_ptr<autofill::PasswordForm> test_form( | 637 const autofill::PasswordForm* test_form_ptr = &test_local_form(); |
| 642 new autofill::PasswordForm(test_local_form())); | 638 const base::string16 kTestUsername = test_form_ptr->username_value; |
| 643 autofill::PasswordForm* test_form_ptr = test_form.get(); | 639 std::map<base::string16, const autofill::PasswordForm*> map; |
| 644 const base::string16 kTestUsername = test_form->username_value; | 640 map.insert(std::make_pair(kTestUsername, test_form_ptr)); |
| 645 autofill::PasswordFormMap map; | |
| 646 map.insert(std::make_pair(kTestUsername, std::move(test_form))); | |
| 647 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); | 641 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 648 controller()->OnPasswordAutofilled(map, test_form_ptr->origin, nullptr); | 642 controller()->OnPasswordAutofilled(map, test_form_ptr->origin, nullptr); |
| 649 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); | 643 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); |
| 650 | 644 |
| 651 // Pop up the autosignin promo. The state should stay intact. | 645 // Pop up the autosignin promo. The state should stay intact. |
| 652 EXPECT_CALL(*controller(), CreateAutoSigninPrompt(_)).WillOnce( | 646 EXPECT_CALL(*controller(), CreateAutoSigninPrompt(_)).WillOnce( |
| 653 Return(&dialog_prompt())); | 647 Return(&dialog_prompt())); |
| 654 EXPECT_CALL(dialog_prompt(), ShowAutoSigninPrompt()); | 648 EXPECT_CALL(dialog_prompt(), ShowAutoSigninPrompt()); |
| 655 controller()->OnPromptEnableAutoSignin(); | 649 controller()->OnPromptEnableAutoSignin(); |
| 656 | 650 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 678 EXPECT_CALL(dialog_prompt(), ControllerGone()); | 672 EXPECT_CALL(dialog_prompt(), ControllerGone()); |
| 679 } | 673 } |
| 680 | 674 |
| 681 TEST_F(ManagePasswordsUIControllerTest, AutofillDuringAutoSignin) { | 675 TEST_F(ManagePasswordsUIControllerTest, AutofillDuringAutoSignin) { |
| 682 std::vector<std::unique_ptr<autofill::PasswordForm>> local_credentials; | 676 std::vector<std::unique_ptr<autofill::PasswordForm>> local_credentials; |
| 683 local_credentials.emplace_back(new autofill::PasswordForm(test_local_form())); | 677 local_credentials.emplace_back(new autofill::PasswordForm(test_local_form())); |
| 684 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); | 678 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 685 controller()->OnAutoSignin(std::move(local_credentials), | 679 controller()->OnAutoSignin(std::move(local_credentials), |
| 686 test_local_form().origin); | 680 test_local_form().origin); |
| 687 ExpectIconAndControllerStateIs(password_manager::ui::AUTO_SIGNIN_STATE); | 681 ExpectIconAndControllerStateIs(password_manager::ui::AUTO_SIGNIN_STATE); |
| 688 std::unique_ptr<autofill::PasswordForm> test_form( | 682 std::map<base::string16, const autofill::PasswordForm*> map; |
| 689 new autofill::PasswordForm(test_local_form())); | 683 base::string16 kTestUsername = test_local_form().username_value; |
| 690 autofill::PasswordFormMap map; | 684 map.insert(std::make_pair(kTestUsername, &test_local_form())); |
| 691 base::string16 kTestUsername = test_form->username_value; | |
| 692 map.insert(std::make_pair(kTestUsername, std::move(test_form))); | |
| 693 controller()->OnPasswordAutofilled(map, map.begin()->second->origin, nullptr); | 685 controller()->OnPasswordAutofilled(map, map.begin()->second->origin, nullptr); |
| 694 | 686 |
| 695 ExpectIconAndControllerStateIs(password_manager::ui::AUTO_SIGNIN_STATE); | 687 ExpectIconAndControllerStateIs(password_manager::ui::AUTO_SIGNIN_STATE); |
| 696 } | 688 } |
| 697 | 689 |
| 698 TEST_F(ManagePasswordsUIControllerTest, InactiveOnPSLMatched) { | 690 TEST_F(ManagePasswordsUIControllerTest, InactiveOnPSLMatched) { |
| 699 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); | 691 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); |
| 700 autofill::PasswordFormMap map; | 692 std::map<base::string16, const autofill::PasswordForm*> map; |
| 701 std::unique_ptr<autofill::PasswordForm> psl_matched_test_form( | 693 autofill::PasswordForm psl_matched_test_form(test_local_form()); |
| 702 new autofill::PasswordForm(test_local_form())); | 694 psl_matched_test_form.is_public_suffix_match = true; |
| 703 psl_matched_test_form->is_public_suffix_match = true; | 695 map.insert(std::make_pair(kTestUsername, &psl_matched_test_form)); |
| 704 map.insert(std::make_pair(kTestUsername, std::move(psl_matched_test_form))); | |
| 705 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); | 696 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 706 controller()->OnPasswordAutofilled(map, map.begin()->second->origin, nullptr); | 697 controller()->OnPasswordAutofilled(map, map.begin()->second->origin, nullptr); |
| 707 | 698 |
| 708 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->GetState()); | 699 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->GetState()); |
| 709 } | 700 } |
| 710 | 701 |
| 711 TEST_F(ManagePasswordsUIControllerTest, UpdatePasswordSubmitted) { | 702 TEST_F(ManagePasswordsUIControllerTest, UpdatePasswordSubmitted) { |
| 712 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( | 703 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 713 CreateFormManager()); | 704 CreateFormManager()); |
| 714 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); | 705 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 762 // Open the bubble again. | 753 // Open the bubble again. |
| 763 local_credentials.emplace_back(new autofill::PasswordForm(test_local_form())); | 754 local_credentials.emplace_back(new autofill::PasswordForm(test_local_form())); |
| 764 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); | 755 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 765 controller()->OnAutoSignin(std::move(local_credentials), | 756 controller()->OnAutoSignin(std::move(local_credentials), |
| 766 test_local_form().origin); | 757 test_local_form().origin); |
| 767 EXPECT_EQ(password_manager::ui::AUTO_SIGNIN_STATE, controller()->GetState()); | 758 EXPECT_EQ(password_manager::ui::AUTO_SIGNIN_STATE, controller()->GetState()); |
| 768 // Check the delegate is destroyed. Thus, the first bubble has no way to mess | 759 // Check the delegate is destroyed. Thus, the first bubble has no way to mess |
| 769 // up with the controller's state. | 760 // up with the controller's state. |
| 770 EXPECT_FALSE(proxy_delegate); | 761 EXPECT_FALSE(proxy_delegate); |
| 771 } | 762 } |
| OLD | NEW |