OLD | NEW |
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_autofill_agent.h" | 5 #include "components/autofill/content/renderer/password_autofill_agent.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
(...skipping 984 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
995 // This is a new navigation, so require a new user gesture before filling in | 995 // This is a new navigation, so require a new user gesture before filling in |
996 // passwords. | 996 // passwords. |
997 gatekeeper_.Reset(); | 997 gatekeeper_.Reset(); |
998 } else { | 998 } else { |
999 if (logger) | 999 if (logger) |
1000 logger->LogMessage(Logger::STRING_DECISION_DROP); | 1000 logger->LogMessage(Logger::STRING_DECISION_DROP); |
1001 } | 1001 } |
1002 } | 1002 } |
1003 | 1003 |
1004 void PasswordAutofillAgent::OnFillPasswordForm( | 1004 void PasswordAutofillAgent::OnFillPasswordForm( |
| 1005 int key, |
1005 const PasswordFormFillData& form_data) { | 1006 const PasswordFormFillData& form_data) { |
1006 if (usernames_usage_ == NOTHING_TO_AUTOFILL) { | 1007 if (usernames_usage_ == NOTHING_TO_AUTOFILL) { |
1007 if (form_data.other_possible_usernames.size()) | 1008 if (form_data.other_possible_usernames.size()) |
1008 usernames_usage_ = OTHER_POSSIBLE_USERNAMES_PRESENT; | 1009 usernames_usage_ = OTHER_POSSIBLE_USERNAMES_PRESENT; |
1009 else if (usernames_usage_ == NOTHING_TO_AUTOFILL) | 1010 else if (usernames_usage_ == NOTHING_TO_AUTOFILL) |
1010 usernames_usage_ = OTHER_POSSIBLE_USERNAMES_ABSENT; | 1011 usernames_usage_ = OTHER_POSSIBLE_USERNAMES_ABSENT; |
1011 } | 1012 } |
1012 | 1013 |
1013 FormElementsList forms; | 1014 FormElementsList forms; |
1014 // We own the FormElements* in forms. | 1015 // We own the FormElements* in forms. |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1051 // with identical markup. | 1052 // with identical markup. |
1052 if (login_to_password_info_.find(username_element) != | 1053 if (login_to_password_info_.find(username_element) != |
1053 login_to_password_info_.end()) | 1054 login_to_password_info_.end()) |
1054 continue; | 1055 continue; |
1055 | 1056 |
1056 PasswordInfo password_info; | 1057 PasswordInfo password_info; |
1057 password_info.fill_data = form_data; | 1058 password_info.fill_data = form_data; |
1058 password_info.password_field = password_element; | 1059 password_info.password_field = password_element; |
1059 login_to_password_info_[username_element] = password_info; | 1060 login_to_password_info_[username_element] = password_info; |
1060 password_to_username_[password_element] = username_element; | 1061 password_to_username_[password_element] = username_element; |
1061 | 1062 login_to_password_info_key_[username_element] = key; |
1062 FormData form; | |
1063 FormFieldData field; | |
1064 if (form_contains_username_field) { | |
1065 FindFormAndFieldForFormControlElement( | |
1066 username_element, &form, &field, REQUIRE_NONE); | |
1067 } | |
1068 | |
1069 Send(new AutofillHostMsg_AddPasswordFormMapping( | |
1070 routing_id(), field, form_data)); | |
1071 } | 1063 } |
1072 } | 1064 } |
1073 | 1065 |
1074 void PasswordAutofillAgent::OnSetLoggingState(bool active) { | 1066 void PasswordAutofillAgent::OnSetLoggingState(bool active) { |
1075 logging_state_active_ = active; | 1067 logging_state_active_ = active; |
1076 } | 1068 } |
1077 | 1069 |
1078 //////////////////////////////////////////////////////////////////////////////// | 1070 //////////////////////////////////////////////////////////////////////////////// |
1079 // PasswordAutofillAgent, private: | 1071 // PasswordAutofillAgent, private: |
1080 | 1072 |
(...skipping 14 matching lines...) Expand all Loading... |
1095 return false; | 1087 return false; |
1096 | 1088 |
1097 FormData form; | 1089 FormData form; |
1098 FormFieldData field; | 1090 FormFieldData field; |
1099 FindFormAndFieldForFormControlElement( | 1091 FindFormAndFieldForFormControlElement( |
1100 user_input, &form, &field, REQUIRE_NONE); | 1092 user_input, &form, &field, REQUIRE_NONE); |
1101 | 1093 |
1102 blink::WebInputElement selected_element = user_input; | 1094 blink::WebInputElement selected_element = user_input; |
1103 gfx::Rect bounding_box(selected_element.boundsInViewportSpace()); | 1095 gfx::Rect bounding_box(selected_element.boundsInViewportSpace()); |
1104 | 1096 |
| 1097 LoginToPasswordInfoKeyMap::const_iterator key_it = |
| 1098 login_to_password_info_key_.find(user_input); |
| 1099 DCHECK(key_it != login_to_password_info_key_.end()); |
| 1100 |
1105 float scale = web_view_->pageScaleFactor(); | 1101 float scale = web_view_->pageScaleFactor(); |
1106 gfx::RectF bounding_box_scaled(bounding_box.x() * scale, | 1102 gfx::RectF bounding_box_scaled(bounding_box.x() * scale, |
1107 bounding_box.y() * scale, | 1103 bounding_box.y() * scale, |
1108 bounding_box.width() * scale, | 1104 bounding_box.width() * scale, |
1109 bounding_box.height() * scale); | 1105 bounding_box.height() * scale); |
1110 Send(new AutofillHostMsg_ShowPasswordSuggestions( | 1106 Send(new AutofillHostMsg_ShowPasswordSuggestions( |
1111 routing_id(), field, user_input.value(), show_all, bounding_box_scaled)); | 1107 routing_id(), key_it->second, field.text_direction, user_input.value(), |
| 1108 show_all, bounding_box_scaled)); |
1112 | 1109 |
1113 bool suggestions_present = false; | 1110 bool suggestions_present = false; |
1114 if (GetSuggestionsStats(fill_data, user_input.value(), show_all, | 1111 if (GetSuggestionsStats(fill_data, user_input.value(), show_all, |
1115 &suggestions_present)) { | 1112 &suggestions_present)) { |
1116 usernames_usage_ = OTHER_POSSIBLE_USERNAME_SHOWN; | 1113 usernames_usage_ = OTHER_POSSIBLE_USERNAME_SHOWN; |
1117 } | 1114 } |
1118 return suggestions_present; | 1115 return suggestions_present; |
1119 } | 1116 } |
1120 | 1117 |
1121 void PasswordAutofillAgent::PerformInlineAutocomplete( | 1118 void PasswordAutofillAgent::PerformInlineAutocomplete( |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1153 } | 1150 } |
1154 #endif | 1151 #endif |
1155 } | 1152 } |
1156 | 1153 |
1157 void PasswordAutofillAgent::FrameClosing(const blink::WebFrame* frame) { | 1154 void PasswordAutofillAgent::FrameClosing(const blink::WebFrame* frame) { |
1158 for (LoginToPasswordInfoMap::iterator iter = login_to_password_info_.begin(); | 1155 for (LoginToPasswordInfoMap::iterator iter = login_to_password_info_.begin(); |
1159 iter != login_to_password_info_.end();) { | 1156 iter != login_to_password_info_.end();) { |
1160 // There may not be a username field, so get the frame from the password | 1157 // There may not be a username field, so get the frame from the password |
1161 // field. | 1158 // field. |
1162 if (iter->second.password_field.document().frame() == frame) { | 1159 if (iter->second.password_field.document().frame() == frame) { |
| 1160 login_to_password_info_key_.erase(iter->first); |
1163 password_to_username_.erase(iter->second.password_field); | 1161 password_to_username_.erase(iter->second.password_field); |
1164 login_to_password_info_.erase(iter++); | 1162 login_to_password_info_.erase(iter++); |
1165 } else { | 1163 } else { |
1166 ++iter; | 1164 ++iter; |
1167 } | 1165 } |
1168 } | 1166 } |
1169 for (FrameToPasswordFormMap::iterator iter = | 1167 for (FrameToPasswordFormMap::iterator iter = |
1170 provisionally_saved_forms_.begin(); | 1168 provisionally_saved_forms_.begin(); |
1171 iter != provisionally_saved_forms_.end();) { | 1169 iter != provisionally_saved_forms_.end();) { |
1172 if (iter->first == frame) | 1170 if (iter->first == frame) |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1226 scoped_ptr<PasswordForm> password_form(CreatePasswordForm(form)); | 1224 scoped_ptr<PasswordForm> password_form(CreatePasswordForm(form)); |
1227 if (!password_form || (restriction == RESTRICTION_NON_EMPTY_PASSWORD && | 1225 if (!password_form || (restriction == RESTRICTION_NON_EMPTY_PASSWORD && |
1228 password_form->password_value.empty() && | 1226 password_form->password_value.empty() && |
1229 password_form->new_password_value.empty())) { | 1227 password_form->new_password_value.empty())) { |
1230 return; | 1228 return; |
1231 } | 1229 } |
1232 provisionally_saved_forms_[frame].reset(password_form.release()); | 1230 provisionally_saved_forms_[frame].reset(password_form.release()); |
1233 } | 1231 } |
1234 | 1232 |
1235 } // namespace autofill | 1233 } // namespace autofill |
OLD | NEW |