| 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 |