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 #ifndef CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_MAC_INTERNAL_H_ | 5 #ifndef CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_MAC_INTERNAL_H_ |
6 #define CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_MAC_INTERNAL_H_ | 6 #define CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_MAC_INTERNAL_H_ |
7 | 7 |
8 #include <Security/Security.h> | 8 #include <Security/Security.h> |
9 | 9 |
10 #include <string> | 10 #include <string> |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 autofill::PasswordForm::Scheme scheme, | 84 autofill::PasswordForm::Scheme scheme, |
85 const char* path, | 85 const char* path, |
86 const char* username); | 86 const char* username); |
87 | 87 |
88 // Returns the Keychain SecAuthenticationType type corresponding to |scheme|. | 88 // Returns the Keychain SecAuthenticationType type corresponding to |scheme|. |
89 SecAuthenticationType AuthTypeForScheme( | 89 SecAuthenticationType AuthTypeForScheme( |
90 autofill::PasswordForm::Scheme scheme); | 90 autofill::PasswordForm::Scheme scheme); |
91 | 91 |
92 // Changes the password for keychain_item to |password|; returns true if the | 92 // Changes the password for keychain_item to |password|; returns true if the |
93 // password was successfully changed. | 93 // password was successfully changed. |
94 bool SetKeychainItemPassword(const SecKeychainItemRef& keychain_item, | 94 bool SetKeychainItemPassword(SecKeychainItemRef keychain_item, |
95 const std::string& password); | 95 const std::string& password); |
96 | 96 |
97 // Sets the creator code of keychain_item to creator_code; returns true if the | 97 // Sets the creator code of keychain_item to creator_code; returns true if the |
98 // creator code was successfully set. | 98 // creator code was successfully set. |
99 bool SetKeychainItemCreatorCode(const SecKeychainItemRef& keychain_item, | 99 bool SetKeychainItemCreatorCode(SecKeychainItemRef keychain_item, |
100 OSType creator_code); | 100 OSType creator_code); |
101 | 101 |
102 // Returns the creator code to be used for a Keychain search, depending on | 102 // Returns the creator code to be used for a Keychain search, depending on |
103 // whether this object was instructed to search only for items it created. | 103 // whether this object was instructed to search only for items it created. |
104 // If searches should be restricted in this way, the application-specific | 104 // If searches should be restricted in this way, the application-specific |
105 // creator code will be returned. Otherwise, 0 will be returned, indicating | 105 // creator code will be returned. Otherwise, 0 will be returned, indicating |
106 // a search of all items, regardless of creator. | 106 // a search of all items, regardless of creator. |
107 OSType CreatorCodeForSearch(); | 107 OSType CreatorCodeForSearch(); |
108 | 108 |
109 const AppleKeychain* keychain_; | 109 const AppleKeychain* keychain_; |
110 | 110 |
111 // If true, Keychain searches are restricted to items created by Chrome. | 111 // If true, Keychain searches are restricted to items created by Chrome. |
112 bool finds_only_owned_; | 112 bool finds_only_owned_; |
113 | 113 |
114 DISALLOW_COPY_AND_ASSIGN(MacKeychainPasswordFormAdapter); | 114 DISALLOW_COPY_AND_ASSIGN(MacKeychainPasswordFormAdapter); |
115 }; | 115 }; |
116 | 116 |
117 namespace internal_keychain_helpers { | 117 namespace internal_keychain_helpers { |
118 | 118 |
119 // Pair of pointers to a SecKeychainItemRef and a corresponding PasswordForm. | 119 // Pair of pointers to a SecKeychainItemRef and a corresponding PasswordForm. |
120 typedef std::pair<SecKeychainItemRef*, autofill::PasswordForm*> ItemFormPair; | 120 typedef std::pair<SecKeychainItemRef, std::unique_ptr<autofill::PasswordForm>> |
| 121 ItemFormPair; |
121 | 122 |
122 // Sets the fields of |form| based on the keychain data from |keychain_item|. | 123 // Sets the fields of |form| based on the keychain data from |keychain_item|. |
123 // Fields that can't be determined from |keychain_item| will be unchanged. If | 124 // Fields that can't be determined from |keychain_item| will be unchanged. If |
124 // |extract_password_data| is true, the password data will be copied from | 125 // |extract_password_data| is true, the password data will be copied from |
125 // |keychain_item| in addition to its attributes, and the |blacklisted_by_user| | 126 // |keychain_item| in addition to its attributes, and the |blacklisted_by_user| |
126 // field will be set to true for empty passwords ("" or " "). | 127 // field will be set to true for empty passwords ("" or " "). |
127 // If |extract_password_data| is false, only the password attributes will be | 128 // If |extract_password_data| is false, only the password attributes will be |
128 // copied, and the |blacklisted_by_user| field will always be false. | 129 // copied, and the |blacklisted_by_user| field will always be false. |
129 // | 130 // |
130 // IMPORTANT: If |extract_password_data| is true, this function can cause the OS | 131 // IMPORTANT: If |extract_password_data| is true, this function can cause the OS |
131 // to trigger UI (to allow access to the keychain item if we aren't trusted for | 132 // to trigger UI (to allow access to the keychain item if we aren't trusted for |
132 // the item), and block until the UI is dismissed. | 133 // the item), and block until the UI is dismissed. |
133 // | 134 // |
134 // If excessive prompting for access to other applications' keychain items | 135 // If excessive prompting for access to other applications' keychain items |
135 // becomes an issue, the password storage API will need to intially call this | 136 // becomes an issue, the password storage API will need to intially call this |
136 // function with |extract_password_data| set to false, and retrieve the password | 137 // function with |extract_password_data| set to false, and retrieve the password |
137 // later (accessing other fields doesn't require authorization). | 138 // later (accessing other fields doesn't require authorization). |
138 bool FillPasswordFormFromKeychainItem(const AppleKeychain& keychain, | 139 bool FillPasswordFormFromKeychainItem(const AppleKeychain& keychain, |
139 const SecKeychainItemRef& keychain_item, | 140 SecKeychainItemRef keychain_item, |
140 autofill::PasswordForm* form, | 141 autofill::PasswordForm* form, |
141 bool extract_password_data); | 142 bool extract_password_data); |
142 | 143 |
143 // Returns true if |keychain_item| has the application-specific creator code in | 144 // Returns true if |keychain_item| has the application-specific creator code in |
144 // its attributes. | 145 // its attributes. |
145 bool HasCreatorCode(const AppleKeychain& keychain, | 146 bool HasCreatorCode(const AppleKeychain& keychain, |
146 const SecKeychainItemRef& keychain_item); | 147 SecKeychainItemRef keychain_item); |
147 | 148 |
148 // Use FormMatchStrictness to configure which forms are considered a match by | 149 // Use FormMatchStrictness to configure which forms are considered a match by |
149 // FormsMatchForMerge: | 150 // FormsMatchForMerge: |
150 enum FormMatchStrictness { | 151 enum FormMatchStrictness { |
151 STRICT_FORM_MATCH, // Match only forms with the same scheme, signon realm and | 152 STRICT_FORM_MATCH, // Match only forms with the same scheme, signon realm and |
152 // username value. | 153 // username value. |
153 FUZZY_FORM_MATCH, // Also match cases where the first form's | 154 FUZZY_FORM_MATCH, // Also match cases where the first form's |
154 // original_signon_realm is nonempty and matches the | 155 // original_signon_realm is nonempty and matches the |
155 // second form's signon_realm. | 156 // second form's signon_realm. |
156 }; | 157 }; |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 // Returns PasswordForm instances populated with password data for each keychain | 214 // Returns PasswordForm instances populated with password data for each keychain |
214 // entry in |item_form_pairs| that could be merged with |query_form|. | 215 // entry in |item_form_pairs| that could be merged with |query_form|. |
215 ScopedVector<autofill::PasswordForm> ExtractPasswordsMergeableWithForm( | 216 ScopedVector<autofill::PasswordForm> ExtractPasswordsMergeableWithForm( |
216 const AppleKeychain& keychain, | 217 const AppleKeychain& keychain, |
217 const std::vector<ItemFormPair>& item_form_pairs, | 218 const std::vector<ItemFormPair>& item_form_pairs, |
218 const autofill::PasswordForm& query_form); | 219 const autofill::PasswordForm& query_form); |
219 | 220 |
220 } // namespace internal_keychain_helpers | 221 } // namespace internal_keychain_helpers |
221 | 222 |
222 #endif // CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_MAC_INTERNAL_H_ | 223 #endif // CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_MAC_INTERNAL_H_ |
OLD | NEW |