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/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
(...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
715 } | 715 } |
716 | 716 |
717 void PasswordAutofillAgent::UpdateStateForTextChange( | 717 void PasswordAutofillAgent::UpdateStateForTextChange( |
718 const blink::WebInputElement& element) { | 718 const blink::WebInputElement& element) { |
719 // TODO(vabr): Get a mutable argument instead. http://crbug.com/397083 | 719 // TODO(vabr): Get a mutable argument instead. http://crbug.com/397083 |
720 blink::WebInputElement mutable_element = element; // We need a non-const. | 720 blink::WebInputElement mutable_element = element; // We need a non-const. |
721 | 721 |
722 if (element.isTextField()) | 722 if (element.isTextField()) |
723 nonscript_modified_values_[element] = element.value(); | 723 nonscript_modified_values_[element] = element.value(); |
724 | 724 |
| 725 LoginToPasswordInfoMap::iterator password_info_iter = |
| 726 login_to_password_info_.find(element); |
| 727 if (password_info_iter != login_to_password_info_.end()) { |
| 728 password_info_iter->second.username_was_edited = true; |
| 729 } |
| 730 |
725 DCHECK_EQ(element.document().frame(), render_frame()->GetWebFrame()); | 731 DCHECK_EQ(element.document().frame(), render_frame()->GetWebFrame()); |
726 | 732 |
727 if (element.isPasswordField()) { | 733 if (element.isPasswordField()) { |
728 // Some login forms have event handlers that put a hash of the password into | 734 // Some login forms have event handlers that put a hash of the password into |
729 // a hidden field and then clear the password (http://crbug.com/28910, | 735 // a hidden field and then clear the password (http://crbug.com/28910, |
730 // http://crbug.com/391693). This method gets called before any of those | 736 // http://crbug.com/391693). This method gets called before any of those |
731 // handlers run, so save away a copy of the password in case it gets lost. | 737 // handlers run, so save away a copy of the password in case it gets lost. |
732 // To honor the user having explicitly cleared the password, even an empty | 738 // To honor the user having explicitly cleared the password, even an empty |
733 // password will be saved here. | 739 // password will be saved here. |
734 ProvisionallySavePassword(element.form(), RESTRICTION_NONE); | 740 ProvisionallySavePassword(element.form(), RESTRICTION_NONE); |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
851 if (!IsElementAutocompletable(element) || | 857 if (!IsElementAutocompletable(element) || |
852 !IsElementAutocompletable(password_info->password_field)) | 858 !IsElementAutocompletable(password_info->password_field)) |
853 return true; | 859 return true; |
854 | 860 |
855 bool username_is_available = | 861 bool username_is_available = |
856 !username_element->isNull() && IsElementEditable(*username_element); | 862 !username_element->isNull() && IsElementEditable(*username_element); |
857 // If the element is a password field, a popup should only be shown if there | 863 // If the element is a password field, a popup should only be shown if there |
858 // is no username or the corresponding username element is not editable since | 864 // is no username or the corresponding username element is not editable since |
859 // it is only in that case that the username element does not have a | 865 // it is only in that case that the username element does not have a |
860 // suggestions popup. | 866 // suggestions popup. |
861 if (element.isPasswordField() && username_is_available) | 867 if (element.isPasswordField() && username_is_available && |
| 868 (!password_info->fill_data.is_possible_change_password_form || |
| 869 password_info->username_was_edited)) |
862 return true; | 870 return true; |
863 | 871 |
864 // Chrome should never show more than one account for a password element since | 872 // Chrome should never show more than one account for a password element since |
865 // this implies that the username element cannot be modified. Thus even if | 873 // this implies that the username element cannot be modified. Thus even if |
866 // |show_all| is true, check if the element in question is a password element | 874 // |show_all| is true, check if the element in question is a password element |
867 // for the call to ShowSuggestionPopup. | 875 // for the call to ShowSuggestionPopup. |
868 return ShowSuggestionPopup( | 876 return ShowSuggestionPopup( |
869 password_info->fill_data, | 877 password_info->fill_data, |
870 username_element->isNull() ? element : *username_element, | 878 username_element->isNull() ? element : *username_element, |
871 show_all && !element.isPasswordField(), element.isPasswordField()); | 879 show_all && !element.isPasswordField(), element.isPasswordField()); |
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1280 password_form.reset(new PasswordForm()); | 1288 password_form.reset(new PasswordForm()); |
1281 | 1289 |
1282 Send(new AutofillHostMsg_FocusedPasswordFormFound( | 1290 Send(new AutofillHostMsg_FocusedPasswordFormFound( |
1283 routing_id(), *password_form)); | 1291 routing_id(), *password_form)); |
1284 } | 1292 } |
1285 | 1293 |
1286 //////////////////////////////////////////////////////////////////////////////// | 1294 //////////////////////////////////////////////////////////////////////////////// |
1287 // PasswordAutofillAgent, private: | 1295 // PasswordAutofillAgent, private: |
1288 | 1296 |
1289 PasswordAutofillAgent::PasswordInfo::PasswordInfo() | 1297 PasswordAutofillAgent::PasswordInfo::PasswordInfo() |
1290 : backspace_pressed_last(false), password_was_edited_last(false) { | 1298 : backspace_pressed_last(false), |
| 1299 password_was_edited_last(false), |
| 1300 username_was_edited(false) { |
1291 } | 1301 } |
1292 | 1302 |
1293 bool PasswordAutofillAgent::ShowSuggestionPopup( | 1303 bool PasswordAutofillAgent::ShowSuggestionPopup( |
1294 const PasswordFormFillData& fill_data, | 1304 const PasswordFormFillData& fill_data, |
1295 const blink::WebInputElement& user_input, | 1305 const blink::WebInputElement& user_input, |
1296 bool show_all, | 1306 bool show_all, |
1297 bool show_on_password_field) { | 1307 bool show_on_password_field) { |
1298 DCHECK(!user_input.isNull()); | 1308 DCHECK(!user_input.isNull()); |
1299 blink::WebFrame* frame = user_input.document().frame(); | 1309 blink::WebFrame* frame = user_input.document().frame(); |
1300 if (!frame) | 1310 if (!frame) |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1472 void PasswordAutofillAgent::LegacyPasswordAutofillAgent::DidStopLoading() { | 1482 void PasswordAutofillAgent::LegacyPasswordAutofillAgent::DidStopLoading() { |
1473 agent_->DidStopLoading(); | 1483 agent_->DidStopLoading(); |
1474 } | 1484 } |
1475 | 1485 |
1476 void PasswordAutofillAgent::LegacyPasswordAutofillAgent:: | 1486 void PasswordAutofillAgent::LegacyPasswordAutofillAgent:: |
1477 DidStartProvisionalLoad(blink::WebLocalFrame* navigated_frame) { | 1487 DidStartProvisionalLoad(blink::WebLocalFrame* navigated_frame) { |
1478 agent_->LegacyDidStartProvisionalLoad(navigated_frame); | 1488 agent_->LegacyDidStartProvisionalLoad(navigated_frame); |
1479 } | 1489 } |
1480 | 1490 |
1481 } // namespace autofill | 1491 } // namespace autofill |
OLD | NEW |