Index: chromeos/tpm_token_loader.cc |
diff --git a/chromeos/tpm_token_loader.cc b/chromeos/tpm_token_loader.cc |
index 4f17bf5595747345fb65f820903762b449d4eafb..91dbeddbb8b6cfd67533cb3d82367b6538a064bb 100644 |
--- a/chromeos/tpm_token_loader.cc |
+++ b/chromeos/tpm_token_loader.cc |
@@ -70,6 +70,7 @@ TPMTokenLoader::TPMTokenLoader(bool for_test) |
DBusThreadManager::Get()->GetCryptohomeClient(), |
base::ThreadTaskRunnerHandle::Get())), |
tpm_token_slot_id_(-1), |
+ can_start_before_login_(false), |
weak_factory_(this) { |
if (!initialized_for_test_ && LoginState::IsInitialized()) |
LoginState::Get()->AddObserver(this); |
@@ -86,6 +87,13 @@ void TPMTokenLoader::SetCryptoTaskRunner( |
MaybeStartTokenInitialization(); |
} |
+void TPMTokenLoader::EnsureStarted() { |
+ if (can_start_before_login_) |
+ return; |
+ can_start_before_login_ = true; |
+ MaybeStartTokenInitialization(); |
+} |
+ |
TPMTokenLoader::~TPMTokenLoader() { |
if (!initialized_for_test_ && LoginState::IsInitialized()) |
LoginState::Get()->RemoveObserver(this); |
@@ -119,10 +127,9 @@ void TPMTokenLoader::MaybeStartTokenInitialization() { |
if (tpm_token_state_ != TPM_STATE_UNKNOWN || !crypto_task_runner_.get()) |
return; |
- if (!LoginState::IsInitialized()) |
- return; |
- |
- bool start_initialization = LoginState::Get()->IsUserLoggedIn(); |
+ bool start_initialization = |
+ (LoginState::IsInitialized() && LoginState::Get()->IsUserLoggedIn()) || |
+ can_start_before_login_; |
VLOG(1) << "StartTokenInitialization: " << start_initialization; |
if (!start_initialization) |