| Index: chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc
|
| diff --git a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc
|
| index 037df4ea963351ab9601afbabaf385dfaae5f594..aa61394b1a5cc0e00c873975f98fecbf5075053f 100644
|
| --- a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc
|
| +++ b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc
|
| @@ -65,10 +65,21 @@ void LoadPrivateKeyByPublicKey(
|
| const scoped_refptr<PrivateKey>& private_key)>&
|
| callback) {
|
| crypto::EnsureNSSInit();
|
| - crypto::ScopedPK11Slot slot =
|
| + crypto::ScopedPK11Slot public_slot =
|
| crypto::GetPublicSlotForChromeOSUser(username_hash);
|
| - scoped_refptr<PrivateKey> private_key(new PrivateKey(
|
| - owner_key_util->FindPrivateKeyInSlot(public_key->data(), slot.get())));
|
| + crypto::ScopedPK11Slot private_slot = crypto::GetPrivateSlotForChromeOSUser(
|
| + username_hash, base::Callback<void(crypto::ScopedPK11Slot)>());
|
| +
|
| + // If private slot is already available, this will check it. If not,
|
| + // we'll get called again later when the TPM Token is ready, and the
|
| + // slot will be available then.
|
| + scoped_refptr<PrivateKey> private_key(
|
| + new PrivateKey(owner_key_util->FindPrivateKeyInSlot(public_key->data(),
|
| + private_slot.get())));
|
| + if (!private_key->key()) {
|
| + private_key = new PrivateKey(owner_key_util->FindPrivateKeyInSlot(
|
| + public_key->data(), public_slot.get()));
|
| + }
|
| BrowserThread::PostTask(BrowserThread::UI,
|
| FROM_HERE,
|
| base::Bind(callback, public_key, private_key));
|
|
|