| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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_KEYCHAIN_MOCK_MAC_H_ | 5 #ifndef CHROME_BROWSER_KEYCHAIN_MOCK_MAC_H_ |
| 6 #define CHROME_BROWSER_KEYCHAIN_MOCK_MAC_H_ | 6 #define CHROME_BROWSER_KEYCHAIN_MOCK_MAC_H_ |
| 7 | 7 |
| 8 #include <set> |
| 8 #include <vector> | 9 #include <vector> |
| 9 | 10 |
| 10 #include "chrome/browser/keychain_mac.h" | 11 #include "chrome/browser/keychain_mac.h" |
| 11 | 12 |
| 12 // Mock Keychain wrapper for testing code that interacts with the OS Keychain. | 13 // Mock Keychain wrapper for testing code that interacts with the OS Keychain. |
| 13 // The basic idea of this mock is that it has a static array of data, and | 14 // The basic idea of this mock is that it has a static array of data, and |
| 14 // SecKeychainItemRef values are just indexes into that array (offset by 1 to | 15 // SecKeychainItemRef values are just indexes into that array (offset by 1 to |
| 15 // prevent problems with clients that null-check refs), cast to pointers. | 16 // prevent problems with clients that null-check refs), cast to pointers. |
| 16 // | 17 // |
| 17 // Note that "const" is pretty much meaningless for this class; the const-ness | 18 // Note that "const" is pretty much meaningless for this class; the const-ness |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 const void *passwordData, | 56 const void *passwordData, |
| 56 SecKeychainItemRef *itemRef) const; | 57 SecKeychainItemRef *itemRef) const; |
| 57 virtual void Free(CFTypeRef ref) const; | 58 virtual void Free(CFTypeRef ref) const; |
| 58 | 59 |
| 59 // Return the counts of objects returned by Create/Copy functions but never | 60 // Return the counts of objects returned by Create/Copy functions but never |
| 60 // Free'd as they should have been. | 61 // Free'd as they should have been. |
| 61 int UnfreedSearchCount() const; | 62 int UnfreedSearchCount() const; |
| 62 int UnfreedKeychainItemCount() const; | 63 int UnfreedKeychainItemCount() const; |
| 63 int UnfreedAttributeDataCount() const; | 64 int UnfreedAttributeDataCount() const; |
| 64 | 65 |
| 66 // Returns true if all items added with AddInternetPassword have a creator |
| 67 // code set. |
| 68 bool CreatorCodesSetForAddedItems() const; |
| 69 |
| 65 struct KeychainTestData { | 70 struct KeychainTestData { |
| 66 const SecAuthenticationType auth_type; | 71 const SecAuthenticationType auth_type; |
| 67 const char* server; | 72 const char* server; |
| 68 const SecProtocolType protocol; | 73 const SecProtocolType protocol; |
| 69 const char* path; | 74 const char* path; |
| 70 const UInt32 port; | 75 const UInt32 port; |
| 71 const char* security_domain; | 76 const char* security_domain; |
| 72 const char* creation_date; | 77 const char* creation_date; |
| 73 const char* username; | 78 const char* username; |
| 74 const char* password; | 79 const char* password; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 85 // docs don't indicate whether it is or not, so clients should not assume | 90 // docs don't indicate whether it is or not, so clients should not assume |
| 86 // that it will be. | 91 // that it will be. |
| 87 void SetTestDataString(int item, UInt32 tag, const char* value); | 92 void SetTestDataString(int item, UInt32 tag, const char* value); |
| 88 // Sets the data of the corresponding attribute of the item-th test item to | 93 // Sets the data of the corresponding attribute of the item-th test item to |
| 89 // |value|. Assumes that the space has alread been allocated, and the length | 94 // |value|. Assumes that the space has alread been allocated, and the length |
| 90 // set. | 95 // set. |
| 91 void SetTestDataPort(int item, UInt32 value); | 96 void SetTestDataPort(int item, UInt32 value); |
| 92 void SetTestDataProtocol(int item, SecProtocolType value); | 97 void SetTestDataProtocol(int item, SecProtocolType value); |
| 93 void SetTestDataAuthType(int item, SecAuthenticationType value); | 98 void SetTestDataAuthType(int item, SecAuthenticationType value); |
| 94 void SetTestDataNegativeItem(int item, Boolean value); | 99 void SetTestDataNegativeItem(int item, Boolean value); |
| 100 void SetTestDataCreator(int item, OSType value); |
| 95 // Sets the password data and length for the item-th test item. | 101 // Sets the password data and length for the item-th test item. |
| 96 void SetTestDataPasswordBytes(int item, const void* data, size_t length); | 102 void SetTestDataPasswordBytes(int item, const void* data, size_t length); |
| 97 // Sets the password for the item-th test item. As with SetTestDataString, | 103 // Sets the password for the item-th test item. As with SetTestDataString, |
| 98 // the data will not be null-terminated. | 104 // the data will not be null-terminated. |
| 99 void SetTestDataPasswordString(int item, const char* value); | 105 void SetTestDataPasswordString(int item, const char* value); |
| 100 | 106 |
| 101 // Returns the index of |tag| in |attribute_list|, or -1 if it's not found. | 107 // Returns the address of the attribute in attribute_list with tag |tag|, or |
| 102 static int IndexForTag(const SecKeychainAttributeList& attribute_list, | 108 // NULL if the attribute is not found. |
| 103 UInt32 tag); | 109 static SecKeychainAttribute* AttributeWithTag( |
| 110 const SecKeychainAttributeList& attribute_list, UInt32 tag); |
| 104 | 111 |
| 105 static const int kDummySearchRef = 1000; | 112 static const int kDummySearchRef = 1000; |
| 106 | 113 |
| 107 typedef struct { | 114 typedef struct { |
| 108 void* data; | 115 void* data; |
| 109 UInt32 length; | 116 UInt32 length; |
| 110 } KeychainPasswordData; | 117 } KeychainPasswordData; |
| 111 | 118 |
| 112 SecKeychainAttributeList* keychain_attr_list_; | 119 SecKeychainAttributeList* keychain_attr_list_; |
| 113 KeychainPasswordData* keychain_data_; | 120 KeychainPasswordData* keychain_data_; |
| 114 unsigned int item_capacity_; | 121 unsigned int item_capacity_; |
| 115 mutable unsigned int item_count_; | 122 mutable unsigned int item_count_; |
| 116 | 123 |
| 117 // Tracks the items that should be returned in subsequent calls to | 124 // Tracks the items that should be returned in subsequent calls to |
| 118 // SearchCopyNext, based on the last call to SearchCreateFromAttributes. | 125 // SearchCopyNext, based on the last call to SearchCreateFromAttributes. |
| 119 // We can't handle multiple active searches, since we don't track the search | 126 // We can't handle multiple active searches, since we don't track the search |
| 120 // ref we return, but we don't need to for our mocking. | 127 // ref we return, but we don't need to for our mocking. |
| 121 mutable std::vector<unsigned int> remaining_search_results_; | 128 mutable std::vector<unsigned int> remaining_search_results_; |
| 122 | 129 |
| 123 // Track copies and releases to make sure they balance. Really these should | 130 // Track copies and releases to make sure they balance. Really these should |
| 124 // be maps to track per item, but this should be good enough to catch | 131 // be maps to track per item, but this should be good enough to catch |
| 125 // real mistakes. | 132 // real mistakes. |
| 126 mutable int search_copy_count_; | 133 mutable int search_copy_count_; |
| 127 mutable int keychain_item_copy_count_; | 134 mutable int keychain_item_copy_count_; |
| 128 mutable int attribute_data_copy_count_; | 135 mutable int attribute_data_copy_count_; |
| 136 |
| 137 // Tracks which items (by index) were added with AddInternetPassword. |
| 138 mutable std::set<unsigned int> added_via_api_; |
| 129 }; | 139 }; |
| 130 | 140 |
| 131 #endif // CHROME_BROWSER_KEYCHAIN_MOCK_MAC_H_ | 141 #endif // CHROME_BROWSER_KEYCHAIN_MOCK_MAC_H_ |
| OLD | NEW |