Index: chrome/renderer/autofill/password_autofill_manager.cc |
=================================================================== |
--- chrome/renderer/autofill/password_autofill_manager.cc (revision 127980) |
+++ chrome/renderer/autofill/password_autofill_manager.cc (working copy) |
@@ -423,26 +423,28 @@ |
if (!form_data.wait_for_username) |
FillForm(form_elements.get(), form_data.basic_data); |
- // Attach autocomplete listener to enable selecting alternate logins. |
- // First, get pointers to username element. |
- WebKit::WebInputElement username_element = |
- form_elements->input_elements[form_data.basic_data.fields[0].name]; |
- |
// Get pointer to password element. (We currently only support single |
// password forms). |
WebKit::WebInputElement password_element = |
- form_elements->input_elements[form_data.basic_data.fields[1].name]; |
+ form_elements->input_elements[form_data.GetPasswordField().name]; |
- // We might have already filled this form if there are two <form> elements |
- // with identical markup. |
- if (login_to_password_info_.find(username_element) != |
- login_to_password_info_.end()) |
- continue; |
- |
- PasswordInfo password_info; |
- password_info.fill_data = form_data; |
- password_info.password_field = password_element; |
- login_to_password_info_[username_element] = password_info; |
+ // If there is a username, set the username and login_to_password_info_. |
+ if (form_data.GetDataType() == |
+ webkit::forms::PasswordFormFillData::kUsernameAndPassword) { |
+ // Attach autocomplete listener to enable selecting alternate logins. |
+ // First, get pointers to username element. |
+ WebKit::WebInputElement username_element = |
+ form_elements->input_elements[form_data.GetUsernameField().name]; |
+ // We might have already filled this form if there are two <form> elements |
+ // with identical markup. |
+ if (login_to_password_info_.find(username_element) != |
+ login_to_password_info_.end()) |
+ continue; |
+ PasswordInfo password_info; |
+ password_info.fill_data = form_data; |
+ password_info.password_field = password_element; |
+ login_to_password_info_[username_element] = password_info; |
+ } |
} |
} |
@@ -453,9 +455,11 @@ |
const webkit::forms::PasswordFormFillData& fill_data, |
const string16& input, |
std::vector<string16>* suggestions) { |
- if (StartsWith(fill_data.basic_data.fields[0].value, input, false)) |
- suggestions->push_back(fill_data.basic_data.fields[0].value); |
- |
+ if (fill_data.GetDataType() == |
+ webkit::forms::PasswordFormFillData::kUsernameAndPassword) { |
+ if (StartsWith(fill_data.GetUsernameField().value, input, false)) |
+ suggestions->push_back(fill_data.GetUsernameField().value); |
+ } |
webkit::forms::PasswordFormFillData::LoginCollection::const_iterator iter; |
for (iter = fill_data.additional_logins.begin(); |
iter != fill_data.additional_logins.end(); ++iter) { |
@@ -501,11 +505,19 @@ |
string16 username; |
string16 password; |
+ // If there isn't any username form, just exit. |
+ // Because this function is used for the case |
+ // that the username form and the possword form exist. |
+ if (fill_data.GetDataType() == |
+ webkit::forms::PasswordFormFillData::kOnlyPassword) { |
+ return false; |
+ } |
+ |
// Look for any suitable matches to current field text. |
- if (DoUsernamesMatch(fill_data.basic_data.fields[0].value, current_username, |
+ if (DoUsernamesMatch(fill_data.GetUsernameField().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.GetUsernameField().value; |
+ password = fill_data.GetPasswordField().value; |
} else { |
// Scan additional logins for a match. |
webkit::forms::PasswordFormFillData::LoginCollection::const_iterator iter; |