Index: chrome/browser/autofill/password_autofill_manager.cc |
diff --git a/chrome/browser/autofill/password_autofill_manager.cc b/chrome/browser/autofill/password_autofill_manager.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e7ae5bbf2bcacf617e9133b79842c88d590e42f4 |
--- /dev/null |
+++ b/chrome/browser/autofill/password_autofill_manager.cc |
@@ -0,0 +1,101 @@ |
+// 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 "chrome/browser/autofill/password_autofill_manager.h" |
+#include "chrome/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" |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+// PasswordAutofillManager, public: |
+ |
+PasswordAutofillManager::PasswordAutofillManager( |
+ content::WebContents* web_contents) : web_contents_(web_contents) { |
Ilya Sherman
2012/04/02 22:07:29
nit: Can we store a pointer just to the RenderView
csharp
2012/04/03 12:25:55
Ya, I had passed in a pointer to the RenderViewHos
|
+} |
+ |
+PasswordAutofillManager::~PasswordAutofillManager() { |
+} |
+ |
+bool PasswordAutofillManager::DidAcceptAutofillSuggestion( |
+ const webkit::forms::FormField& field, |
+ const string16& value) { |
+ webkit::forms::FormField input; |
+ webkit::forms::PasswordFormFillData password; |
+ if (!FindLoginInfo(field, &input, &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; |
+} |
+ |
+bool PasswordAutofillManager::DidSelectAutofillSuggestion( |
+ const webkit::forms::FormField& field) { |
+ webkit::forms::FormField input; |
+ webkit::forms::PasswordFormFillData password; |
+ return FindLoginInfo(field, &input, &password); |
+} |
+ |
+bool PasswordAutofillManager::DidClearAutofillSelection( |
+ const webkit::forms::FormField& field) { |
+ webkit::forms::FormField input; |
+ webkit::forms::PasswordFormFillData password; |
+ return FindLoginInfo(field, &input, &password); |
+} |
+ |
+void PasswordAutofillManager::AddPasswordFormMapping( |
+ const webkit::forms::FormField& username_element, |
+ const webkit::forms::PasswordFormFillData& password) { |
+ login_to_password_info_[username_element] = password; |
+} |
+ |
+void PasswordAutofillManager::Reset() { |
+ login_to_password_info_.clear(); |
+} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+// PasswordAutofillManager, private: |
+ |
+bool PasswordAutofillManager::WillFillUserNameAndPassword( |
+ const string16& current_username, |
+ const webkit::forms::PasswordFormFillData& fill_data) { |
+ |
Ilya Sherman
2012/04/02 22:07:29
nit: No need for this blank line (line 73)
csharp
2012/04/03 12:25:55
Done.
|
+ // 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. |
+ webkit::forms::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 webkit::forms::FormField& field, |
+ webkit::forms::FormField* found_input, |
+ webkit::forms::PasswordFormFillData* found_password) { |
+ LoginToPasswordInfoMap::iterator iter = login_to_password_info_.find(field); |
+ if (iter == login_to_password_info_.end()) |
+ return false; |
+ |
+ *found_input = field; |
Ilya Sherman
2012/04/02 22:07:29
nit: It looks like the caller always knows the val
csharp
2012/04/03 12:25:55
Done.
|
+ *found_password = iter->second; |
+ return true; |
+} |