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

Side by Side Diff: components/autofill/content/renderer/password_autofill_agent.cc

Issue 103503002: Ignore autocomplete='off' for usernames and passwords. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Nits from gcasto Created 7 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 SetElementAutofilled(&username, false); 242 SetElementAutofilled(&username, false);
243 if (password.isAutofilled()) { 243 if (password.isAutofilled()) {
244 password.setValue(base::string16()); 244 password.setValue(base::string16());
245 SetElementAutofilled(&password, false); 245 SetElementAutofilled(&password, false);
246 } 246 }
247 247
248 // If wait_for_username is true we will fill when the username loses focus. 248 // If wait_for_username is true we will fill when the username loses focus.
249 if (iter->second.fill_data.wait_for_username) 249 if (iter->second.fill_data.wait_for_username)
250 return false; 250 return false;
251 251
252 if (!IsElementEditable(element) || 252 if (!IsElementEditable(element) || !element.isText()) {
253 !element.isText() ||
254 !element.autoComplete()) {
255 return false; 253 return false;
256 } 254 }
257 255
258 // Don't inline autocomplete if the user is deleting, that would be confusing. 256 // Don't inline autocomplete if the user is deleting, that would be confusing.
259 // But refresh the popup. Note, since this is ours, return true to signal 257 // But refresh the popup. Note, since this is ours, return true to signal
260 // no further processing is required. 258 // no further processing is required.
261 if (iter->second.backspace_pressed_last) { 259 if (iter->second.backspace_pressed_last) {
262 ShowSuggestionPopup(iter->second.fill_data, username); 260 ShowSuggestionPopup(iter->second.fill_data, username);
263 return true; 261 return true;
264 } 262 }
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 630
633 void PasswordAutofillAgent::FillFormOnPasswordRecieved( 631 void PasswordAutofillAgent::FillFormOnPasswordRecieved(
634 const PasswordFormFillData& fill_data, 632 const PasswordFormFillData& fill_data,
635 blink::WebInputElement username_element, 633 blink::WebInputElement username_element,
636 blink::WebInputElement password_element) { 634 blink::WebInputElement password_element) {
637 // Do not fill if the password field is in an iframe. 635 // Do not fill if the password field is in an iframe.
638 DCHECK(password_element.document().frame()); 636 DCHECK(password_element.document().frame());
639 if (password_element.document().frame()->parent()) 637 if (password_element.document().frame()->parent())
640 return; 638 return;
641 639
642 if (!username_element.form().autoComplete())
643 return;
644
645 // If we can't modify the password, don't try to set the username 640 // If we can't modify the password, don't try to set the username
646 if (!IsElementEditable(password_element) || !password_element.autoComplete()) 641 if (!IsElementEditable(password_element))
647 return; 642 return;
648 643
649 // Try to set the username to the preferred name, but only if the field 644 // Try to set the username to the preferred name, but only if the field
650 // can be set and isn't prefilled. 645 // can be set and isn't prefilled.
651 if (IsElementEditable(username_element) && 646 if (IsElementEditable(username_element) &&
652 username_element.autoComplete() &&
653 username_element.value().isEmpty()) { 647 username_element.value().isEmpty()) {
654 // TODO(tkent): Check maxlength and pattern. 648 // TODO(tkent): Check maxlength and pattern.
655 username_element.setValue(fill_data.basic_data.fields[0].value); 649 username_element.setValue(fill_data.basic_data.fields[0].value);
656 } 650 }
657 651
658 // Fill if we have an exact match for the username. Note that this sets 652 // Fill if we have an exact match for the username. Note that this sets
659 // username to autofilled. 653 // username to autofilled.
660 FillUserNameAndPassword(&username_element, &password_element, fill_data, 654 FillUserNameAndPassword(&username_element, &password_element, fill_data,
661 true /* exact_username_match */, 655 true /* exact_username_match */,
662 false /* set_selection */); 656 false /* set_selection */);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 } 704 }
711 } 705 }
712 } 706 }
713 if (password.empty()) 707 if (password.empty())
714 return false; // No match was found. 708 return false; // No match was found.
715 709
716 // TODO(tkent): Check maxlength and pattern for both username and password 710 // TODO(tkent): Check maxlength and pattern for both username and password
717 // fields. 711 // fields.
718 712
719 // Don't fill username if password can't be set. 713 // Don't fill username if password can't be set.
720 if (!IsElementEditable(*password_element) || 714 if (!IsElementEditable(*password_element))
721 !password_element->autoComplete()) {
722 return false; 715 return false;
723 }
724 716
725 // Input matches the username, fill in required values. 717 // Input matches the username, fill in required values.
726 if (IsElementEditable(*username_element) && 718 if (IsElementEditable(*username_element)) {
727 username_element->autoComplete()) {
728 username_element->setValue(username); 719 username_element->setValue(username);
729 SetElementAutofilled(username_element, true); 720 SetElementAutofilled(username_element, true);
730 721
731 if (set_selection) { 722 if (set_selection) {
732 username_element->setSelectionRange(current_username.length(), 723 username_element->setSelectionRange(current_username.length(),
733 username.length()); 724 username.length());
734 } 725 }
735 } else if (current_username != username) { 726 } else if (current_username != username) {
736 // If the username can't be filled and it doesn't match a saved password 727 // If the username can't be filled and it doesn't match a saved password
737 // as is, don't autofill a password. 728 // as is, don't autofill a password.
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
833 } 824 }
834 825
835 PasswordAutofillAgent::AutofillWebUserGestureHandler:: 826 PasswordAutofillAgent::AutofillWebUserGestureHandler::
836 AutofillWebUserGestureHandler(PasswordAutofillAgent* agent) 827 AutofillWebUserGestureHandler(PasswordAutofillAgent* agent)
837 : agent_(agent) {} 828 : agent_(agent) {}
838 829
839 PasswordAutofillAgent::AutofillWebUserGestureHandler:: 830 PasswordAutofillAgent::AutofillWebUserGestureHandler::
840 ~AutofillWebUserGestureHandler() {} 831 ~AutofillWebUserGestureHandler() {}
841 832
842 } // namespace autofill 833 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698