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 3c6626f5af4e3cfa035822c9ab9bbe132f4997c4..7af454a344b7de2a7e0ff1a3533e7e243246f87f 100644 |
--- a/components/autofill/content/renderer/password_autofill_agent.cc |
+++ b/components/autofill/content/renderer/password_autofill_agent.cc |
@@ -1002,6 +1002,7 @@ void PasswordAutofillAgent::DidStartProvisionalLoad( |
} |
void PasswordAutofillAgent::OnFillPasswordForm( |
+ int key, |
const PasswordFormFillData& form_data) { |
if (usernames_usage_ == NOTHING_TO_AUTOFILL) { |
if (form_data.other_possible_usernames.size()) |
@@ -1058,16 +1059,7 @@ void PasswordAutofillAgent::OnFillPasswordForm( |
password_info.password_field = password_element; |
login_to_password_info_[username_element] = password_info; |
password_to_username_[password_element] = username_element; |
- |
- FormData form; |
- FormFieldData field; |
- if (form_contains_username_field) { |
- FindFormAndFieldForFormControlElement( |
- username_element, &form, &field, REQUIRE_NONE); |
- } |
- |
- Send(new AutofillHostMsg_AddPasswordFormMapping( |
- routing_id(), field, form_data)); |
+ login_to_password_info_key_[username_element] = key; |
} |
} |
@@ -1102,13 +1094,18 @@ bool PasswordAutofillAgent::ShowSuggestionPopup( |
blink::WebInputElement selected_element = user_input; |
gfx::Rect bounding_box(selected_element.boundsInViewportSpace()); |
+ LoginToPasswordInfoKeyMap::const_iterator key_it = |
+ login_to_password_info_key_.find(user_input); |
+ DCHECK(key_it != login_to_password_info_key_.end()); |
+ |
float scale = web_view_->pageScaleFactor(); |
gfx::RectF bounding_box_scaled(bounding_box.x() * scale, |
bounding_box.y() * scale, |
bounding_box.width() * scale, |
bounding_box.height() * scale); |
Send(new AutofillHostMsg_ShowPasswordSuggestions( |
- routing_id(), field, user_input.value(), show_all, bounding_box_scaled)); |
+ routing_id(), key_it->second, field.text_direction, user_input.value(), |
+ show_all, bounding_box_scaled)); |
bool suggestions_present = false; |
if (GetSuggestionsStats(fill_data, user_input.value(), show_all, |
@@ -1160,6 +1157,7 @@ void PasswordAutofillAgent::FrameClosing(const blink::WebFrame* frame) { |
// There may not be a username field, so get the frame from the password |
// field. |
if (iter->second.password_field.document().frame() == frame) { |
+ login_to_password_info_key_.erase(iter->first); |
password_to_username_.erase(iter->second.password_field); |
login_to_password_info_.erase(iter++); |
} else { |