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

Side by Side Diff: components/autofill/content/renderer/password_form_conversion_utils.cc

Issue 372683003: Clean up PasswordFormConversionUtilsTest and add some missing tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Created 6 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | components/autofill/content/renderer/password_form_conversion_utils_browsertest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_form_conversion_utils.h" 5 #include "components/autofill/content/renderer/password_form_conversion_utils.h"
6 6
7 #include "base/strings/string_util.h" 7 #include "base/strings/string_util.h"
8 #include "components/autofill/content/renderer/form_autofill_util.h" 8 #include "components/autofill/content/renderer/form_autofill_util.h"
9 #include "components/autofill/core/common/password_form.h" 9 #include "components/autofill/core/common/password_form.h"
10 #include "third_party/WebKit/public/platform/WebString.h" 10 #include "third_party/WebKit/public/platform/WebString.h"
11 #include "third_party/WebKit/public/web/WebDocument.h" 11 #include "third_party/WebKit/public/web/WebDocument.h"
12 #include "third_party/WebKit/public/web/WebFormControlElement.h" 12 #include "third_party/WebKit/public/web/WebFormControlElement.h"
13 #include "third_party/WebKit/public/web/WebInputElement.h" 13 #include "third_party/WebKit/public/web/WebInputElement.h"
14 14
15 using blink::WebDocument; 15 using blink::WebDocument;
16 using blink::WebFormControlElement; 16 using blink::WebFormControlElement;
17 using blink::WebFormElement; 17 using blink::WebFormElement;
18 using blink::WebInputElement; 18 using blink::WebInputElement;
19 using blink::WebString; 19 using blink::WebString;
20 using blink::WebVector; 20 using blink::WebVector;
21 21
22 namespace autofill { 22 namespace autofill {
23 namespace { 23 namespace {
24 24
25 // Maximum number of password fields we will observe before throwing our
26 // hands in the air and giving up with a given form.
27 static const size_t kMaxPasswords = 3;
28
29 // Checks in a case-insensitive way if the autocomplete attribute for the given 25 // Checks in a case-insensitive way if the autocomplete attribute for the given
30 // |element| is present and has the specified |value_in_lowercase|. 26 // |element| is present and has the specified |value_in_lowercase|.
31 bool HasAutocompleteAttributeValue(const WebInputElement& element, 27 bool HasAutocompleteAttributeValue(const WebInputElement& element,
32 const char* value_in_lowercase) { 28 const char* value_in_lowercase) {
33 return LowerCaseEqualsASCII(element.getAttribute("autocomplete"), 29 return LowerCaseEqualsASCII(element.getAttribute("autocomplete"),
34 value_in_lowercase); 30 value_in_lowercase);
35 } 31 }
36 32
37 // Helper to determine which password is the main (current) one, and which is 33 // Helper to determine which password is the main (current) one, and which is
38 // the new password (e.g., on a sign-up or change password form), if any. 34 // the new password (e.g., on a sign-up or change password form), if any.
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 121
126 for (size_t i = 0; i < control_elements.size(); ++i) { 122 for (size_t i = 0; i < control_elements.size(); ++i) {
127 WebFormControlElement control_element = control_elements[i]; 123 WebFormControlElement control_element = control_elements[i];
128 if (control_element.isActivatedSubmit()) 124 if (control_element.isActivatedSubmit())
129 password_form->submit_element = control_element.formControlName(); 125 password_form->submit_element = control_element.formControlName();
130 126
131 WebInputElement* input_element = toWebInputElement(&control_element); 127 WebInputElement* input_element = toWebInputElement(&control_element);
132 if (!input_element || !input_element->isEnabled()) 128 if (!input_element || !input_element->isEnabled())
133 continue; 129 continue;
134 130
135 if ((passwords.size() < kMaxPasswords) && 131 if (input_element->isPasswordField()) {
136 input_element->isPasswordField()) {
137 passwords.push_back(*input_element); 132 passwords.push_back(*input_element);
138 // If we have not yet considered any element to be the username so far, 133 // If we have not yet considered any element to be the username so far,
139 // provisionally select the input element just before the first password 134 // provisionally select the input element just before the first password
140 // element to be the username. This choice will be overruled if we later 135 // element to be the username. This choice will be overruled if we later
141 // find an element with autocomplete='username'. 136 // find an element with autocomplete='username'.
142 if (username_element.isNull() && !latest_input_element.isNull()) { 137 if (username_element.isNull() && !latest_input_element.isNull()) {
143 username_element = latest_input_element; 138 username_element = latest_input_element;
144 // Remove the selected username from other_possible_usernames. 139 // Remove the selected username from other_possible_usernames.
145 if (!latest_input_element.value().isEmpty()) { 140 if (!latest_input_element.value().isEmpty()) {
146 DCHECK(!other_possible_usernames.empty()); 141 DCHECK(!other_possible_usernames.empty());
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 blink::WebFormControlElement(), 259 blink::WebFormControlElement(),
265 REQUIRE_NONE, 260 REQUIRE_NONE,
266 EXTRACT_NONE, 261 EXTRACT_NONE,
267 &password_form->form_data, 262 &password_form->form_data,
268 NULL /* FormFieldData */); 263 NULL /* FormFieldData */);
269 264
270 return password_form.Pass(); 265 return password_form.Pass();
271 } 266 }
272 267
273 } // namespace autofill 268 } // namespace autofill
OLDNEW
« no previous file with comments | « no previous file | components/autofill/content/renderer/password_form_conversion_utils_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698