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..81724dfb887ed1dcf76482b5f17df6cd3b9f366d 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" |
@@ -102,7 +103,7 @@ void LoadPrivateKey( |
} |
} |
-bool IsPrivateKeyExistAsyncHelper( |
+bool DoesPrivateKeyExistAsyncHelper( |
const scoped_refptr<OwnerKeyUtil>& owner_key_util) { |
std::vector<uint8> public_key; |
if (!owner_key_util->ImportPublicKey(&public_key)) |
@@ -113,6 +114,26 @@ bool IsPrivateKeyExistAsyncHelper( |
return is_owner; |
} |
+// Checks whether NSS slots with private key are mounted or |
+// not. Responds via |callback|. |
+void DoesPrivateKeyExistAsync( |
+ 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(&DoesPrivateKeyExistAsyncHelper, 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(&DoesPrivateKeyExistAsync, callback)); |
} |
// static |