blob: bdd097172835e3c4ce553ec237518d8501e5261c [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/autofill/browser/password_autofill_manager.h"
#include "components/autofill/common/autofill_messages.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
#include "ui/base/keycodes/keyboard_codes.h"
namespace autofill {
////////////////////////////////////////////////////////////////////////////////
// PasswordAutofillManager, public:
PasswordAutofillManager::PasswordAutofillManager(
content::WebContents* web_contents) : web_contents_(web_contents) {
}
PasswordAutofillManager::~PasswordAutofillManager() {
}
bool PasswordAutofillManager::DidAcceptAutofillSuggestion(
const FormFieldData& field,
const base::string16& value) {
PasswordFormFillData password;
if (!FindLoginInfo(field, &password))
return false;
if (WillFillUserNameAndPassword(value, password)) {
if (web_contents_) {
content::RenderViewHost* render_view_host =
web_contents_->GetRenderViewHost();
render_view_host->Send(new AutofillMsg_AcceptPasswordAutofillSuggestion(
render_view_host->GetRoutingID(),
value));
}
return true;
}
return false;
}
void PasswordAutofillManager::AddPasswordFormMapping(
const FormFieldData& username_element,
const PasswordFormFillData& password) {
login_to_password_info_[username_element] = password;
}
void PasswordAutofillManager::Reset() {
login_to_password_info_.clear();
}
////////////////////////////////////////////////////////////////////////////////
// PasswordAutofillManager, private:
bool PasswordAutofillManager::WillFillUserNameAndPassword(
const base::string16& current_username,
const PasswordFormFillData& fill_data) {
// Look for any suitable matches to current field text.
if (fill_data.basic_data.fields[0].value == current_username) {
return true;
} else {
// Scan additional logins for a match.
PasswordFormFillData::LoginCollection::const_iterator iter;
for (iter = fill_data.additional_logins.begin();
iter != fill_data.additional_logins.end(); ++iter) {
if (iter->first == current_username)
return true;
}
}
return false;
}
bool PasswordAutofillManager::FindLoginInfo(
const FormFieldData& field,
PasswordFormFillData* found_password) {
LoginToPasswordInfoMap::iterator iter = login_to_password_info_.find(field);
if (iter == login_to_password_info_.end())
return false;
*found_password = iter->second;
return true;
}
} // namespace autofill