Chromium Code Reviews| 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 2e747a3f7c4bfe46bd66f7da3b5b5863253b8820..eff747b50cb646d3d2abf1f2e412acdf7ac1697e 100644 |
| --- a/components/autofill/content/renderer/password_autofill_agent.cc |
| +++ b/components/autofill/content/renderer/password_autofill_agent.cc |
| @@ -26,6 +26,7 @@ |
| #include "third_party/WebKit/public/web/WebInputEvent.h" |
| #include "third_party/WebKit/public/web/WebNode.h" |
| #include "third_party/WebKit/public/web/WebNodeList.h" |
| +#include "third_party/WebKit/public/web/WebPasswordFormData.h" |
| #include "third_party/WebKit/public/web/WebSecurityOrigin.h" |
| #include "third_party/WebKit/public/web/WebUserGestureIndicator.h" |
| #include "third_party/WebKit/public/web/WebView.h" |
| @@ -181,6 +182,12 @@ bool DoUsernamesMatch(const base::string16& username1, |
| return StartsWith(username1, username2, true); |
| } |
| +bool IsElementAutocompletable(const blink::WebInputElement& element) { |
|
Ilya Sherman
2013/12/27 23:17:09
nit: Docs, please.
jww
2013/12/31 00:33:05
Done.
|
| + return IsElementEditable(element) && |
| + (ShouldIgnoreAutocompleteOffForPasswordFields() || |
| + element.autoComplete()); |
| +} |
| + |
| } // namespace |
| //////////////////////////////////////////////////////////////////////////////// |
| @@ -250,9 +257,7 @@ bool PasswordAutofillAgent::TextDidChangeInTextField( |
| if (iter->second.fill_data.wait_for_username) |
| return false; |
| - if (!IsElementEditable(element) || !element.isText() || |
| - (!ShouldIgnoreAutocompleteOffForPasswordFields() && |
| - !element.autoComplete())) { |
| + if (!element.isText() || !IsElementAutocompletable(element)) { |
| return false; |
| } |
| @@ -325,6 +330,12 @@ bool PasswordAutofillAgent::ShowSuggestions( |
| if (iter == login_to_password_info_.end()) |
| return false; |
| + // If autocomplete='off' is set on the form, we don't want to actually show a |
| + // suggestion dialog, so we return "true," prentending we've done so. |
|
Ilya Sherman
2013/12/27 23:17:09
nit: "prentending" -> "pretending"
Ilya Sherman
2013/12/27 23:17:09
nit: Please avoid the pronoun "we" in comments (ac
jww
2013/12/31 00:33:05
Done.
|
| + if (!IsElementAutocompletable(element) || |
| + !IsElementAutocompletable(iter->second.password_field)) |
| + return true; |
| + |
| return ShowSuggestionPopup(iter->second.fill_data, element); |
| } |
| @@ -645,16 +656,12 @@ void PasswordAutofillAgent::FillFormOnPasswordRecieved( |
| return; |
| // If we can't modify the password, don't try to set the username |
| - if (!IsElementEditable(password_element) || |
| - (!ShouldIgnoreAutocompleteOffForPasswordFields() && |
| - !password_element.autoComplete())) |
| + if (!IsElementAutocompletable(password_element)) |
| return; |
| // Try to set the username to the preferred name, but only if the field |
| // can be set and isn't prefilled. |
| - if (IsElementEditable(username_element) && |
| - (ShouldIgnoreAutocompleteOffForPasswordFields() || |
| - username_element.autoComplete()) && |
| + if (IsElementAutocompletable(username_element) && |
| username_element.value().isEmpty()) { |
| // TODO(tkent): Check maxlength and pattern. |
| username_element.setValue(fill_data.basic_data.fields[0].value); |
| @@ -722,16 +729,12 @@ bool PasswordAutofillAgent::FillUserNameAndPassword( |
| // fields. |
| // Don't fill username if password can't be set. |
| - if (!IsElementEditable(*password_element) || |
| - (!ShouldIgnoreAutocompleteOffForPasswordFields() && |
| - !password_element->autoComplete())) { |
| + if (!IsElementAutocompletable(*password_element)) { |
| return false; |
| } |
| // Input matches the username, fill in required values. |
| - if (IsElementEditable(*username_element) && |
| - (ShouldIgnoreAutocompleteOffForPasswordFields() || |
| - username_element->autoComplete())) { |
| + if (IsElementAutocompletable(*username_element)) { |
| username_element->setValue(username); |
| SetElementAutofilled(username_element, true); |