Index: chromeos/cryptohome/system_salt_getter.cc |
diff --git a/chromeos/cryptohome/system_salt_getter.cc b/chromeos/cryptohome/system_salt_getter.cc |
index 1fa25a325056662694e7e9deb23fdfb1910569dd..2a26db755625255b13a67e7b21b2cbec3d882bfd 100644 |
--- a/chromeos/cryptohome/system_salt_getter.cc |
+++ b/chromeos/cryptohome/system_salt_getter.cc |
@@ -27,35 +27,43 @@ SystemSaltGetter::~SystemSaltGetter() { |
void SystemSaltGetter::GetSystemSalt( |
const GetSystemSaltCallback& callback) { |
+ if (!system_salt_.empty()) { |
+ base::MessageLoopProxy::current()->PostTask( |
+ FROM_HERE, base::Bind(callback, system_salt_)); |
+ return; |
+ } |
+ |
DBusThreadManager::Get()->GetCryptohomeClient()->WaitForServiceToBeAvailable( |
- base::Bind(&SystemSaltGetter::GetSystemSaltInternal, |
+ base::Bind(&SystemSaltGetter::DidWaitForServiceToBeAvailable, |
weak_ptr_factory_.GetWeakPtr(), |
callback)); |
} |
-std::string SystemSaltGetter::GetSystemSaltSync() { |
- LoadSystemSalt(); // no-op if it's already loaded. |
- return system_salt_; |
-} |
- |
-void SystemSaltGetter::GetSystemSaltInternal( |
+void SystemSaltGetter::DidWaitForServiceToBeAvailable( |
const GetSystemSaltCallback& callback, |
bool service_is_available) { |
- LOG_IF(ERROR, !service_is_available) << "WaitForServiceToBeAvailable failed."; |
- // TODO(hashimoto): Stop using GetSystemSaltSync(). crbug.com/141009 |
- callback.Run(GetSystemSaltSync()); |
+ if (!service_is_available) { |
+ LOG(ERROR) << "WaitForServiceToBeAvailable failed."; |
+ callback.Run(std::string()); |
+ return; |
+ } |
+ DBusThreadManager::Get()->GetCryptohomeClient()->GetSystemSalt( |
+ base::Bind(&SystemSaltGetter::DidGetSystemSalt, |
+ weak_ptr_factory_.GetWeakPtr(), |
+ callback)); |
} |
-void SystemSaltGetter::LoadSystemSalt() { |
- if (!system_salt_.empty()) |
- return; |
- std::vector<uint8> salt; |
- DBusThreadManager::Get()->GetCryptohomeClient()->GetSystemSalt(&salt); |
- if (salt.empty() || salt.size() % 2 != 0U) { |
+void SystemSaltGetter::DidGetSystemSalt(const GetSystemSaltCallback& callback, |
+ DBusMethodCallStatus call_status, |
+ const std::vector<uint8>& system_salt) { |
+ if (call_status == DBUS_METHOD_CALL_SUCCESS && |
+ !system_salt.empty() && |
+ system_salt.size() % 2 == 0U) |
+ system_salt_ = ConvertRawSaltToHexString(system_salt); |
+ else |
LOG(WARNING) << "System salt not available"; |
- return; |
- } |
- system_salt_ = ConvertRawSaltToHexString(salt); |
+ |
+ callback.Run(system_salt_); |
} |
// static |