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..23f1d38a0ac8ff66832b0c4c7264bde49c96877d |
--- /dev/null |
+++ b/chrome/browser/autofill/password_autofill_manager.cc |
@@ -0,0 +1,92 @@ |
+// 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 "ui/base/keycodes/keyboard_codes.h" |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+// PasswordAutofillManager, public: |
+ |
+PasswordAutofillManager::PasswordAutofillManager( |
+ content::RenderViewHost* render_view_host) |
+ : render_view_host_(render_view_host) { |
+} |
+ |
+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 (render_view_host_) { |
+ render_view_host_->Send(new AutofillMsg_AcceptPasswordAutofillSuggestion( |
+ render_view_host_->GetRoutingID(), |
+ value)); |
+ } |
+ return true; |
+ } |
+ |
+ return false; |
+} |
+ |
+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) { |
+ |
+ // 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; |
+ *found_password = iter->second; |
+ return true; |
+} |