OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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/callback.h" | 13 #include "base/callback.h" |
14 #include "base/logging.h" | 14 #include "base/logging.h" |
15 #include "base/mac/mac_logging.h" | 15 #include "base/mac/mac_logging.h" |
16 #include "base/mac/mac_util.h" | 16 #include "base/mac/mac_util.h" |
17 #include "base/message_loop/message_loop.h" | 17 #include "base/message_loop/message_loop.h" |
18 #include "base/stl_util.h" | 18 #include "base/stl_util.h" |
19 #include "base/strings/string_util.h" | 19 #include "base/strings/string_util.h" |
20 #include "base/strings/utf_string_conversions.h" | 20 #include "base/strings/utf_string_conversions.h" |
21 #include "chrome/browser/chrome_notification_types.h" | 21 #include "chrome/browser/chrome_notification_types.h" |
22 #include "chrome/browser/password_manager/login_database.h" | 22 #include "chrome/browser/password_manager/login_database.h" |
23 #include "chrome/browser/password_manager/password_store_change.h" | 23 #include "chrome/browser/password_manager/password_store_change.h" |
24 #include "content/public/browser/notification_service.h" | 24 #include "content/public/browser/notification_service.h" |
25 #include "crypto/apple_keychain.h" | 25 #include "crypto/apple_keychain.h" |
26 | 26 |
| 27 using autofill::PasswordForm; |
27 using crypto::AppleKeychain; | 28 using crypto::AppleKeychain; |
28 using content::PasswordForm; | |
29 | 29 |
30 // Utility class to handle the details of constructing and running a keychain | 30 // Utility class to handle the details of constructing and running a keychain |
31 // search from a set of attributes. | 31 // search from a set of attributes. |
32 class KeychainSearch { | 32 class KeychainSearch { |
33 public: | 33 public: |
34 explicit KeychainSearch(const AppleKeychain& keychain); | 34 explicit KeychainSearch(const AppleKeychain& keychain); |
35 ~KeychainSearch(); | 35 ~KeychainSearch(); |
36 | 36 |
37 // Sets up a keycahin search based on an non "null" (NULL for char*, | 37 // Sets up a keycahin search based on an non "null" (NULL for char*, |
38 // The appropriate "Any" entry for other types) arguments. | 38 // The appropriate "Any" entry for other types) arguments. |
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
637 for (std::vector<SecKeychainItemRef>::iterator i = matches.begin() + 1; | 637 for (std::vector<SecKeychainItemRef>::iterator i = matches.begin() + 1; |
638 i != matches.end(); ++i) { | 638 i != matches.end(); ++i) { |
639 keychain_->Free(*i); | 639 keychain_->Free(*i); |
640 } | 640 } |
641 return matches[0]; | 641 return matches[0]; |
642 } | 642 } |
643 | 643 |
644 std::vector<SecKeychainItemRef> | 644 std::vector<SecKeychainItemRef> |
645 MacKeychainPasswordFormAdapter::MatchingKeychainItems( | 645 MacKeychainPasswordFormAdapter::MatchingKeychainItems( |
646 const std::string& signon_realm, | 646 const std::string& signon_realm, |
647 content::PasswordForm::Scheme scheme, | 647 autofill::PasswordForm::Scheme scheme, |
648 const char* path, const char* username) { | 648 const char* path, const char* username) { |
649 std::vector<SecKeychainItemRef> matches; | 649 std::vector<SecKeychainItemRef> matches; |
650 | 650 |
651 std::string server; | 651 std::string server; |
652 std::string security_domain; | 652 std::string security_domain; |
653 int port; | 653 int port; |
654 bool is_secure; | 654 bool is_secure; |
655 if (!ExtractSignonRealmComponents(signon_realm, &server, &port, | 655 if (!ExtractSignonRealmComponents(signon_realm, &server, &port, |
656 &is_secure, &security_domain)) { | 656 &is_secure, &security_domain)) { |
657 // TODO(stuartmorgan): Proxies will currently fail here, since their | 657 // TODO(stuartmorgan): Proxies will currently fail here, since their |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
885 } | 885 } |
886 content::NotificationService::current()->Notify( | 886 content::NotificationService::current()->Notify( |
887 chrome::NOTIFICATION_LOGINS_CHANGED, | 887 chrome::NOTIFICATION_LOGINS_CHANGED, |
888 content::Source<PasswordStore>(this), | 888 content::Source<PasswordStore>(this), |
889 content::Details<PasswordStoreChangeList>(&changes)); | 889 content::Details<PasswordStoreChangeList>(&changes)); |
890 } | 890 } |
891 } | 891 } |
892 } | 892 } |
893 | 893 |
894 void PasswordStoreMac::GetLoginsImpl( | 894 void PasswordStoreMac::GetLoginsImpl( |
895 const content::PasswordForm& form, | 895 const autofill::PasswordForm& form, |
896 const ConsumerCallbackRunner& callback_runner) { | 896 const ConsumerCallbackRunner& callback_runner) { |
897 MacKeychainPasswordFormAdapter keychain_adapter(keychain_.get()); | 897 MacKeychainPasswordFormAdapter keychain_adapter(keychain_.get()); |
898 std::vector<PasswordForm*> keychain_forms = | 898 std::vector<PasswordForm*> keychain_forms = |
899 keychain_adapter.PasswordsFillingForm(form); | 899 keychain_adapter.PasswordsFillingForm(form); |
900 | 900 |
901 std::vector<PasswordForm*> database_forms; | 901 std::vector<PasswordForm*> database_forms; |
902 login_metadata_db_->GetLogins(form, &database_forms); | 902 login_metadata_db_->GetLogins(form, &database_forms); |
903 | 903 |
904 std::vector<PasswordForm*> matched_forms; | 904 std::vector<PasswordForm*> matched_forms; |
905 internal_keychain_helpers::MergePasswordForms(&keychain_forms, | 905 internal_keychain_helpers::MergePasswordForms(&keychain_forms, |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
960 | 960 |
961 bool PasswordStoreMac::AddToKeychainIfNecessary(const PasswordForm& form) { | 961 bool PasswordStoreMac::AddToKeychainIfNecessary(const PasswordForm& form) { |
962 if (form.blacklisted_by_user) { | 962 if (form.blacklisted_by_user) { |
963 return true; | 963 return true; |
964 } | 964 } |
965 MacKeychainPasswordFormAdapter keychainAdapter(keychain_.get()); | 965 MacKeychainPasswordFormAdapter keychainAdapter(keychain_.get()); |
966 return keychainAdapter.AddPassword(form); | 966 return keychainAdapter.AddPassword(form); |
967 } | 967 } |
968 | 968 |
969 bool PasswordStoreMac::DatabaseHasFormMatchingKeychainForm( | 969 bool PasswordStoreMac::DatabaseHasFormMatchingKeychainForm( |
970 const content::PasswordForm& form) { | 970 const autofill::PasswordForm& form) { |
971 bool has_match = false; | 971 bool has_match = false; |
972 std::vector<PasswordForm*> database_forms; | 972 std::vector<PasswordForm*> database_forms; |
973 login_metadata_db_->GetLogins(form, &database_forms); | 973 login_metadata_db_->GetLogins(form, &database_forms); |
974 for (std::vector<PasswordForm*>::iterator i = database_forms.begin(); | 974 for (std::vector<PasswordForm*>::iterator i = database_forms.begin(); |
975 i != database_forms.end(); ++i) { | 975 i != database_forms.end(); ++i) { |
976 if (internal_keychain_helpers::FormsMatchForMerge(form, **i) && | 976 if (internal_keychain_helpers::FormsMatchForMerge(form, **i) && |
977 (*i)->origin == form.origin) { | 977 (*i)->origin == form.origin) { |
978 has_match = true; | 978 has_match = true; |
979 break; | 979 break; |
980 } | 980 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1018 owned_keychain_adapter.SetFindsOnlyOwnedItems(true); | 1018 owned_keychain_adapter.SetFindsOnlyOwnedItems(true); |
1019 for (std::vector<PasswordForm*>::const_iterator i = forms.begin(); | 1019 for (std::vector<PasswordForm*>::const_iterator i = forms.begin(); |
1020 i != forms.end(); ++i) { | 1020 i != forms.end(); ++i) { |
1021 owned_keychain_adapter.RemovePassword(**i); | 1021 owned_keychain_adapter.RemovePassword(**i); |
1022 } | 1022 } |
1023 } | 1023 } |
1024 | 1024 |
1025 void PasswordStoreMac::CreateNotificationService() { | 1025 void PasswordStoreMac::CreateNotificationService() { |
1026 notification_service_.reset(content::NotificationService::Create()); | 1026 notification_service_.reset(content::NotificationService::Create()); |
1027 } | 1027 } |
OLD | NEW |