1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/autofill/password_autofill_manager.h"
6 #include "chrome/common/autofill_messages.h"
7 #include "content/public/browser/render_view_host.h"
8 #include "content/public/browser/web_contents.h"
9 #include "ui/base/keycodes/keyboard_codes.h"
11 ////////////////////////////////////////////////////////////////////////////////
12 // PasswordAutofillManager, public:
14 PasswordAutofillManager::PasswordAutofillManager(
15 content::WebContents
* web_contents
) : web_contents_(web_contents
) {
18 PasswordAutofillManager::~PasswordAutofillManager() {
21 bool PasswordAutofillManager::DidAcceptAutofillSuggestion(
22 const FormFieldData
& field
,
23 const string16
& value
) {
24 PasswordFormFillData password
;
25 if (!FindLoginInfo(field
, &password
))
28 if (WillFillUserNameAndPassword(value
, password
)) {
30 content::RenderViewHost
* render_view_host
=
31 web_contents_
->GetRenderViewHost();
32 render_view_host
->Send(new AutofillMsg_AcceptPasswordAutofillSuggestion(
33 render_view_host
->GetRoutingID(),
42 void PasswordAutofillManager::AddPasswordFormMapping(
43 const FormFieldData
& username_element
,
44 const PasswordFormFillData
& password
) {
45 login_to_password_info_
[username_element
] = password
;
48 void PasswordAutofillManager::Reset() {
49 login_to_password_info_
.clear();
52 ////////////////////////////////////////////////////////////////////////////////
53 // PasswordAutofillManager, private:
55 bool PasswordAutofillManager::WillFillUserNameAndPassword(
56 const string16
& current_username
,
57 const PasswordFormFillData
& fill_data
) {
58 // Look for any suitable matches to current field text.
59 if (fill_data
.basic_data
.fields
[0].value
== current_username
) {
62 // Scan additional logins for a match.
63 PasswordFormFillData::LoginCollection::const_iterator iter
;
64 for (iter
= fill_data
.additional_logins
.begin();
65 iter
!= fill_data
.additional_logins
.end(); ++iter
) {
66 if (iter
->first
== current_username
)
74 bool PasswordAutofillManager::FindLoginInfo(
75 const FormFieldData
& field
,
76 PasswordFormFillData
* found_password
) {
77 LoginToPasswordInfoMap::iterator iter
= login_to_password_info_
.find(field
);
78 if (iter
== login_to_password_info_
.end())
81 *found_password
= iter
->second
;