| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
| 6 #include "base/message_loop/message_loop.h" | 6 #include "base/message_loop/message_loop.h" |
| 7 #include "base/prefs/pref_registry_simple.h" | 7 #include "base/prefs/pref_registry_simple.h" |
| 8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
| 9 #include "base/prefs/testing_pref_service.h" | 9 #include "base/prefs/testing_pref_service.h" |
| 10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 p->best_matches_[match->username_value] = match; | 219 p->best_matches_[match->username_value] = match; |
| 220 p->preferred_match_ = match; | 220 p->preferred_match_ = match; |
| 221 } | 221 } |
| 222 | 222 |
| 223 void SimulateFetchMatchingLoginsFromPasswordStore( | 223 void SimulateFetchMatchingLoginsFromPasswordStore( |
| 224 PasswordFormManager* manager) { | 224 PasswordFormManager* manager) { |
| 225 // Just need to update the internal states. | 225 // Just need to update the internal states. |
| 226 manager->state_ = PasswordFormManager::MATCHING_PHASE; | 226 manager->state_ = PasswordFormManager::MATCHING_PHASE; |
| 227 } | 227 } |
| 228 | 228 |
| 229 void SimulateResponseFromPasswordStore( | |
| 230 PasswordFormManager* manager, | |
| 231 const std::vector<PasswordForm*>& result) { | |
| 232 // Simply call the callback method when request done. This will transfer | |
| 233 // the ownership of the objects in |result| to the |manager|. | |
| 234 manager->OnGetPasswordStoreResults(result); | |
| 235 } | |
| 236 | |
| 237 void SanitizePossibleUsernames(PasswordFormManager* p, PasswordForm* form) { | 229 void SanitizePossibleUsernames(PasswordFormManager* p, PasswordForm* form) { |
| 238 p->SanitizePossibleUsernames(form); | 230 p->SanitizePossibleUsernames(form); |
| 239 } | 231 } |
| 240 | 232 |
| 241 bool IgnoredResult(PasswordFormManager* p, PasswordForm* form) { | 233 bool IgnoredResult(PasswordFormManager* p, PasswordForm* form) { |
| 242 return p->ShouldIgnoreResult(*form); | 234 return p->ShouldIgnoreResult(*form); |
| 243 } | 235 } |
| 244 | 236 |
| 245 PasswordForm* observed_form() { return &observed_form_; } | 237 PasswordForm* observed_form() { return &observed_form_; } |
| 246 PasswordForm* saved_match() { return &saved_match_; } | 238 PasswordForm* saved_match() { return &saved_match_; } |
| (...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 762 TestPasswordManager password_manager(client()); | 754 TestPasswordManager password_manager(client()); |
| 763 PasswordFormManager manager_no_creds( | 755 PasswordFormManager manager_no_creds( |
| 764 &password_manager, client(), client()->driver(), *observed_form(), false); | 756 &password_manager, client(), client()->driver(), *observed_form(), false); |
| 765 | 757 |
| 766 // First time sign-up attempt. Password store does not contain matching | 758 // First time sign-up attempt. Password store does not contain matching |
| 767 // credentials. AllowPasswordGenerationForForm should be called to send the | 759 // credentials. AllowPasswordGenerationForForm should be called to send the |
| 768 // "not blacklisted" message. | 760 // "not blacklisted" message. |
| 769 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)) | 761 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)) |
| 770 .Times(1); | 762 .Times(1); |
| 771 SimulateFetchMatchingLoginsFromPasswordStore(&manager_no_creds); | 763 SimulateFetchMatchingLoginsFromPasswordStore(&manager_no_creds); |
| 772 std::vector<PasswordForm*> result; | 764 manager_no_creds.OnGetPasswordStoreResults(ScopedVector<PasswordForm>()); |
| 773 SimulateResponseFromPasswordStore(&manager_no_creds, result); | |
| 774 Mock::VerifyAndClearExpectations(client()->mock_driver()); | 765 Mock::VerifyAndClearExpectations(client()->mock_driver()); |
| 775 | 766 |
| 776 // Signing up on a previously visited site. Credentials are found in the | 767 // Signing up on a previously visited site. Credentials are found in the |
| 777 // password store, and are not blacklisted. AllowPasswordGenerationForForm | 768 // password store, and are not blacklisted. AllowPasswordGenerationForForm |
| 778 // should be called to send the "not blacklisted" message. | 769 // should be called to send the "not blacklisted" message. |
| 779 PasswordFormManager manager_creds( | 770 PasswordFormManager manager_creds( |
| 780 &password_manager, client(), client()->driver(), *observed_form(), false); | 771 &password_manager, client(), client()->driver(), *observed_form(), false); |
| 781 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)) | 772 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)) |
| 782 .Times(1); | 773 .Times(1); |
| 783 EXPECT_CALL(*(client()->mock_driver()), IsOffTheRecord()) | 774 EXPECT_CALL(*(client()->mock_driver()), IsOffTheRecord()) |
| 784 .WillRepeatedly(Return(false)); | 775 .WillRepeatedly(Return(false)); |
| 785 SimulateFetchMatchingLoginsFromPasswordStore(&manager_creds); | 776 SimulateFetchMatchingLoginsFromPasswordStore(&manager_creds); |
| 786 // We need add heap allocated objects to result. | 777 ScopedVector<PasswordForm> simulated_results; |
| 787 result.push_back(CreateSavedMatch(false)); | 778 simulated_results.push_back(CreateSavedMatch(false)); |
| 788 SimulateResponseFromPasswordStore(&manager_creds, result); | 779 manager_creds.OnGetPasswordStoreResults(simulated_results.Pass()); |
| 789 Mock::VerifyAndClearExpectations(client()->mock_driver()); | 780 Mock::VerifyAndClearExpectations(client()->mock_driver()); |
| 790 | 781 |
| 791 // There are cases, such as when a form is explicitly for creating a new | 782 // There are cases, such as when a form is explicitly for creating a new |
| 792 // password, where we may ignore saved credentials. Make sure that we still | 783 // password, where we may ignore saved credentials. Make sure that we still |
| 793 // allow generation in that case. | 784 // allow generation in that case. |
| 794 PasswordForm signup_form(*observed_form()); | 785 PasswordForm signup_form(*observed_form()); |
| 795 signup_form.new_password_element = base::ASCIIToUTF16("new_password_field"); | 786 signup_form.new_password_element = base::ASCIIToUTF16("new_password_field"); |
| 796 | 787 |
| 797 PasswordFormManager manager_dropped_creds( | 788 PasswordFormManager manager_dropped_creds( |
| 798 &password_manager, client(), client()->driver(), signup_form, false); | 789 &password_manager, client(), client()->driver(), signup_form, false); |
| 799 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)) | 790 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)) |
| 800 .Times(1); | 791 .Times(1); |
| 801 EXPECT_CALL(*(client()->mock_driver()), IsOffTheRecord()) | 792 EXPECT_CALL(*(client()->mock_driver()), IsOffTheRecord()) |
| 802 .WillRepeatedly(Return(false)); | 793 .WillRepeatedly(Return(false)); |
| 803 SimulateFetchMatchingLoginsFromPasswordStore(&manager_dropped_creds); | 794 SimulateFetchMatchingLoginsFromPasswordStore(&manager_dropped_creds); |
| 804 result.clear(); | 795 simulated_results.push_back(CreateSavedMatch(false)); |
| 805 result.push_back(CreateSavedMatch(false)); | 796 manager_dropped_creds.OnGetPasswordStoreResults(simulated_results.Pass()); |
| 806 SimulateResponseFromPasswordStore(&manager_dropped_creds, result); | |
| 807 Mock::VerifyAndClearExpectations(client()->mock_driver()); | 797 Mock::VerifyAndClearExpectations(client()->mock_driver()); |
| 808 | 798 |
| 809 // Signing up on a previously visited site. Credentials are found in the | 799 // Signing up on a previously visited site. Credentials are found in the |
| 810 // password store, but they are blacklisted. AllowPasswordGenerationForForm | 800 // password store, but they are blacklisted. AllowPasswordGenerationForForm |
| 811 // should not be called and no "not blacklisted" message sent. | 801 // should not be called and no "not blacklisted" message sent. |
| 812 PasswordFormManager manager_blacklisted( | 802 PasswordFormManager manager_blacklisted( |
| 813 &password_manager, client(), client()->driver(), *observed_form(), false); | 803 &password_manager, client(), client()->driver(), *observed_form(), false); |
| 814 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)) | 804 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)) |
| 815 .Times(0); | 805 .Times(0); |
| 816 SimulateFetchMatchingLoginsFromPasswordStore(&manager_blacklisted); | 806 SimulateFetchMatchingLoginsFromPasswordStore(&manager_blacklisted); |
| 817 result.clear(); | 807 simulated_results.push_back(CreateSavedMatch(true)); |
| 818 result.push_back(CreateSavedMatch(true)); | 808 manager_blacklisted.OnGetPasswordStoreResults(simulated_results.Pass()); |
| 819 SimulateResponseFromPasswordStore(&manager_blacklisted, result); | |
| 820 Mock::VerifyAndClearExpectations(client()->mock_driver()); | 809 Mock::VerifyAndClearExpectations(client()->mock_driver()); |
| 821 } | 810 } |
| 822 | 811 |
| 823 TEST_F(PasswordFormManagerTest, TestForceInclusionOfGeneratedPasswords) { | 812 TEST_F(PasswordFormManagerTest, TestForceInclusionOfGeneratedPasswords) { |
| 824 // Simulate having two matches for this origin, one of which was from a form | 813 // Simulate having two matches for this origin, one of which was from a form |
| 825 // with different HTML tags for elements. Because of scoring differences, | 814 // with different HTML tags for elements. Because of scoring differences, |
| 826 // only the first form will be sent to Autofill(). | 815 // only the first form will be sent to Autofill(). |
| 827 TestPasswordManager password_manager(client()); | 816 TestPasswordManager password_manager(client()); |
| 828 PasswordFormManager manager_match( | 817 PasswordFormManager manager_match( |
| 829 &password_manager, client(), client()->driver(), *observed_form(), false); | 818 &password_manager, client(), client()->driver(), *observed_form(), false); |
| 830 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)) | 819 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)) |
| 831 .Times(1); | 820 .Times(1); |
| 832 EXPECT_CALL(*(client()->mock_driver()), IsOffTheRecord()) | 821 EXPECT_CALL(*(client()->mock_driver()), IsOffTheRecord()) |
| 833 .WillRepeatedly(Return(false)); | 822 .WillRepeatedly(Return(false)); |
| 834 | 823 |
| 835 std::vector<PasswordForm*> results; | 824 ScopedVector<PasswordForm> simulated_results; |
| 836 results.push_back(CreateSavedMatch(false)); | 825 simulated_results.push_back(CreateSavedMatch(false)); |
| 837 results.push_back(CreateSavedMatch(false)); | 826 simulated_results.push_back(CreateSavedMatch(false)); |
| 838 results[1]->username_value = ASCIIToUTF16("other@gmail.com"); | 827 simulated_results[1]->username_value = ASCIIToUTF16("other@gmail.com"); |
| 839 results[1]->password_element = ASCIIToUTF16("signup_password"); | 828 simulated_results[1]->password_element = ASCIIToUTF16("signup_password"); |
| 840 results[1]->username_element = ASCIIToUTF16("signup_username"); | 829 simulated_results[1]->username_element = ASCIIToUTF16("signup_username"); |
| 841 SimulateFetchMatchingLoginsFromPasswordStore(&manager_match); | 830 SimulateFetchMatchingLoginsFromPasswordStore(&manager_match); |
| 842 SimulateResponseFromPasswordStore(&manager_match, results); | 831 manager_match.OnGetPasswordStoreResults(simulated_results.Pass()); |
| 843 EXPECT_EQ(1u, password_manager.GetLatestBestMatches().size()); | 832 EXPECT_EQ(1u, password_manager.GetLatestBestMatches().size()); |
| 844 results.clear(); | |
| 845 | 833 |
| 846 // Same thing, except this time the credentials that don't match quite as | 834 // Same thing, except this time the credentials that don't match quite as |
| 847 // well are generated. They should now be sent to Autofill(). | 835 // well are generated. They should now be sent to Autofill(). |
| 848 PasswordFormManager manager_no_match( | 836 PasswordFormManager manager_no_match( |
| 849 &password_manager, client(), client()->driver(), *observed_form(), false); | 837 &password_manager, client(), client()->driver(), *observed_form(), false); |
| 850 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)) | 838 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)) |
| 851 .Times(1); | 839 .Times(1); |
| 852 | 840 |
| 853 results.push_back(CreateSavedMatch(false)); | 841 simulated_results.push_back(CreateSavedMatch(false)); |
| 854 results.push_back(CreateSavedMatch(false)); | 842 simulated_results.push_back(CreateSavedMatch(false)); |
| 855 results[1]->username_value = ASCIIToUTF16("other@gmail.com"); | 843 simulated_results[1]->username_value = ASCIIToUTF16("other@gmail.com"); |
| 856 results[1]->password_element = ASCIIToUTF16("signup_password"); | 844 simulated_results[1]->password_element = ASCIIToUTF16("signup_password"); |
| 857 results[1]->username_element = ASCIIToUTF16("signup_username"); | 845 simulated_results[1]->username_element = ASCIIToUTF16("signup_username"); |
| 858 results[1]->type = PasswordForm::TYPE_GENERATED; | 846 simulated_results[1]->type = PasswordForm::TYPE_GENERATED; |
| 859 SimulateFetchMatchingLoginsFromPasswordStore(&manager_no_match); | 847 SimulateFetchMatchingLoginsFromPasswordStore(&manager_no_match); |
| 860 SimulateResponseFromPasswordStore(&manager_no_match, results); | 848 manager_no_match.OnGetPasswordStoreResults(simulated_results.Pass()); |
| 861 EXPECT_EQ(2u, password_manager.GetLatestBestMatches().size()); | 849 EXPECT_EQ(2u, password_manager.GetLatestBestMatches().size()); |
| 862 } | 850 } |
| 863 | 851 |
| 864 TEST_F(PasswordFormManagerTest, TestSanitizePossibleUsernames) { | 852 TEST_F(PasswordFormManagerTest, TestSanitizePossibleUsernames) { |
| 865 PasswordFormManager manager(NULL, client(), kNoDriver, *observed_form(), | 853 PasswordFormManager manager(NULL, client(), kNoDriver, *observed_form(), |
| 866 false); | 854 false); |
| 867 PasswordForm credentials(*observed_form()); | 855 PasswordForm credentials(*observed_form()); |
| 868 credentials.other_possible_usernames.push_back(ASCIIToUTF16("543-43-1234")); | 856 credentials.other_possible_usernames.push_back(ASCIIToUTF16("543-43-1234")); |
| 869 credentials.other_possible_usernames.push_back( | 857 credentials.other_possible_usernames.push_back( |
| 870 ASCIIToUTF16("378282246310005")); | 858 ASCIIToUTF16("378282246310005")); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 918 client_with_store.driver(), encountered_form, | 906 client_with_store.driver(), encountered_form, |
| 919 false); | 907 false); |
| 920 | 908 |
| 921 const PasswordStore::AuthorizationPromptPolicy auth_policy = | 909 const PasswordStore::AuthorizationPromptPolicy auth_policy = |
| 922 PasswordStore::DISALLOW_PROMPT; | 910 PasswordStore::DISALLOW_PROMPT; |
| 923 EXPECT_CALL(*mock_store(), | 911 EXPECT_CALL(*mock_store(), |
| 924 GetLogins(encountered_form, auth_policy, &form_manager)); | 912 GetLogins(encountered_form, auth_policy, &form_manager)); |
| 925 form_manager.FetchMatchingLoginsFromPasswordStore(auth_policy); | 913 form_manager.FetchMatchingLoginsFromPasswordStore(auth_policy); |
| 926 | 914 |
| 927 // Password store only has these incomplete credentials. | 915 // Password store only has these incomplete credentials. |
| 928 PasswordForm* incomplete_form = new PasswordForm(); | 916 scoped_ptr<PasswordForm> incomplete_form(new PasswordForm()); |
| 929 incomplete_form->origin = GURL("http://accounts.google.com/LoginAuth"); | 917 incomplete_form->origin = GURL("http://accounts.google.com/LoginAuth"); |
| 930 incomplete_form->signon_realm = "http://accounts.google.com/"; | 918 incomplete_form->signon_realm = "http://accounts.google.com/"; |
| 931 incomplete_form->password_value = ASCIIToUTF16("my_password"); | 919 incomplete_form->password_value = ASCIIToUTF16("my_password"); |
| 932 incomplete_form->username_value = ASCIIToUTF16("my_username"); | 920 incomplete_form->username_value = ASCIIToUTF16("my_username"); |
| 933 incomplete_form->preferred = true; | 921 incomplete_form->preferred = true; |
| 934 incomplete_form->ssl_valid = false; | 922 incomplete_form->ssl_valid = false; |
| 935 incomplete_form->scheme = PasswordForm::SCHEME_HTML; | 923 incomplete_form->scheme = PasswordForm::SCHEME_HTML; |
| 936 | 924 |
| 937 // We expect to see this form eventually sent to the Password store. It | 925 // We expect to see this form eventually sent to the Password store. It |
| 938 // has password/username values from the store and 'username_element', | 926 // has password/username values from the store and 'username_element', |
| 939 // 'password_element', 'submit_element' and 'action' fields copied from | 927 // 'password_element', 'submit_element' and 'action' fields copied from |
| 940 // the encountered form. | 928 // the encountered form. |
| 941 PasswordForm complete_form(*incomplete_form); | 929 PasswordForm complete_form(*incomplete_form); |
| 942 complete_form.action = encountered_form.action; | 930 complete_form.action = encountered_form.action; |
| 943 complete_form.password_element = encountered_form.password_element; | 931 complete_form.password_element = encountered_form.password_element; |
| 944 complete_form.username_element = encountered_form.username_element; | 932 complete_form.username_element = encountered_form.username_element; |
| 945 complete_form.submit_element = encountered_form.submit_element; | 933 complete_form.submit_element = encountered_form.submit_element; |
| 946 | 934 |
| 947 PasswordForm obsolete_form(*incomplete_form); | 935 PasswordForm obsolete_form(*incomplete_form); |
| 948 obsolete_form.action = encountered_form.action; | 936 obsolete_form.action = encountered_form.action; |
| 949 | 937 |
| 950 // Feed the incomplete credentials to the manager. | 938 // Feed the incomplete credentials to the manager. |
| 951 std::vector<PasswordForm*> results; | 939 ScopedVector<PasswordForm> simulated_results; |
| 952 results.push_back(incomplete_form); // Takes ownership. | 940 simulated_results.push_back(incomplete_form.release()); |
| 953 form_manager.OnGetPasswordStoreResults(results); | 941 form_manager.OnGetPasswordStoreResults(simulated_results.Pass()); |
| 954 | 942 |
| 955 form_manager.ProvisionallySave( | 943 form_manager.ProvisionallySave( |
| 956 complete_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); | 944 complete_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
| 957 // By now that form has been used once. | 945 // By now that form has been used once. |
| 958 complete_form.times_used = 1; | 946 complete_form.times_used = 1; |
| 959 obsolete_form.times_used = 1; | 947 obsolete_form.times_used = 1; |
| 960 | 948 |
| 961 // Check that PasswordStore receives an update request with the complete form. | 949 // Check that PasswordStore receives an update request with the complete form. |
| 962 EXPECT_CALL(*mock_store(), RemoveLogin(obsolete_form)); | 950 EXPECT_CALL(*mock_store(), RemoveLogin(obsolete_form)); |
| 963 EXPECT_CALL(*mock_store(), AddLogin(complete_form)); | 951 EXPECT_CALL(*mock_store(), AddLogin(complete_form)); |
| 964 form_manager.Save(); | 952 form_manager.Save(); |
| 965 } | 953 } |
| 966 | 954 |
| 967 TEST_F(PasswordFormManagerTest, TestScoringPublicSuffixMatch) { | 955 TEST_F(PasswordFormManagerTest, TestScoringPublicSuffixMatch) { |
| 968 EXPECT_CALL(*(client()->mock_driver()), IsOffTheRecord()) | 956 EXPECT_CALL(*(client()->mock_driver()), IsOffTheRecord()) |
| 969 .WillRepeatedly(Return(false)); | 957 .WillRepeatedly(Return(false)); |
| 970 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)); | 958 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)); |
| 971 | 959 |
| 972 TestPasswordManager password_manager(client()); | 960 TestPasswordManager password_manager(client()); |
| 973 PasswordFormManager manager(&password_manager, client(), client()->driver(), | 961 PasswordFormManager manager(&password_manager, client(), client()->driver(), |
| 974 *observed_form(), false); | 962 *observed_form(), false); |
| 975 | 963 |
| 976 // Simulate having two matches for this form, first comes from different | 964 // Simulate having two matches for this form, first comes from different |
| 977 // signon realm, but reports the same origin and action as matched form. | 965 // signon realm, but reports the same origin and action as matched form. |
| 978 // Second candidate has the same signon realm as the form, but has a different | 966 // Second candidate has the same signon realm as the form, but has a different |
| 979 // origin and action. Public suffix match is the most important criterion so | 967 // origin and action. Public suffix match is the most important criterion so |
| 980 // the second candidate should be selected. | 968 // the second candidate should be selected. |
| 981 std::vector<PasswordForm*> results; | 969 ScopedVector<PasswordForm> simulated_results; |
| 982 results.push_back(CreateSavedMatch(false)); | 970 simulated_results.push_back(CreateSavedMatch(false)); |
| 983 results.push_back(CreateSavedMatch(false)); | 971 simulated_results.push_back(CreateSavedMatch(false)); |
| 984 results[0]->original_signon_realm = "http://accounts2.google.com"; | 972 simulated_results[0]->original_signon_realm = "http://accounts2.google.com"; |
| 985 results[1]->origin = GURL("http://accounts.google.com/a/ServiceLoginAuth2"); | 973 simulated_results[1]->origin = |
| 986 results[1]->action = GURL("http://accounts.google.com/a/ServiceLogin2"); | 974 GURL("http://accounts.google.com/a/ServiceLoginAuth2"); |
| 975 simulated_results[1]->action = |
| 976 GURL("http://accounts.google.com/a/ServiceLogin2"); |
| 987 SimulateFetchMatchingLoginsFromPasswordStore(&manager); | 977 SimulateFetchMatchingLoginsFromPasswordStore(&manager); |
| 988 SimulateResponseFromPasswordStore(&manager, results); | 978 manager.OnGetPasswordStoreResults(simulated_results.Pass()); |
| 989 EXPECT_EQ(1u, password_manager.GetLatestBestMatches().size()); | 979 EXPECT_EQ(1u, password_manager.GetLatestBestMatches().size()); |
| 990 EXPECT_EQ("", password_manager.GetLatestBestMatches() | 980 EXPECT_EQ("", password_manager.GetLatestBestMatches() |
| 991 .begin() | 981 .begin() |
| 992 ->second->original_signon_realm); | 982 ->second->original_signon_realm); |
| 993 } | 983 } |
| 994 | 984 |
| 995 TEST_F(PasswordFormManagerTest, InvalidActionURLsDoNotMatch) { | 985 TEST_F(PasswordFormManagerTest, InvalidActionURLsDoNotMatch) { |
| 996 PasswordFormManager manager(NULL, client(), kNoDriver, *observed_form(), | 986 PasswordFormManager manager(NULL, client(), kNoDriver, *observed_form(), |
| 997 false); | 987 false); |
| 998 | 988 |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1222 field.form_control_type = "text"; | 1212 field.form_control_type = "text"; |
| 1223 form.form_data.fields.push_back(field); | 1213 form.form_data.fields.push_back(field); |
| 1224 | 1214 |
| 1225 field.label = ASCIIToUTF16("password"); | 1215 field.label = ASCIIToUTF16("password"); |
| 1226 field.name = ASCIIToUTF16("password"); | 1216 field.name = ASCIIToUTF16("password"); |
| 1227 field.form_control_type = "password"; | 1217 field.form_control_type = "password"; |
| 1228 form.form_data.fields.push_back(field); | 1218 form.form_data.fields.push_back(field); |
| 1229 | 1219 |
| 1230 PasswordFormManager form_manager(&password_manager, &client_with_store, | 1220 PasswordFormManager form_manager(&password_manager, &client_with_store, |
| 1231 client_with_store.driver(), form, false); | 1221 client_with_store.driver(), form, false); |
| 1232 std::vector<PasswordForm*> result; | 1222 ScopedVector<PasswordForm> simulated_results; |
| 1233 result.push_back(CreateSavedMatch(false)); | 1223 simulated_results.push_back(CreateSavedMatch(false)); |
| 1234 | 1224 |
| 1235 field.label = ASCIIToUTF16("full_name"); | 1225 field.label = ASCIIToUTF16("full_name"); |
| 1236 field.name = ASCIIToUTF16("full_name"); | 1226 field.name = ASCIIToUTF16("full_name"); |
| 1237 field.form_control_type = "text"; | 1227 field.form_control_type = "text"; |
| 1238 result[0]->form_data.fields.push_back(field); | 1228 simulated_results[0]->form_data.fields.push_back(field); |
| 1239 | 1229 |
| 1240 field.label = ASCIIToUTF16("Email"); | 1230 field.label = ASCIIToUTF16("Email"); |
| 1241 field.name = ASCIIToUTF16("Email"); | 1231 field.name = ASCIIToUTF16("Email"); |
| 1242 field.form_control_type = "text"; | 1232 field.form_control_type = "text"; |
| 1243 result[0]->form_data.fields.push_back(field); | 1233 simulated_results[0]->form_data.fields.push_back(field); |
| 1244 | 1234 |
| 1245 field.label = ASCIIToUTF16("password"); | 1235 field.label = ASCIIToUTF16("password"); |
| 1246 field.name = ASCIIToUTF16("password"); | 1236 field.name = ASCIIToUTF16("password"); |
| 1247 field.form_control_type = "password"; | 1237 field.form_control_type = "password"; |
| 1248 result[0]->form_data.fields.push_back(field); | 1238 simulated_results[0]->form_data.fields.push_back(field); |
| 1249 | 1239 |
| 1250 PasswordForm form_to_save(form); | 1240 PasswordForm form_to_save(form); |
| 1251 form_to_save.preferred = true; | 1241 form_to_save.preferred = true; |
| 1252 form_to_save.username_value = result[0]->username_value; | 1242 form_to_save.username_value = simulated_results[0]->username_value; |
| 1253 form_to_save.password_value = result[0]->password_value; | 1243 form_to_save.password_value = simulated_results[0]->password_value; |
| 1254 | 1244 |
| 1255 SimulateFetchMatchingLoginsFromPasswordStore(&form_manager); | 1245 SimulateFetchMatchingLoginsFromPasswordStore(&form_manager); |
| 1256 SimulateResponseFromPasswordStore(&form_manager, result); | 1246 form_manager.OnGetPasswordStoreResults(simulated_results.Pass()); |
| 1257 | 1247 |
| 1258 EXPECT_CALL(*client_with_store.mock_driver()->mock_autofill_manager(), | 1248 EXPECT_CALL(*client_with_store.mock_driver()->mock_autofill_manager(), |
| 1259 UploadPasswordForm(_, autofill::ACCOUNT_CREATION_PASSWORD)) | 1249 UploadPasswordForm(_, autofill::ACCOUNT_CREATION_PASSWORD)) |
| 1260 .Times(1); | 1250 .Times(1); |
| 1261 form_manager.ProvisionallySave( | 1251 form_manager.ProvisionallySave( |
| 1262 form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); | 1252 form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
| 1263 form_manager.Save(); | 1253 form_manager.Save(); |
| 1264 } | 1254 } |
| 1265 | 1255 |
| 1266 TEST_F(PasswordFormManagerTest, CorrectlySavePasswordWithoutUsernameFields) { | 1256 TEST_F(PasswordFormManagerTest, CorrectlySavePasswordWithoutUsernameFields) { |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1331 client_with_store.driver(), *form, false); | 1321 client_with_store.driver(), *form, false); |
| 1332 | 1322 |
| 1333 const PasswordStore::AuthorizationPromptPolicy auth_policy = | 1323 const PasswordStore::AuthorizationPromptPolicy auth_policy = |
| 1334 PasswordStore::DISALLOW_PROMPT; | 1324 PasswordStore::DISALLOW_PROMPT; |
| 1335 EXPECT_CALL(*mock_store(), GetLogins(*form, auth_policy, &form_manager)); | 1325 EXPECT_CALL(*mock_store(), GetLogins(*form, auth_policy, &form_manager)); |
| 1336 form_manager.FetchMatchingLoginsFromPasswordStore(auth_policy); | 1326 form_manager.FetchMatchingLoginsFromPasswordStore(auth_policy); |
| 1337 | 1327 |
| 1338 // Suddenly, the frame and its driver disappear. | 1328 // Suddenly, the frame and its driver disappear. |
| 1339 client_with_store.KillDriver(); | 1329 client_with_store.KillDriver(); |
| 1340 | 1330 |
| 1341 std::vector<PasswordForm*> results; | 1331 ScopedVector<PasswordForm> simulated_results; |
| 1342 results.push_back(form.release()); | 1332 simulated_results.push_back(form.release()); |
| 1343 form_manager.OnGetPasswordStoreResults(results); | 1333 form_manager.OnGetPasswordStoreResults(simulated_results.Pass()); |
| 1344 } | 1334 } |
| 1345 | 1335 |
| 1346 } // namespace password_manager | 1336 } // namespace password_manager |
| OLD | NEW |