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