| 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)
|
|
|