Chromium Code Reviews| Index: chrome/browser/chromeos/ownership/owner_settings_service.cc |
| diff --git a/chrome/browser/chromeos/ownership/owner_settings_service.cc b/chrome/browser/chromeos/ownership/owner_settings_service.cc |
| index cf08b95a1d39f0b2c8d165874f4c3e87216ac83b..06e0eea5e81262b451682c2baf47aa702116bf45 100644 |
| --- a/chrome/browser/chromeos/ownership/owner_settings_service.cc |
| +++ b/chrome/browser/chromeos/ownership/owner_settings_service.cc |
| @@ -7,6 +7,7 @@ |
| #include <string> |
| #include "base/bind.h" |
| +#include "base/bind_helpers.h" |
| #include "chrome/browser/chrome_notification_types.h" |
| #include "chrome/browser/chromeos/login/users/user.h" |
| #include "chrome/browser/chromeos/login/users/user_manager.h" |
| @@ -113,6 +114,26 @@ bool IsPrivateKeyExistAsyncHelper( |
| return is_owner; |
| } |
| +// Checks whether NSS slots with private key are mounted or |
| +// not. Responds via |callback|. |
| +void IsPrivateKeyExistAsync( |
|
stevenjb
2014/07/02 23:06:02
nit: Can we rename this DoesPrivateKeyExistAsync?
tbarzic
2014/07/08 17:47:18
Done.
|
| + const OwnerSettingsService::IsOwnerCallback& callback) { |
| + scoped_refptr<OwnerKeyUtil> owner_key_util; |
| + if (g_owner_key_util_for_testing) |
| + owner_key_util = *g_owner_key_util_for_testing; |
| + else |
| + owner_key_util = OwnerKeyUtil::Create(); |
| + scoped_refptr<base::TaskRunner> task_runner = |
| + content::BrowserThread::GetBlockingPool() |
| + ->GetTaskRunnerWithShutdownBehavior( |
| + base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); |
| + base::PostTaskAndReplyWithResult( |
| + task_runner.get(), |
| + FROM_HERE, |
| + base::Bind(&IsPrivateKeyExistAsyncHelper, owner_key_util), |
| + callback); |
| +} |
| + |
| } // namespace |
| OwnerSettingsService::OwnerSettingsService(Profile* profile) |
| @@ -197,22 +218,22 @@ void OwnerSettingsService::OnTPMTokenReady() { |
| } |
| // static |
| -void OwnerSettingsService::IsPrivateKeyExistAsync( |
| +void OwnerSettingsService::IsOwnerForSafeModeAsync( |
| + const std::string& user_id, |
| + const std::string& user_hash, |
| const IsOwnerCallback& callback) { |
| - scoped_refptr<OwnerKeyUtil> owner_key_util; |
| - if (g_owner_key_util_for_testing) |
| - owner_key_util = *g_owner_key_util_for_testing; |
| - else |
| - owner_key_util = OwnerKeyUtil::Create(); |
| - scoped_refptr<base::TaskRunner> task_runner = |
| - content::BrowserThread::GetBlockingPool() |
| - ->GetTaskRunnerWithShutdownBehavior( |
| - base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); |
| - base::PostTaskAndReplyWithResult( |
| - task_runner.get(), |
| + CHECK(chromeos::LoginState::Get()->IsInSafeMode()); |
| + |
| + // Make sure NSS is initialized and NSS DB is loaded for the user before |
| + // searching for the owner key. |
| + BrowserThread::PostTaskAndReply( |
| + BrowserThread::IO, |
| FROM_HERE, |
| - base::Bind(&IsPrivateKeyExistAsyncHelper, owner_key_util), |
| - callback); |
| + base::Bind(base::IgnoreResult(&crypto::InitializeNSSForChromeOSUser), |
| + user_id, |
| + user_hash, |
| + ProfileHelper::GetProfilePathByUserIdHash(user_hash)), |
| + base::Bind(&IsPrivateKeyExistAsync, callback)); |
| } |
| // static |