diff options
-rw-r--r-- | chrome/browser/chromeos/login/user_manager.cc | 22 | ||||
-rw-r--r-- | crypto/nss_util.cc | 4 |
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 |