Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(240)

Side by Side Diff: chrome/renderer/autofill/password_autofill_agent_browsertest.cc

Issue 1292693004: [Password Manager] Autofill forms with field name and id attributes missing. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added a browser_tests for suggestion popup. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/strings/string_util.h" 5 #include "base/strings/string_util.h"
6 #include "base/strings/utf_string_conversions.h" 6 #include "base/strings/utf_string_conversions.h"
7 #include "chrome/renderer/autofill/password_generation_test_utils.h" 7 #include "chrome/renderer/autofill/password_generation_test_utils.h"
8 #include "chrome/test/base/chrome_render_view_test.h" 8 #include "chrome/test/base/chrome_render_view_test.h"
9 #include "components/autofill/content/common/autofill_messages.h" 9 #include "components/autofill/content/common/autofill_messages.h"
10 #include "components/autofill/content/renderer/autofill_agent.h" 10 #include "components/autofill/content/renderer/autofill_agent.h"
(...skipping 2067 matching lines...) Expand 10 before | Expand all | Expand 10 after
2078 SimulatePasswordChange("mypassword"); 2078 SimulatePasswordChange("mypassword");
2079 2079
2080 password_autofill_agent_->AJAXSucceeded(); 2080 password_autofill_agent_->AJAXSucceeded();
2081 2081
2082 const IPC::Message* message = 2082 const IPC::Message* message =
2083 render_thread_->sink().GetFirstMessageMatching( 2083 render_thread_->sink().GetFirstMessageMatching(
2084 AutofillHostMsg_PasswordFormSubmitted::ID); 2084 AutofillHostMsg_PasswordFormSubmitted::ID);
2085 ASSERT_FALSE(message); 2085 ASSERT_FALSE(message);
2086 } 2086 }
2087 2087
2088 TEST_F(
2089 PasswordAutofillAgentTest,
2090 SuggestionsOnSubmittingPasswordFormHavingFieldsWithAmbiguousOrNoNameOrIdAttr ibutes) {
vabr (Chromium) 2015/09/18 14:41:38 nit: This name is a bit too long. :) You might wan
Pritam Nikam 2015/09/21 10:51:17 Done.
2091 const char kDummyUsernameField[] = "anonymous_username";
2092 const char kDummyPasswordField[] = "anonymous_password";
2093 const char kPasswordFormWithNoNameOrIdHTML[] =
2094 "<FORM name='WithoutNameIdForm' action='http://www.bidule.com'>"
2095 " <INPUT type='text' placeholder='username'/>"
2096 " <INPUT type='password' placeholder='Password'/>"
2097 " <INPUT type='submit' />"
2098 "</FORM>";
2099
2100 const char kChangePasswordFormWithNoNameOrIdHTML[] =
2101 "<FORM name='WithoutNameIdForm' action='http://www.bidule.com'>"
2102 " <INPUT type='text' placeholder='username'/>"
vabr (Chromium) 2015/09/18 14:41:38 Again, this looks like a sign-up form. I would exp
dvadym 2015/09/18 15:59:00 A password change form may or may not contain old
Pritam Nikam 2015/09/21 10:51:17 Done. Added attributes |autocomplete='current-pas
2103 " <INPUT type='password' placeholder='Password'/>"
2104 " <INPUT type='password' placeholder='Confirm Password'/>"
2105 " <INPUT type='submit' />"
2106 "</FORM>";
2107
2108 const char kPasswordFormWithAmbiguousNameOrIdHTML[] =
2109 "<FORM name='AmbiguousNameIdForm' action='http://www.bidule.com'>"
2110 " <INPUT type='text' id='credentials' placeholder='username'/>"
2111 " <INPUT type='password' id='credentials' placeholder='Password'/>"
2112 " <INPUT type='submit' />"
2113 "</FORM>";
2114
2115 const struct {
2116 const char* html_form;
2117 const char* fill_data_username_field_name;
2118 const char* fill_data_password_field_name;
2119 const char* expected_username_suggestions;
2120 const char* expected_password_suggestions;
2121 bool expected_is_username_autofillable;
2122 bool expected_is_password_autofillable;
2123 } test_cases[] = {
2124 // Password form without name or id attributes specified for the input
2125 // fields.
2126 {kPasswordFormWithNoNameOrIdHTML, kDummyUsernameField,
2127 kDummyPasswordField, kAliceUsername, kAlicePassword, true, true},
2128
2129 // Change password form without name or id attributes specified for the
2130 // input fields.
2131 {kChangePasswordFormWithNoNameOrIdHTML, kDummyUsernameField,
2132 kDummyPasswordField, kAliceUsername, kAlicePassword, true, true},
2133
2134 // Password form with ambiguous name or id attributes specified for the
2135 // input fields.
2136 {kPasswordFormWithAmbiguousNameOrIdHTML, "credentials", "credentials",
2137 kAliceUsername, kAlicePassword, true, true},
2138 };
2139
2140 for (size_t i = 0; i < arraysize(test_cases); ++i) {
vabr (Chromium) 2015/09/18 14:41:38 You can spare yourself the arraysize if you write:
Pritam Nikam 2015/09/21 10:51:17 Done.
2141 SCOPED_TRACE(testing::Message()
2142 << "Iteration: " << i
2143 << ", html_form: " << test_cases[i].html_form
2144 << ", fill_data_username_field_name: "
2145 << test_cases[i].fill_data_username_field_name
2146 << ", fill_data_password_field_name: "
2147 << test_cases[i].fill_data_password_field_name);
2148
2149 // Load a password form.
2150 LoadHTML(test_cases[i].html_form);
2151
2152 blink::WebDocument document = GetMainFrame()->document();
2153 blink::WebVector<blink::WebFormElement> forms;
2154 document.forms(forms);
2155 blink::WebFormElement form_element = forms[0];
2156 std::vector<blink::WebFormControlElement> control_elements =
2157 ExtractAutofillableElementsInForm(form_element);
2158 username_element_ = control_elements[0].to<blink::WebInputElement>();
2159 password_element_ = control_elements[1].to<blink::WebInputElement>();
2160
2161 UpdateOriginForHTML(test_cases[i].html_form);
2162 fill_data_.username_field.name =
2163 ASCIIToUTF16(test_cases[i].fill_data_username_field_name);
2164 fill_data_.password_field.name =
2165 ASCIIToUTF16(test_cases[i].fill_data_password_field_name);
2166 fill_data_.additional_logins.clear();
2167 fill_data_.other_possible_usernames.clear();
2168
2169 ClearUsernameAndPasswordFields();
2170
2171 // Simulate the browser sending back the login info, it triggers the
2172 // autocomplete.
2173 SimulateOnFillPasswordForm(fill_data_);
2174 SimulateSuggestionChoice(username_element_);
2175
2176 // The username and password should now have been autocompleted.
2177 CheckTextFieldsDOMState(test_cases[i].expected_username_suggestions,
2178 test_cases[i].expected_is_username_autofillable,
2179 test_cases[i].expected_password_suggestions,
2180 test_cases[i].expected_is_password_autofillable);
2181 }
2182 }
2183
2088 } // namespace autofill 2184 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698