Index: crypto/mock_apple_keychain.cc |
diff --git a/crypto/mock_apple_keychain.cc b/crypto/mock_apple_keychain.cc |
index 1ddfc8679461c6fddf320642405dc31f98643c0b..a1faa65382a788ff5d8ac81b21b9723b41fb537c 100644 |
--- a/crypto/mock_apple_keychain.cc |
+++ b/crypto/mock_apple_keychain.cc |
@@ -3,9 +3,23 @@ |
// found in the LICENSE file. |
#include "base/logging.h" |
+#include "base/metrics/histogram.h" |
#include "base/time/time.h" |
#include "crypto/mock_apple_keychain.h" |
+namespace { |
+ |
+// Adds an entry to a local histogram to indicate that the Apple Keychain would |
+// have been accessed, if this class were not a mock of the Apple Keychain. |
+void IncrementKeychainAccessHistogram() { |
+ // This local histogram is accessed by Telemetry to track the number of times |
+ // the keychain is accessed, since keychain access is known to be synchronous |
+ // and slow. |
+ LOCAL_HISTOGRAM_BOOLEAN("OSX.Keychain.Access", true); |
+} |
+ |
+} // namespace |
+ |
namespace crypto { |
OSStatus MockAppleKeychain::FindGenericPassword( |
@@ -17,6 +31,8 @@ OSStatus MockAppleKeychain::FindGenericPassword( |
UInt32* passwordLength, |
void** passwordData, |
SecKeychainItemRef* itemRef) const { |
+ IncrementKeychainAccessHistogram(); |
+ |
// When simulating |noErr|, return canned |passwordData| and |
// |passwordLength|. Otherwise, just return given code. |
if (find_generic_result_ == noErr) { |
@@ -48,6 +64,8 @@ OSStatus MockAppleKeychain::AddGenericPassword( |
UInt32 passwordLength, |
const void* passwordData, |
SecKeychainItemRef* itemRef) const { |
+ IncrementKeychainAccessHistogram(); |
+ |
called_add_generic_ = true; |
DCHECK_GT(passwordLength, 0U); |
@@ -58,4 +76,9 @@ OSStatus MockAppleKeychain::AddGenericPassword( |
return noErr; |
} |
+std::string MockAppleKeychain::GetEncryptionPassword() const { |
+ IncrementKeychainAccessHistogram(); |
+ return "mock_password"; |
+} |
+ |
} // namespace crypto |