| 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 "components/autofill/content/renderer/password_autofill_agent.h" | 5 #include "components/autofill/content/renderer/password_autofill_agent.h" |
| 6 | 6 |
| 7 #include "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
| 9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 " <div>" | 88 " <div>" |
| 89 " <input type='password' id='password'/>" | 89 " <input type='password' id='password'/>" |
| 90 " </div>" | 90 " </div>" |
| 91 " </form>" | 91 " </form>" |
| 92 "</body>"; | 92 "</body>"; |
| 93 | 93 |
| 94 const char kEmptyFormHTML[] = | 94 const char kEmptyFormHTML[] = |
| 95 "<head> <style> form {display: inline;} </style> </head>" | 95 "<head> <style> form {display: inline;} </style> </head>" |
| 96 "<body> <form> </form> </body>"; | 96 "<body> <form> </form> </body>"; |
| 97 | 97 |
| 98 const char kFormWithoutPasswordsHTML[] = |
| 99 "<FORM>" |
| 100 " <INPUT type='text' id='random_field'/>" |
| 101 " <INPUT type='text' id='username'/>" |
| 102 "</FORM>"; |
| 103 |
| 98 const char kNonVisibleFormHTML[] = | 104 const char kNonVisibleFormHTML[] = |
| 99 "<head> <style> form {visibility: hidden;} </style> </head>" | 105 "<head> <style> form {visibility: hidden;} </style> </head>" |
| 100 "<body>" | 106 "<body>" |
| 101 " <form>" | 107 " <form>" |
| 102 " <div>" | 108 " <div>" |
| 103 " <input type='password' id='password'/>" | 109 " <input type='password' id='password'/>" |
| 104 " </div>" | 110 " </div>" |
| 105 " </form>" | 111 " </form>" |
| 106 "</body>"; | 112 "</body>"; |
| 107 | 113 |
| (...skipping 742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 850 | 856 |
| 851 LoadHTML(kNonDisplayedFormHTML); | 857 LoadHTML(kNonDisplayedFormHTML); |
| 852 frame = GetMainFrame(); | 858 frame = GetMainFrame(); |
| 853 frame->GetDocument().Forms(forms3); | 859 frame->GetDocument().Forms(forms3); |
| 854 ASSERT_EQ(1u, forms3.size()); | 860 ASSERT_EQ(1u, forms3.size()); |
| 855 forms3[0].GetFormControlElements(web_control_elements); | 861 forms3[0].GetFormControlElements(web_control_elements); |
| 856 ASSERT_EQ(1u, web_control_elements.size()); | 862 ASSERT_EQ(1u, web_control_elements.size()); |
| 857 EXPECT_FALSE(form_util::IsWebElementVisible(web_control_elements[0])); | 863 EXPECT_FALSE(form_util::IsWebElementVisible(web_control_elements[0])); |
| 858 } | 864 } |
| 859 | 865 |
| 860 TEST_F(PasswordAutofillAgentTest, SendPasswordFormsTest) { | 866 TEST_F(PasswordAutofillAgentTest, |
| 861 fake_driver_.reset_password_forms_rendered(); | 867 SendPasswordFormsTest_VisibleFormWithNoUsername) { |
| 868 fake_driver_.reset_password_forms_calls(); |
| 862 LoadHTML(kVisibleFormWithNoUsernameHTML); | 869 LoadHTML(kVisibleFormWithNoUsernameHTML); |
| 863 base::RunLoop().RunUntilIdle(); | 870 base::RunLoop().RunUntilIdle(); |
| 871 EXPECT_TRUE(fake_driver_.called_password_forms_parsed()); |
| 872 ASSERT_TRUE(fake_driver_.password_forms_parsed()); |
| 873 EXPECT_FALSE(fake_driver_.password_forms_parsed()->empty()); |
| 864 EXPECT_TRUE(fake_driver_.called_password_forms_rendered()); | 874 EXPECT_TRUE(fake_driver_.called_password_forms_rendered()); |
| 865 ASSERT_TRUE(static_cast<bool>(fake_driver_.password_forms_rendered())); | 875 ASSERT_TRUE(fake_driver_.password_forms_rendered()); |
| 866 EXPECT_FALSE(fake_driver_.password_forms_rendered()->empty()); | 876 EXPECT_FALSE(fake_driver_.password_forms_rendered()->empty()); |
| 877 } |
| 867 | 878 |
| 868 fake_driver_.reset_password_forms_rendered(); | 879 TEST_F(PasswordAutofillAgentTest, SendPasswordFormsTest_EmptyForm) { |
| 880 fake_driver_.reset_password_forms_calls(); |
| 869 LoadHTML(kEmptyFormHTML); | 881 LoadHTML(kEmptyFormHTML); |
| 870 base::RunLoop().RunUntilIdle(); | 882 base::RunLoop().RunUntilIdle(); |
| 883 EXPECT_FALSE(fake_driver_.called_password_forms_parsed()); |
| 871 EXPECT_TRUE(fake_driver_.called_password_forms_rendered()); | 884 EXPECT_TRUE(fake_driver_.called_password_forms_rendered()); |
| 872 ASSERT_TRUE(static_cast<bool>(fake_driver_.password_forms_rendered())); | 885 ASSERT_TRUE(fake_driver_.password_forms_rendered()); |
| 873 EXPECT_TRUE(fake_driver_.password_forms_rendered()->empty()); | |
| 874 | |
| 875 fake_driver_.reset_password_forms_rendered(); | |
| 876 LoadHTML(kNonDisplayedFormHTML); | |
| 877 base::RunLoop().RunUntilIdle(); | |
| 878 EXPECT_TRUE(fake_driver_.called_password_forms_rendered()); | |
| 879 ASSERT_TRUE(static_cast<bool>(fake_driver_.password_forms_rendered())); | |
| 880 EXPECT_TRUE(fake_driver_.password_forms_rendered()->empty()); | |
| 881 | |
| 882 fake_driver_.reset_password_forms_rendered(); | |
| 883 LoadHTML(kNonVisibleFormHTML); | |
| 884 base::RunLoop().RunUntilIdle(); | |
| 885 EXPECT_TRUE(fake_driver_.called_password_forms_rendered()); | |
| 886 ASSERT_TRUE(static_cast<bool>(fake_driver_.password_forms_rendered())); | |
| 887 EXPECT_TRUE(fake_driver_.password_forms_rendered()->empty()); | 886 EXPECT_TRUE(fake_driver_.password_forms_rendered()->empty()); |
| 888 } | 887 } |
| 889 | 888 |
| 889 TEST_F(PasswordAutofillAgentTest, SendPasswordFormsTest_FormWithoutPasswords) { |
| 890 fake_driver_.reset_password_forms_calls(); |
| 891 LoadHTML(kFormWithoutPasswordsHTML); |
| 892 base::RunLoop().RunUntilIdle(); |
| 893 EXPECT_FALSE(fake_driver_.called_password_forms_parsed()); |
| 894 EXPECT_TRUE(fake_driver_.called_password_forms_rendered()); |
| 895 ASSERT_TRUE(fake_driver_.password_forms_rendered()); |
| 896 EXPECT_TRUE(fake_driver_.password_forms_rendered()->empty()); |
| 897 } |
| 898 |
| 899 TEST_F(PasswordAutofillAgentTest, SendPasswordFormsTest_NonDisplayedForm) { |
| 900 fake_driver_.reset_password_forms_calls(); |
| 901 LoadHTML(kNonDisplayedFormHTML); |
| 902 base::RunLoop().RunUntilIdle(); |
| 903 EXPECT_TRUE(fake_driver_.called_password_forms_parsed()); |
| 904 ASSERT_TRUE(fake_driver_.password_forms_parsed()); |
| 905 EXPECT_FALSE(fake_driver_.password_forms_parsed()->empty()); |
| 906 EXPECT_TRUE(fake_driver_.called_password_forms_rendered()); |
| 907 ASSERT_TRUE(fake_driver_.password_forms_rendered()); |
| 908 EXPECT_TRUE(fake_driver_.password_forms_rendered()->empty()); |
| 909 } |
| 910 |
| 911 TEST_F(PasswordAutofillAgentTest, SendPasswordFormsTest_NonVisibleForm) { |
| 912 fake_driver_.reset_password_forms_calls(); |
| 913 LoadHTML(kNonVisibleFormHTML); |
| 914 base::RunLoop().RunUntilIdle(); |
| 915 EXPECT_TRUE(fake_driver_.called_password_forms_parsed()); |
| 916 ASSERT_TRUE(fake_driver_.password_forms_parsed()); |
| 917 EXPECT_FALSE(fake_driver_.password_forms_parsed()->empty()); |
| 918 EXPECT_TRUE(fake_driver_.called_password_forms_rendered()); |
| 919 ASSERT_TRUE(fake_driver_.password_forms_rendered()); |
| 920 EXPECT_TRUE(fake_driver_.password_forms_rendered()->empty()); |
| 921 } |
| 922 |
| 923 TEST_F(PasswordAutofillAgentTest, SendPasswordFormsTest_PasswordChangeForm) { |
| 924 fake_driver_.reset_password_forms_calls(); |
| 925 LoadHTML(kPasswordChangeFormHTML); |
| 926 base::RunLoop().RunUntilIdle(); |
| 927 EXPECT_TRUE(fake_driver_.called_password_forms_parsed()); |
| 928 ASSERT_TRUE(fake_driver_.password_forms_parsed()); |
| 929 EXPECT_FALSE(fake_driver_.password_forms_parsed()->empty()); |
| 930 EXPECT_TRUE(fake_driver_.called_password_forms_rendered()); |
| 931 ASSERT_TRUE(fake_driver_.password_forms_rendered()); |
| 932 EXPECT_FALSE(fake_driver_.password_forms_rendered()->empty()); |
| 933 } |
| 934 |
| 935 TEST_F(PasswordAutofillAgentTest, |
| 936 SendPasswordFormsTest_CannotCreatePasswordForm) { |
| 937 // This test checks that a request to the store is sent even if we fail to |
| 938 // create a |PasswordForm|. |
| 939 fake_driver_.reset_password_forms_calls(); |
| 940 const char kInvalidFormHTML[] = |
| 941 "<FORM name='ChangeWithUsernameForm' action='http://www.bidule.com'>" |
| 942 " <INPUT type='password' id='pwd1' value='1'/>" |
| 943 " <INPUT type='password' id='pwd1' value='2'/>" |
| 944 " <INPUT type='password' id='pwd2' value='3'/>" |
| 945 " <INPUT type='submit' value='Login'/>" |
| 946 "</FORM>"; |
| 947 LoadHTML(kInvalidFormHTML); |
| 948 base::RunLoop().RunUntilIdle(); |
| 949 EXPECT_TRUE(fake_driver_.called_password_forms_parsed()); |
| 950 ASSERT_TRUE(fake_driver_.password_forms_parsed()); |
| 951 EXPECT_FALSE(fake_driver_.password_forms_parsed()->empty()); |
| 952 EXPECT_TRUE(fake_driver_.called_password_forms_rendered()); |
| 953 ASSERT_TRUE(fake_driver_.password_forms_rendered()); |
| 954 EXPECT_TRUE(fake_driver_.password_forms_rendered()->empty()); |
| 955 } |
| 956 |
| 957 TEST_F(PasswordAutofillAgentTest, SendPasswordFormsTest_ReloadTab) { |
| 958 // PasswordAutofillAgent::sent_request_to_store_ disables duplicate requests |
| 959 // to the store. This test checks that new request will be sent if the frame |
| 960 // has been reloaded. |
| 961 fake_driver_.reset_password_forms_calls(); |
| 962 LoadHTML(kNonVisibleFormHTML); |
| 963 base::RunLoop().RunUntilIdle(); |
| 964 EXPECT_TRUE(fake_driver_.called_password_forms_parsed()); |
| 965 |
| 966 fake_driver_.reset_password_forms_calls(); |
| 967 std::string url_string = "data:text/html;charset=utf-8,"; |
| 968 url_string.append(kNonVisibleFormHTML); |
| 969 Reload(GURL(url_string)); |
| 970 EXPECT_TRUE(fake_driver_.called_password_forms_parsed()); |
| 971 ASSERT_TRUE(fake_driver_.password_forms_parsed()); |
| 972 EXPECT_FALSE(fake_driver_.password_forms_parsed()->empty()); |
| 973 } |
| 974 |
| 890 TEST_F(PasswordAutofillAgentTest, SendPasswordFormsTest_Redirection) { | 975 TEST_F(PasswordAutofillAgentTest, SendPasswordFormsTest_Redirection) { |
| 891 fake_driver_.reset_password_forms_rendered(); | 976 fake_driver_.reset_password_forms_calls(); |
| 892 LoadHTML(kEmptyWebpage); | 977 LoadHTML(kEmptyWebpage); |
| 893 base::RunLoop().RunUntilIdle(); | 978 base::RunLoop().RunUntilIdle(); |
| 894 EXPECT_FALSE(fake_driver_.called_password_forms_rendered()); | 979 EXPECT_FALSE(fake_driver_.called_password_forms_rendered()); |
| 895 | 980 |
| 896 fake_driver_.reset_password_forms_rendered(); | 981 fake_driver_.reset_password_forms_calls(); |
| 897 LoadHTML(kRedirectionWebpage); | 982 LoadHTML(kRedirectionWebpage); |
| 898 base::RunLoop().RunUntilIdle(); | 983 base::RunLoop().RunUntilIdle(); |
| 899 EXPECT_FALSE(fake_driver_.called_password_forms_rendered()); | 984 EXPECT_FALSE(fake_driver_.called_password_forms_rendered()); |
| 900 | 985 |
| 901 fake_driver_.reset_password_forms_rendered(); | 986 fake_driver_.reset_password_forms_calls(); |
| 902 LoadHTML(kSimpleWebpage); | 987 LoadHTML(kSimpleWebpage); |
| 903 base::RunLoop().RunUntilIdle(); | 988 base::RunLoop().RunUntilIdle(); |
| 904 EXPECT_TRUE(fake_driver_.called_password_forms_rendered()); | 989 EXPECT_TRUE(fake_driver_.called_password_forms_rendered()); |
| 905 | 990 |
| 906 fake_driver_.reset_password_forms_rendered(); | 991 fake_driver_.reset_password_forms_calls(); |
| 907 LoadHTML(kWebpageWithDynamicContent); | 992 LoadHTML(kWebpageWithDynamicContent); |
| 908 base::RunLoop().RunUntilIdle(); | 993 base::RunLoop().RunUntilIdle(); |
| 909 EXPECT_TRUE(fake_driver_.called_password_forms_rendered()); | 994 EXPECT_TRUE(fake_driver_.called_password_forms_rendered()); |
| 910 } | 995 } |
| 911 | 996 |
| 912 // Tests that a password will only be filled as a suggested and will not be | 997 // Tests that a password will only be filled as a suggested and will not be |
| 913 // accessible by the DOM until a user gesture has occurred. | 998 // accessible by the DOM until a user gesture has occurred. |
| 914 TEST_F(PasswordAutofillAgentTest, GestureRequiredTest) { | 999 TEST_F(PasswordAutofillAgentTest, GestureRequiredTest) { |
| 915 // Trigger the initial autocomplete. | 1000 // Trigger the initial autocomplete. |
| 916 SimulateOnFillPasswordForm(fill_data_); | 1001 SimulateOnFillPasswordForm(fill_data_); |
| (...skipping 1704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2621 | 2706 |
| 2622 // Chect that the form was submitted with in-page navigation. | 2707 // Chect that the form was submitted with in-page navigation. |
| 2623 EXPECT_TRUE(fake_driver_.called_inpage_navigation()); | 2708 EXPECT_TRUE(fake_driver_.called_inpage_navigation()); |
| 2624 EXPECT_EQ(base::string16(), | 2709 EXPECT_EQ(base::string16(), |
| 2625 fake_driver_.password_form_inpage_navigation()->username_value); | 2710 fake_driver_.password_form_inpage_navigation()->username_value); |
| 2626 EXPECT_EQ(ASCIIToUTF16("random"), | 2711 EXPECT_EQ(ASCIIToUTF16("random"), |
| 2627 fake_driver_.password_form_inpage_navigation()->password_value); | 2712 fake_driver_.password_form_inpage_navigation()->password_value); |
| 2628 } | 2713 } |
| 2629 | 2714 |
| 2630 } // namespace autofill | 2715 } // namespace autofill |
| OLD | NEW |