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

Unified Diff: components/autofill/content/renderer/password_autofill_agent.cc

Issue 614023002: [Password manager] Relplace the FormFieldData vector from autofill::FormData with named fields… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Incorporated nit from Vaclav's review. Created 6 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: components/autofill/content/renderer/password_autofill_agent.cc
diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc
index 2dc195e133eec5b730a9c3eba62b1d3f07919649..cc24a9dcc64304f8228f5c9db5a0399493cbb12c 100644
--- a/components/autofill/content/renderer/password_autofill_agent.cc
+++ b/components/autofill/content/renderer/password_autofill_agent.cc
@@ -61,6 +61,10 @@ struct FormElements {
typedef std::vector<FormElements*> FormElementsList;
+bool FillDataContainsUsername(const PasswordFormFillData& fill_data) {
+ return !fill_data.username_field.name.empty();
+}
+
// Utility function to find the unique entry of the |form_element| for the
// specified input |field|. On successful find, adds it to |result| and returns
// |true|. Otherwise clears the references from each |HTMLInputElement| from
@@ -118,25 +122,16 @@ bool FindFormInputElement(blink::WebFormElement* form_element,
// Helper to search the given form element for the specified input elements in
// |data|, and add results to |result|.
bool FindFormInputElements(blink::WebFormElement* form_element,
- const FormData& data,
+ const PasswordFormFillData& data,
FormElements* result) {
- const bool username_is_present = !data.fields[0].name.empty();
-
- // Loop through the list of elements we need to find on the form in order to
- // autofill it. If we don't find any one of them, abort processing this
- // form; it can't be the right one.
- // First field is the username, skip it if not present.
- for (size_t j = (username_is_present ? 0 : 1); j < data.fields.size(); ++j) {
- if (!FindFormInputElement(form_element, data.fields[j], result))
- return false;
- }
-
- return true;
+ return FindFormInputElement(form_element, data.password_field, result) &&
+ (!FillDataContainsUsername(data) ||
+ FindFormInputElement(form_element, data.username_field, result));
}
// Helper to locate form elements identified by |data|.
void FindFormElements(blink::WebView* view,
- const FormData& data,
+ const PasswordFormFillData& data,
FormElementsList* results) {
DCHECK(view);
DCHECK(results);
@@ -244,10 +239,6 @@ void LogHTMLForm(SavePasswordProgressLogger* logger,
GURL(form.action().utf8()));
}
-bool FillDataContainsUsername(const PasswordFormFillData& fill_data) {
- return !fill_data.basic_data.fields[0].name.empty();
-}
-
// Sets |suggestions_present| to true if there are any suggestions to be derived
// from |fill_data|. Unless |show_all| is true, only considers suggestions with
// usernames having |current_username| as a prefix. Returns true if a username
@@ -269,8 +260,8 @@ bool GetSuggestionsStats(const PasswordFormFillData& fill_data,
}
}
- if (show_all || StartsWith(fill_data.basic_data.fields[0].value,
- current_username, false)) {
+ if (show_all ||
+ StartsWith(fill_data.username_field.value, current_username, false)) {
*suggestions_present = true;
return false;
}
@@ -312,11 +303,10 @@ bool FillUserNameAndPassword(
base::string16 password;
// Look for any suitable matches to current field text.
- if (DoUsernamesMatch(fill_data.basic_data.fields[0].value,
- current_username,
+ if (DoUsernamesMatch(fill_data.username_field.value, current_username,
exact_username_match)) {
- username = fill_data.basic_data.fields[0].value;
- password = fill_data.basic_data.fields[1].value;
+ username = fill_data.username_field.value;
+ password = fill_data.password_field.value;
} else {
// Scan additional logins for a match.
PasswordFormFillData::LoginCollection::const_iterator iter;
@@ -412,7 +402,7 @@ bool FillFormOnPasswordRecieved(
IsElementAutocompletable(username_element) &&
username_element.value().isEmpty()) {
// TODO(tkent): Check maxlength and pattern.
- username_element.setValue(fill_data.basic_data.fields[0].value, true);
+ username_element.setValue(fill_data.username_field.value, true);
}
// Fill if we have an exact match for the username. Note that this sets
@@ -1027,7 +1017,7 @@ void PasswordAutofillAgent::OnFillPasswordForm(
FormElementsList forms;
// We own the FormElements* in forms.
- FindFormElements(render_view()->GetWebView(), form_data.basic_data, &forms);
+ FindFormElements(render_view()->GetWebView(), form_data, &forms);
FormElementsList::iterator iter;
for (iter = forms.begin(); iter != forms.end(); ++iter) {
scoped_ptr<FormElements> form_elements(*iter);
@@ -1039,17 +1029,17 @@ void PasswordAutofillAgent::OnFillPasswordForm(
bool form_contains_username_field = FillDataContainsUsername(form_data);
if (form_contains_username_field) {
username_element =
- form_elements->input_elements[form_data.basic_data.fields[0].name];
+ form_elements->input_elements[form_data.username_field.name];
}
// No password field, bail out.
- if (form_data.basic_data.fields[1].name.empty())
+ if (form_data.password_field.name.empty())
break;
// Get pointer to password element. (We currently only support single
// password forms).
password_element =
- form_elements->input_elements[form_data.basic_data.fields[1].name];
+ form_elements->input_elements[form_data.password_field.name];
// If wait_for_username is true, we don't want to initially fill the form
// until the user types in a valid username.
« no previous file with comments | « components/autofill/content/common/autofill_messages.h ('k') | components/autofill/core/common/autofill_data_validation.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698