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

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

Issue 1161023008: Suggest to fill password change forms (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Renaming and showing password field suggestions rarely Created 5 years, 6 months 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
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/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 840 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 if (!IsElementAutocompletable(element) || 851 if (!IsElementAutocompletable(element) ||
852 !IsElementAutocompletable(password_info->password_field)) 852 !IsElementAutocompletable(password_info->password_field))
853 return true; 853 return true;
854 854
855 bool username_is_available = 855 bool username_is_available =
856 !username_element->isNull() && IsElementEditable(*username_element); 856 !username_element->isNull() && IsElementEditable(*username_element);
857 // If the element is a password field, a popup should only be shown if there 857 // 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 858 // 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 859 // it is only in that case that the username element does not have a
860 // suggestions popup. 860 // suggestions popup.
861 if (element.isPasswordField() && username_is_available) 861 if (element.isPasswordField() && username_is_available &&
862 (!password_info->fill_data.is_change_password_form ||
Garrett Casto 2015/06/12 00:09:09 Instead of keeping an additional structure, how ab
dvadym 2015/06/12 17:22:37 I agree, that it's better to be simpler, so I've r
863 (password_info->fill_data.is_change_password_form &&
864 had_focus_username_fields_.find(*username_element) !=
865 had_focus_username_fields_.end())))
862 return true; 866 return true;
863 867
864 // Chrome should never show more than one account for a password element since 868 // 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 869 // 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 870 // |show_all| is true, check if the element in question is a password element
867 // for the call to ShowSuggestionPopup. 871 // for the call to ShowSuggestionPopup.
868 return ShowSuggestionPopup( 872 return ShowSuggestionPopup(
869 password_info->fill_data, 873 password_info->fill_data,
870 username_element->isNull() ? element : *username_element, 874 username_element->isNull() ? element : *username_element,
871 show_all && !element.isPasswordField(), element.isPasswordField()); 875 show_all && !element.isPasswordField(), element.isPasswordField());
(...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after
1389 } 1393 }
1390 1394
1391 void PasswordAutofillAgent::FrameClosing() { 1395 void PasswordAutofillAgent::FrameClosing() {
1392 for (auto const& iter : login_to_password_info_) { 1396 for (auto const& iter : login_to_password_info_) {
1393 login_to_password_info_key_.erase(iter.first); 1397 login_to_password_info_key_.erase(iter.first);
1394 password_to_username_.erase(iter.second.password_field); 1398 password_to_username_.erase(iter.second.password_field);
1395 } 1399 }
1396 login_to_password_info_.clear(); 1400 login_to_password_info_.clear();
1397 provisionally_saved_form_.reset(); 1401 provisionally_saved_form_.reset();
1398 nonscript_modified_values_.clear(); 1402 nonscript_modified_values_.clear();
1403 had_focus_username_fields_.clear();
1399 } 1404 }
1400 1405
1401 bool PasswordAutofillAgent::FindLoginInfo(const blink::WebNode& node, 1406 bool PasswordAutofillAgent::FindLoginInfo(const blink::WebNode& node,
1402 blink::WebInputElement* found_input, 1407 blink::WebInputElement* found_input,
1403 PasswordInfo** found_password) { 1408 PasswordInfo** found_password) {
1404 if (!node.isElementNode()) 1409 if (!node.isElementNode())
1405 return false; 1410 return false;
1406 1411
1407 blink::WebElement element = node.toConst<blink::WebElement>(); 1412 blink::WebElement element = node.toConst<blink::WebElement>();
1408 if (!element.hasHTMLTagName("input")) 1413 if (!element.hasHTMLTagName("input"))
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1442 provisionally_saved_form_ = password_form.Pass(); 1447 provisionally_saved_form_ = password_form.Pass();
1443 } 1448 }
1444 1449
1445 bool PasswordAutofillAgent::ProvisionallySavedPasswordIsValid() { 1450 bool PasswordAutofillAgent::ProvisionallySavedPasswordIsValid() {
1446 return provisionally_saved_form_ && 1451 return provisionally_saved_form_ &&
1447 !provisionally_saved_form_->username_value.empty() && 1452 !provisionally_saved_form_->username_value.empty() &&
1448 !(provisionally_saved_form_->password_value.empty() && 1453 !(provisionally_saved_form_->password_value.empty() &&
1449 provisionally_saved_form_->new_password_value.empty()); 1454 provisionally_saved_form_->new_password_value.empty());
1450 } 1455 }
1451 1456
1457 void PasswordAutofillAgent::FocusedNodeChanged(const blink::WebNode& node) {
1458 if (node.isNull() || !node.isElementNode())
1459 return;
1460
1461 blink::WebElement web_element = node.toConst<blink::WebElement>();
1462 const blink::WebInputElement* element = toWebInputElement(&web_element);
1463
1464 // If |element| is a username element then add it to username elements that
1465 // had focus.
1466 if (element && element->isTextField() &&
1467 login_to_password_info_.find(*element) != login_to_password_info_.end()) {
1468 had_focus_username_fields_.insert(*element);
1469 }
1470 }
1471
1452 // LegacyPasswordAutofillAgent ------------------------------------------------- 1472 // LegacyPasswordAutofillAgent -------------------------------------------------
1453 1473
1454 PasswordAutofillAgent::LegacyPasswordAutofillAgent::LegacyPasswordAutofillAgent( 1474 PasswordAutofillAgent::LegacyPasswordAutofillAgent::LegacyPasswordAutofillAgent(
1455 content::RenderView* render_view, 1475 content::RenderView* render_view,
1456 PasswordAutofillAgent* agent) 1476 PasswordAutofillAgent* agent)
1457 : content::RenderViewObserver(render_view), agent_(agent) { 1477 : content::RenderViewObserver(render_view), agent_(agent) {
1458 } 1478 }
1459 1479
1460 PasswordAutofillAgent::LegacyPasswordAutofillAgent:: 1480 PasswordAutofillAgent::LegacyPasswordAutofillAgent::
1461 ~LegacyPasswordAutofillAgent() { 1481 ~LegacyPasswordAutofillAgent() {
(...skipping 10 matching lines...) Expand all
1472 void PasswordAutofillAgent::LegacyPasswordAutofillAgent::DidStopLoading() { 1492 void PasswordAutofillAgent::LegacyPasswordAutofillAgent::DidStopLoading() {
1473 agent_->DidStopLoading(); 1493 agent_->DidStopLoading();
1474 } 1494 }
1475 1495
1476 void PasswordAutofillAgent::LegacyPasswordAutofillAgent:: 1496 void PasswordAutofillAgent::LegacyPasswordAutofillAgent::
1477 DidStartProvisionalLoad(blink::WebLocalFrame* navigated_frame) { 1497 DidStartProvisionalLoad(blink::WebLocalFrame* navigated_frame) {
1478 agent_->LegacyDidStartProvisionalLoad(navigated_frame); 1498 agent_->LegacyDidStartProvisionalLoad(navigated_frame);
1479 } 1499 }
1480 1500
1481 } // namespace autofill 1501 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698