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

Unified Diff: components/autofill/core/browser/password_autofill_manager.cc

Issue 184103016: Autofill: Refactoring to support fetching password after a username is selected (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Refactor PasswordAutofillManager in password_manager component. Created 6 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: components/autofill/core/browser/password_autofill_manager.cc
diff --git a/components/autofill/core/browser/password_autofill_manager.cc b/components/autofill/core/browser/password_autofill_manager.cc
index 730c10e49d5d1b2282440dcf3dd406593cd3977b..cebdda6c4e3c4ae6c68f8edbc751c92ad618973e 100644
--- a/components/autofill/core/browser/password_autofill_manager.cc
+++ b/components/autofill/core/browser/password_autofill_manager.cc
@@ -4,35 +4,36 @@
#include "base/logging.h"
#include "components/autofill/core/browser/autofill_driver.h"
-#include "components/autofill/core/browser/password_autofill_manager.h"
+#include "components/password_manager/core/browser/password_autofill_manager.h"
#include "ui/events/keycodes/keyboard_codes.h"
-namespace autofill {
-
////////////////////////////////////////////////////////////////////////////////
// PasswordAutofillManager, public:
PasswordAutofillManager::PasswordAutofillManager(
- AutofillDriver* autofill_driver) : autofill_driver_(autofill_driver) {
+ PasswordManagerClient* password_manager_client,
+ AutofillDriver* autofill_driver)
+ : password_manager_client_(password_manager_client),
+ autofill_driver_(autofill_driver) {
+ DCHECK(password_manager_client);
DCHECK(autofill_driver);
}
PasswordAutofillManager::~PasswordAutofillManager() {
}
-bool PasswordAutofillManager::DidAcceptAutofillSuggestion(
+void PasswordAutofillManager::DidAcceptAutofillSuggestion(
const FormFieldData& field,
const base::string16& username) {
- PasswordFormFillData password;
- if (!FindLoginInfo(field, &password))
- return false;
-
- if (WillFillUserNameAndPassword(username, password)) {
- autofill_driver_->RendererShouldAcceptPasswordAutofillSuggestion(username);
- return true;
+ PasswordFormFillData fill_data;
+ base::string16 password;
+ if (FindLoginInfo(field, &fill_data) &&
+ GetPasswordForUsername(username, fill_data, &password)) {
+ autofill_driver_->RendererShouldAcceptPasswordAutofillSuggestion(
+ username, password);
+ return;
}
-
- return false;
+ NOTREACHED();
}
void PasswordAutofillManager::AddPasswordFormMapping(
@@ -48,19 +49,28 @@ void PasswordAutofillManager::Reset() {
////////////////////////////////////////////////////////////////////////////////
// PasswordAutofillManager, private:
-bool PasswordAutofillManager::WillFillUserNameAndPassword(
+bool PasswordAutofillManager::GetPasswordForUsername(
const base::string16& current_username,
- const PasswordFormFillData& fill_data) {
+ const PasswordFormFillData& fill_data,
+ base::string16* password) {
+ // TODO(dubroy): When password access requires some kind of authentication
+ // (e.g. Keychain access on Mac OS), use |password_manager_client_| here to
+ // fetch the actual password. See crbug.com/178358 for more context.
+
// Look for any suitable matches to current field text.
- if (fill_data.basic_data.fields[0].value == current_username)
+ if (fill_data.basic_data.fields[0].value == current_username) {
+ *password = fill_data.basic_data.fields[1].value;
return true;
+ }
// Scan additional logins for a match.
for (PasswordFormFillData::LoginCollection::const_iterator iter =
fill_data.additional_logins.begin();
iter != fill_data.additional_logins.end(); ++iter) {
- if (iter->first == current_username)
- return true;
+ if (iter->first == current_username) {
+ *password = iter->second.password;
+ return true;
+ }
}
for (PasswordFormFillData::UsernamesCollection::const_iterator usernames_iter
@@ -68,8 +78,10 @@ bool PasswordAutofillManager::WillFillUserNameAndPassword(
usernames_iter != fill_data.other_possible_usernames.end();
++usernames_iter) {
for (size_t i = 0; i < usernames_iter->second.size(); ++i) {
- if (usernames_iter->second[i] == current_username)
+ if (usernames_iter->second[i] == current_username) {
+ *password = usernames_iter->first.password;
return true;
+ }
}
}
@@ -86,5 +98,3 @@ bool PasswordAutofillManager::FindLoginInfo(
*found_password = iter->second;
return true;
}
-
-} // namespace autofill

Powered by Google App Engine
This is Rietveld 408576698