Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/renderer/autofill/password_autofill_manager.h" | 5 #include "chrome/renderer/autofill/password_autofill_manager.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.h" | 9 #include "base/message_loop.h" |
| 10 #include "chrome/common/autofill_messages.h" | 10 #include "chrome/common/autofill_messages.h" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 48 static bool FindFormInputElements(WebKit::WebFormElement* fe, | 48 static bool FindFormInputElements(WebKit::WebFormElement* fe, |
| 49 const webkit::forms::FormData& data, | 49 const webkit::forms::FormData& data, |
| 50 FormElements* result) { | 50 FormElements* result) { |
| 51 // Loop through the list of elements we need to find on the form in order to | 51 // Loop through the list of elements we need to find on the form in order to |
| 52 // autofill it. If we don't find any one of them, abort processing this | 52 // autofill it. If we don't find any one of them, abort processing this |
| 53 // form; it can't be the right one. | 53 // form; it can't be the right one. |
| 54 for (size_t j = 0; j < data.fields.size(); j++) { | 54 for (size_t j = 0; j < data.fields.size(); j++) { |
| 55 WebKit::WebVector<WebKit::WebNode> temp_elements; | 55 WebKit::WebVector<WebKit::WebNode> temp_elements; |
| 56 fe->getNamedElements(data.fields[j].name, temp_elements); | 56 fe->getNamedElements(data.fields[j].name, temp_elements); |
| 57 | 57 |
| 58 // It's true if the form hasn't the user_name elemtnt for the password. | |
| 59 // In this case, we just skip and continue to autofill, | |
| 60 // because we'd like to autofill the password if user_name doesn't exist. | |
| 61 if (temp_elements.size() == 0) { | |
| 62 continue; | |
| 63 } | |
|
Ilya Sherman
2012/03/08 23:48:49
This doesn't seem like the right change. We shoul
Yumikiyo Osanai
2012/03/20 15:53:37
Done.
| |
| 64 | |
| 58 // Match the first input element, if any. | 65 // Match the first input element, if any. |
| 59 // |getNamedElements| may return non-input elements where the names match, | 66 // |getNamedElements| may return non-input elements where the names match, |
| 60 // so the results are filtered for input elements. | 67 // so the results are filtered for input elements. |
| 61 // If more than one match is made, then we have ambiguity (due to misuse | 68 // If more than one match is made, then we have ambiguity (due to misuse |
| 62 // of "name" attribute) so is it considered not found. | 69 // of "name" attribute) so is it considered not found. |
| 63 bool found_input = false; | 70 bool found_input = false; |
| 64 for (size_t i = 0; i < temp_elements.size(); ++i) { | 71 for (size_t i = 0; i < temp_elements.size(); ++i) { |
| 65 if (temp_elements[i].to<WebKit::WebElement>().hasTagName("input")) { | 72 if (temp_elements[i].to<WebKit::WebElement>().hasTagName("input")) { |
| 66 // Check for a non-unique match. | 73 // Check for a non-unique match. |
| 67 if (found_input) { | 74 if (found_input) { |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 435 | 442 |
| 436 // We might have already filled this form if there are two <form> elements | 443 // We might have already filled this form if there are two <form> elements |
| 437 // with identical markup. | 444 // with identical markup. |
| 438 if (login_to_password_info_.find(username_element) != | 445 if (login_to_password_info_.find(username_element) != |
| 439 login_to_password_info_.end()) | 446 login_to_password_info_.end()) |
| 440 continue; | 447 continue; |
| 441 | 448 |
| 442 PasswordInfo password_info; | 449 PasswordInfo password_info; |
| 443 password_info.fill_data = form_data; | 450 password_info.fill_data = form_data; |
| 444 password_info.password_field = password_element; | 451 password_info.password_field = password_element; |
| 445 login_to_password_info_[username_element] = password_info; | 452 login_to_password_info_[password_element] = password_info; |
| 446 } | 453 } |
| 447 } | 454 } |
| 448 | 455 |
| 449 //////////////////////////////////////////////////////////////////////////////// | 456 //////////////////////////////////////////////////////////////////////////////// |
| 450 // PasswordAutofillManager, private: | 457 // PasswordAutofillManager, private: |
| 451 | 458 |
| 452 void PasswordAutofillManager::GetSuggestions( | 459 void PasswordAutofillManager::GetSuggestions( |
| 453 const webkit::forms::PasswordFormFillData& fill_data, | 460 const webkit::forms::PasswordFormFillData& fill_data, |
| 454 const string16& input, | 461 const string16& input, |
| 455 std::vector<string16>* suggestions) { | 462 std::vector<string16>* suggestions) { |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 586 LoginToPasswordInfoMap::iterator iter = login_to_password_info_.find(input); | 593 LoginToPasswordInfoMap::iterator iter = login_to_password_info_.find(input); |
| 587 if (iter == login_to_password_info_.end()) | 594 if (iter == login_to_password_info_.end()) |
| 588 return false; | 595 return false; |
| 589 | 596 |
| 590 *found_input = input; | 597 *found_input = input; |
| 591 *found_password = iter->second; | 598 *found_password = iter->second; |
| 592 return true; | 599 return true; |
| 593 } | 600 } |
| 594 | 601 |
| 595 } // namespace autofill | 602 } // namespace autofill |
| OLD | NEW |