summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/chromeos/login/user_manager.cc22
-rw-r--r--crypto/nss_util.cc4
2 files changed, 15 insertions, 11 deletions
diff --git a/chrome/browser/chromeos/login/user_manager.cc b/chrome/browser/chromeos/login/user_manager.cc
index e4c7390..4fde9b3 100644
--- a/chrome/browser/chromeos/login/user_manager.cc
+++ b/chrome/browser/chromeos/login/user_manager.cc
@@ -238,15 +238,19 @@ bool RealTPMTokenInfoDelegate::IsTokenAvailable() const {
}
bool RealTPMTokenInfoDelegate::IsTokenReady() const {
+ // Note: This should only be getting called from the UI thread, however
+ // if this does get called from another thread and token_ready_ is true,
+ // we can safely just return true here.
+ // TODO(stevenjb/gspencer): Clean this up to improve thread safety.
+ if (token_ready_)
+ return true;
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (!token_ready_) {
- // Retrieve token_name_ and user_pin_ here since they will never change
- // and CryptohomeLibrary calls are not thread safe.
- if (CrosLibrary::Get()->GetCryptohomeLibrary()->Pkcs11IsTpmTokenReady()) {
- CrosLibrary::Get()->GetCryptohomeLibrary()->Pkcs11GetTpmTokenInfo(
- &token_name_, &user_pin_);
- token_ready_ = true;
- }
+ // Retrieve token_name_ and user_pin_ here since they will never change
+ // and CryptohomeLibrary calls are not thread safe.
+ if (CrosLibrary::Get()->GetCryptohomeLibrary()->Pkcs11IsTpmTokenReady()) {
+ CrosLibrary::Get()->GetCryptohomeLibrary()->Pkcs11GetTpmTokenInfo(
+ &token_name_, &user_pin_);
+ token_ready_ = true;
}
return token_ready_;
}
@@ -725,6 +729,7 @@ void UserManager::StubUserLoggedIn() {
}
void UserManager::NotifyOnLogin() {
+ CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
content::NotificationService::current()->Notify(
chrome::NOTIFICATION_LOGIN_USER_CHANGED,
content::Source<UserManager>(this),
@@ -752,6 +757,7 @@ void UserManager::NotifyOnLogin() {
crypto::EnableTPMTokenForNSS(new RealTPMTokenInfoDelegate());
CertLibrary* cert_library;
cert_library = chromeos::CrosLibrary::Get()->GetCertLibrary();
+ // Note: this calls crypto::EnsureTPMTokenReady()
cert_library->RequestCertificates();
}
diff --git a/crypto/nss_util.cc b/crypto/nss_util.cc
index 4a48db1..e981cb2 100644
--- a/crypto/nss_util.cc
+++ b/crypto/nss_util.cc
@@ -382,10 +382,8 @@ class NSSInitSingleton {
return PK11_ReferenceSlot(test_slot_);
#if defined(OS_CHROMEOS)
- // Make sure that if EnableTPMTokenForNSS has been called that we
- // have successfully loaded Chaps.
if (tpm_token_info_delegate_.get() != NULL) {
- if (EnsureTPMTokenReady()) {
+ if (IsTPMTokenReady()) {
return PK11_ReferenceSlot(tpm_slot_);
} else {
// If we were supposed to get the hardware token, but were