Index: chrome/browser/profiles/profile_io_data.cc |
diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc |
index 09993085d14987895e8ce822c57362f2bf5af7f4..64f24592b517bee311d0412a0d0ba85ce5dc816d 100644 |
--- a/chrome/browser/profiles/profile_io_data.cc |
+++ b/chrome/browser/profiles/profile_io_data.cc |
@@ -288,20 +288,19 @@ void StartTPMSlotInitializationOnIOThread(const std::string& username, |
void StartNSSInitOnIOThread(const std::string& username, |
const std::string& username_hash, |
- const base::FilePath& path, |
- bool is_primary_user) { |
+ const base::FilePath& path) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
DVLOG(1) << "Starting NSS init for " << username |
- << " hash:" << username_hash |
- << " is_primary_user:" << is_primary_user; |
- |
- if (!crypto::InitializeNSSForChromeOSUser( |
- username, username_hash, is_primary_user, path)) { |
- // If the user already exists in nss_util's map, it is already initialized |
- // or in the process of being initialized. In either case, there's no need |
- // to do anything. |
+ << " hash:" << username_hash; |
+ |
+ // Make sure NSS is initialized for the user. |
+ crypto::InitializeNSSForChromeOSUser(username, username_hash, path); |
+ |
+ // Check if it's OK to initialize TPM for the user before continuing. This |
+ // may not be the case if the TPM slot initialization was previously |
+ // requested for the same user. |
+ if (!crypto::GetAndSetStartedInitializeTPMForChromeOSUser(username_hash)) |
return; |
- } |
if (crypto::IsTPMTokenEnabledForNSS()) { |
if (crypto::IsTPMTokenReady(base::Bind( |
@@ -360,20 +359,22 @@ void ProfileIOData::InitializeOnUIThread(Profile* profile) { |
if (user_manager) { |
chromeos::User* user = |
chromeos::ProfileHelper::Get()->GetUserByProfile(profile); |
- if (user) { |
+ // No need to initialize NSS for users with empty username hash: |
+ // Getters for a user's NSS slots always return NULL slot if the user's |
+ // username hash is empty, even when the NSS is not initialized for the |
+ // user. |
+ if (user && !user->username_hash().empty()) { |
params->username_hash = user->username_hash(); |
- bool is_primary_user = (user_manager->GetPrimaryUser() == user); |
BrowserThread::PostTask(BrowserThread::IO, |
FROM_HERE, |
base::Bind(&StartNSSInitOnIOThread, |
user->email(), |
user->username_hash(), |
- profile->GetPath(), |
- is_primary_user)); |
+ profile->GetPath())); |
} |
} |
if (params->username_hash.empty()) |
- LOG(WARNING) << "no username_hash"; |
+ LOG(WARNING) << "No username_hash; skipped NSS initialization."; |
#endif |
params->profile = profile; |