| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/password_manager/password_store_mac.h" | 5 #include "chrome/browser/password_manager/password_store_mac.h" |
| 6 #include "chrome/browser/password_manager/password_store_mac_internal.h" | 6 #include "chrome/browser/password_manager/password_store_mac_internal.h" |
| 7 | 7 |
| 8 #include <CoreServices/CoreServices.h> | 8 #include <CoreServices/CoreServices.h> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <string> | 10 #include <string> |
| 11 #include <vector> | 11 #include <vector> |
| 12 | 12 |
| 13 #include "base/logging.h" | 13 #include "base/logging.h" |
| 14 #include "base/mac/mac_util.h" | 14 #include "base/mac/mac_util.h" |
| 15 #include "base/message_loop.h" | 15 #include "base/message_loop.h" |
| 16 #include "base/stl_util.h" | 16 #include "base/stl_util.h" |
| 17 #include "base/string_util.h" | 17 #include "base/string_util.h" |
| 18 #include "base/task.h" | 18 #include "base/task.h" |
| 19 #include "base/utf_string_conversions.h" | 19 #include "base/utf_string_conversions.h" |
| 20 #include "chrome/browser/keychain_mac.h" | 20 #include "chrome/browser/keychain_mac.h" |
| 21 #include "chrome/browser/password_manager/login_database.h" | 21 #include "chrome/browser/password_manager/login_database.h" |
| 22 #include "chrome/browser/password_manager/password_store_change.h" | 22 #include "chrome/browser/password_manager/password_store_change.h" |
| 23 #include "chrome/common/chrome_notification_types.h" | 23 #include "chrome/common/chrome_notification_types.h" |
| 24 #include "content/public/browser/notification_service.h" | 24 #include "content/public/browser/notification_service.h" |
| 25 | 25 |
| 26 using webkit_glue::PasswordForm; | 26 using webkit::forms::PasswordForm; |
| 27 | 27 |
| 28 // Utility class to handle the details of constructing and running a keychain | 28 // Utility class to handle the details of constructing and running a keychain |
| 29 // search from a set of attributes. | 29 // search from a set of attributes. |
| 30 class KeychainSearch { | 30 class KeychainSearch { |
| 31 public: | 31 public: |
| 32 explicit KeychainSearch(const MacKeychain& keychain); | 32 explicit KeychainSearch(const MacKeychain& keychain); |
| 33 ~KeychainSearch(); | 33 ~KeychainSearch(); |
| 34 | 34 |
| 35 // Sets up a keycahin search based on an non "null" (NULL for char*, | 35 // Sets up a keycahin search based on an non "null" (NULL for char*, |
| 36 // The appropriate "Any" entry for other types) arguments. | 36 // The appropriate "Any" entry for other types) arguments. |
| (...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 for (std::vector<SecKeychainItemRef>::iterator i = matches.begin() + 1; | 634 for (std::vector<SecKeychainItemRef>::iterator i = matches.begin() + 1; |
| 635 i != matches.end(); ++i) { | 635 i != matches.end(); ++i) { |
| 636 keychain_->Free(*i); | 636 keychain_->Free(*i); |
| 637 } | 637 } |
| 638 return matches[0]; | 638 return matches[0]; |
| 639 } | 639 } |
| 640 | 640 |
| 641 std::vector<SecKeychainItemRef> | 641 std::vector<SecKeychainItemRef> |
| 642 MacKeychainPasswordFormAdapter::MatchingKeychainItems( | 642 MacKeychainPasswordFormAdapter::MatchingKeychainItems( |
| 643 const std::string& signon_realm, | 643 const std::string& signon_realm, |
| 644 webkit_glue::PasswordForm::Scheme scheme, | 644 webkit::forms::PasswordForm::Scheme scheme, |
| 645 const char* path, const char* username) { | 645 const char* path, const char* username) { |
| 646 std::vector<SecKeychainItemRef> matches; | 646 std::vector<SecKeychainItemRef> matches; |
| 647 | 647 |
| 648 std::string server; | 648 std::string server; |
| 649 std::string security_domain; | 649 std::string security_domain; |
| 650 int port; | 650 int port; |
| 651 bool is_secure; | 651 bool is_secure; |
| 652 if (!ExtractSignonRealmComponents(signon_realm, &server, &port, | 652 if (!ExtractSignonRealmComponents(signon_realm, &server, &port, |
| 653 &is_secure, &security_domain)) { | 653 &is_secure, &security_domain)) { |
| 654 // TODO(stuartmorgan): Proxies will currently fail here, since their | 654 // TODO(stuartmorgan): Proxies will currently fail here, since their |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 880 } | 880 } |
| 881 content::NotificationService::current()->Notify( | 881 content::NotificationService::current()->Notify( |
| 882 chrome::NOTIFICATION_LOGINS_CHANGED, | 882 chrome::NOTIFICATION_LOGINS_CHANGED, |
| 883 content::Source<PasswordStore>(this), | 883 content::Source<PasswordStore>(this), |
| 884 content::Details<PasswordStoreChangeList>(&changes)); | 884 content::Details<PasswordStoreChangeList>(&changes)); |
| 885 } | 885 } |
| 886 } | 886 } |
| 887 } | 887 } |
| 888 | 888 |
| 889 void PasswordStoreMac::GetLoginsImpl(GetLoginsRequest* request, | 889 void PasswordStoreMac::GetLoginsImpl(GetLoginsRequest* request, |
| 890 const webkit_glue::PasswordForm& form) { | 890 const webkit::forms::PasswordForm& form) { |
| 891 MacKeychainPasswordFormAdapter keychain_adapter(keychain_.get()); | 891 MacKeychainPasswordFormAdapter keychain_adapter(keychain_.get()); |
| 892 std::vector<PasswordForm*> keychain_forms = | 892 std::vector<PasswordForm*> keychain_forms = |
| 893 keychain_adapter.PasswordsFillingForm(form); | 893 keychain_adapter.PasswordsFillingForm(form); |
| 894 | 894 |
| 895 std::vector<PasswordForm*> database_forms; | 895 std::vector<PasswordForm*> database_forms; |
| 896 login_metadata_db_->GetLogins(form, &database_forms); | 896 login_metadata_db_->GetLogins(form, &database_forms); |
| 897 | 897 |
| 898 std::vector<PasswordForm*>& merged_forms = request->value; | 898 std::vector<PasswordForm*>& merged_forms = request->value; |
| 899 internal_keychain_helpers::MergePasswordForms(&keychain_forms, | 899 internal_keychain_helpers::MergePasswordForms(&keychain_forms, |
| 900 &database_forms, | 900 &database_forms, |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 953 | 953 |
| 954 bool PasswordStoreMac::AddToKeychainIfNecessary(const PasswordForm& form) { | 954 bool PasswordStoreMac::AddToKeychainIfNecessary(const PasswordForm& form) { |
| 955 if (form.blacklisted_by_user) { | 955 if (form.blacklisted_by_user) { |
| 956 return true; | 956 return true; |
| 957 } | 957 } |
| 958 MacKeychainPasswordFormAdapter keychainAdapter(keychain_.get()); | 958 MacKeychainPasswordFormAdapter keychainAdapter(keychain_.get()); |
| 959 return keychainAdapter.AddPassword(form); | 959 return keychainAdapter.AddPassword(form); |
| 960 } | 960 } |
| 961 | 961 |
| 962 bool PasswordStoreMac::DatabaseHasFormMatchingKeychainForm( | 962 bool PasswordStoreMac::DatabaseHasFormMatchingKeychainForm( |
| 963 const webkit_glue::PasswordForm& form) { | 963 const webkit::forms::PasswordForm& form) { |
| 964 bool has_match = false; | 964 bool has_match = false; |
| 965 std::vector<PasswordForm*> database_forms; | 965 std::vector<PasswordForm*> database_forms; |
| 966 login_metadata_db_->GetLogins(form, &database_forms); | 966 login_metadata_db_->GetLogins(form, &database_forms); |
| 967 for (std::vector<PasswordForm*>::iterator i = database_forms.begin(); | 967 for (std::vector<PasswordForm*>::iterator i = database_forms.begin(); |
| 968 i != database_forms.end(); ++i) { | 968 i != database_forms.end(); ++i) { |
| 969 if (internal_keychain_helpers::FormsMatchForMerge(form, **i) && | 969 if (internal_keychain_helpers::FormsMatchForMerge(form, **i) && |
| 970 (*i)->origin == form.origin) { | 970 (*i)->origin == form.origin) { |
| 971 has_match = true; | 971 has_match = true; |
| 972 break; | 972 break; |
| 973 } | 973 } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1011 owned_keychain_adapter.SetFindsOnlyOwnedItems(true); | 1011 owned_keychain_adapter.SetFindsOnlyOwnedItems(true); |
| 1012 for (std::vector<PasswordForm*>::const_iterator i = forms.begin(); | 1012 for (std::vector<PasswordForm*>::const_iterator i = forms.begin(); |
| 1013 i != forms.end(); ++i) { | 1013 i != forms.end(); ++i) { |
| 1014 owned_keychain_adapter.RemovePassword(**i); | 1014 owned_keychain_adapter.RemovePassword(**i); |
| 1015 } | 1015 } |
| 1016 } | 1016 } |
| 1017 | 1017 |
| 1018 void PasswordStoreMac::CreateNotificationService() { | 1018 void PasswordStoreMac::CreateNotificationService() { |
| 1019 notification_service_.reset(content::NotificationService::Create()); | 1019 notification_service_.reset(content::NotificationService::Create()); |
| 1020 } | 1020 } |
| OLD | NEW |