| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chromeos/dbus/cryptohome_client.h" | 5 #include "chromeos/dbus/cryptohome_client.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "chromeos/dbus/blocking_method_caller.h" | 9 #include "chromeos/dbus/blocking_method_caller.h" |
| 10 #include "dbus/bus.h" | 10 #include "dbus/bus.h" |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 // CryptohomeClient override. | 144 // CryptohomeClient override. |
| 145 virtual void AsyncMountGuest(const AsyncMethodCallback& callback) OVERRIDE { | 145 virtual void AsyncMountGuest(const AsyncMethodCallback& callback) OVERRIDE { |
| 146 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeAsyncMountGuest); | 146 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeAsyncMountGuest); |
| 147 proxy_->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, | 147 proxy_->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
| 148 base::Bind(&CryptohomeClientImpl::OnAsyncMethodCall, | 148 base::Bind(&CryptohomeClientImpl::OnAsyncMethodCall, |
| 149 weak_ptr_factory_.GetWeakPtr(), | 149 weak_ptr_factory_.GetWeakPtr(), |
| 150 callback)); | 150 callback)); |
| 151 } | 151 } |
| 152 | 152 |
| 153 // CryptohomeClient override. | 153 // CryptohomeClient override. |
| 154 virtual bool TpmIsReady(bool* ready) OVERRIDE { | 154 virtual void TpmIsReady(const BoolMethodCallback& callback) OVERRIDE { |
| 155 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeTpmIsReady); | 155 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeTpmIsReady); |
| 156 return CallBoolMethodAndBlock(&method_call, ready); | 156 proxy_->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
| 157 base::Bind( |
| 158 &CryptohomeClientImpl::OnBoolMethod, |
| 159 weak_ptr_factory_.GetWeakPtr(), |
| 160 callback)); |
| 157 } | 161 } |
| 158 | 162 |
| 159 // CryptohomeClient override. | 163 // CryptohomeClient override. |
| 160 virtual void TpmIsEnabled(const BoolMethodCallback& callback) OVERRIDE { | 164 virtual void TpmIsEnabled(const BoolMethodCallback& callback) OVERRIDE { |
| 161 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeTpmIsEnabled); | 165 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeTpmIsEnabled); |
| 162 proxy_->CallMethod( | 166 proxy_->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
| 163 &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, | 167 base::Bind( |
| 164 base::Bind( | 168 &CryptohomeClientImpl::OnBoolMethod, |
| 165 &CryptohomeClientImpl::OnBoolMethod, | 169 weak_ptr_factory_.GetWeakPtr(), |
| 166 weak_ptr_factory_.GetWeakPtr(), | 170 callback)); |
| 167 callback)); | |
| 168 } | 171 } |
| 169 | 172 |
| 170 // CryptohomeClient override. | 173 // CryptohomeClient override. |
| 171 // TODO(hashimoto): Remove this method. crosbug.com/28500 | 174 // TODO(hashimoto): Remove this method. crosbug.com/28500 |
| 172 virtual bool CallTpmIsEnabledAndBlock(bool* enabled) OVERRIDE { | 175 virtual bool CallTpmIsEnabledAndBlock(bool* enabled) OVERRIDE { |
| 173 // We don't use INITIALIZE_METHOD_CALL here because the C++ method name is | 176 // We don't use INITIALIZE_METHOD_CALL here because the C++ method name is |
| 174 // different from the D-Bus method name (TpmIsEnabled). | 177 // different from the D-Bus method name (TpmIsEnabled). |
| 175 dbus::MethodCall method_call(cryptohome::kCryptohomeInterface, | 178 dbus::MethodCall method_call(cryptohome::kCryptohomeInterface, |
| 176 cryptohome::kCryptohomeTpmIsEnabled); | 179 cryptohome::kCryptohomeTpmIsEnabled); |
| 177 return CallBoolMethodAndBlock(&method_call, enabled); | 180 return CallBoolMethodAndBlock(&method_call, enabled); |
| 178 } | 181 } |
| 179 | 182 |
| 180 // CryptohomeClient override. | 183 // CryptohomeClient override. |
| 181 virtual bool TpmGetPassword(std::string* password) OVERRIDE { | 184 virtual void TpmGetPassword(const StringMethodCallback& callback) OVERRIDE { |
| 182 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeTpmGetPassword); | 185 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeTpmGetPassword); |
| 183 scoped_ptr<dbus::Response> response( | 186 proxy_->CallMethod( |
| 184 blocking_method_caller_.CallMethodAndBlock(&method_call)); | 187 &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
| 185 if (!response.get()) | 188 base::Bind(&CryptohomeClientImpl::OnStringMethod, |
| 186 return false; | 189 weak_ptr_factory_.GetWeakPtr(), |
| 187 dbus::MessageReader reader(response.get()); | 190 callback)); |
| 188 return reader.PopString(password); | |
| 189 } | 191 } |
| 190 | 192 |
| 191 // CryptohomeClient override. | 193 // CryptohomeClient override. |
| 192 virtual bool TpmIsOwned(bool* owned) OVERRIDE { | 194 virtual bool TpmIsOwned(bool* owned) OVERRIDE { |
| 193 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeTpmIsOwned); | 195 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeTpmIsOwned); |
| 194 return CallBoolMethodAndBlock(&method_call, owned); | 196 return CallBoolMethodAndBlock(&method_call, owned); |
| 195 } | 197 } |
| 196 | 198 |
| 197 // CryptohomeClient override. | 199 // CryptohomeClient override. |
| 198 virtual bool TpmIsBeingOwned(bool* owning) OVERRIDE { | 200 virtual bool TpmIsBeingOwned(bool* owning) OVERRIDE { |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 } | 344 } |
| 343 dbus::MessageReader reader(response); | 345 dbus::MessageReader reader(response); |
| 344 bool result = false; | 346 bool result = false; |
| 345 if (!reader.PopBool(&result)) { | 347 if (!reader.PopBool(&result)) { |
| 346 callback.Run(DBUS_METHOD_CALL_FAILURE, false); | 348 callback.Run(DBUS_METHOD_CALL_FAILURE, false); |
| 347 return; | 349 return; |
| 348 } | 350 } |
| 349 callback.Run(DBUS_METHOD_CALL_SUCCESS, result); | 351 callback.Run(DBUS_METHOD_CALL_SUCCESS, result); |
| 350 } | 352 } |
| 351 | 353 |
| 354 // Handles responses for methods with a string value result. |
| 355 void OnStringMethod(const StringMethodCallback& callback, |
| 356 dbus::Response* response) { |
| 357 if (!response) { |
| 358 callback.Run(DBUS_METHOD_CALL_FAILURE, std::string()); |
| 359 return; |
| 360 } |
| 361 dbus::MessageReader reader(response); |
| 362 std::string result; |
| 363 if (!reader.PopString(&result)) { |
| 364 callback.Run(DBUS_METHOD_CALL_FAILURE, std::string()); |
| 365 return; |
| 366 } |
| 367 callback.Run(DBUS_METHOD_CALL_SUCCESS, result); |
| 368 } |
| 369 |
| 352 // Handles responses for Pkcs11GetTpmtTokenInfo. | 370 // Handles responses for Pkcs11GetTpmtTokenInfo. |
| 353 void OnPkcs11GetTpmTokenInfo(const Pkcs11GetTpmTokenInfoCallback& callback, | 371 void OnPkcs11GetTpmTokenInfo(const Pkcs11GetTpmTokenInfoCallback& callback, |
| 354 dbus::Response* response) { | 372 dbus::Response* response) { |
| 355 if (!response) { | 373 if (!response) { |
| 356 callback.Run(DBUS_METHOD_CALL_FAILURE, std::string(), std::string()); | 374 callback.Run(DBUS_METHOD_CALL_FAILURE, std::string(), std::string()); |
| 357 return; | 375 return; |
| 358 } | 376 } |
| 359 dbus::MessageReader reader(response); | 377 dbus::MessageReader reader(response); |
| 360 std::string label; | 378 std::string label; |
| 361 std::string user_pin; | 379 std::string user_pin; |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 469 const AsyncMethodCallback& callback) OVERRIDE { | 487 const AsyncMethodCallback& callback) OVERRIDE { |
| 470 ReturnAsyncMethodResult(callback); | 488 ReturnAsyncMethodResult(callback); |
| 471 } | 489 } |
| 472 | 490 |
| 473 // CryptohomeClient override. | 491 // CryptohomeClient override. |
| 474 virtual void AsyncMountGuest(const AsyncMethodCallback& callback) OVERRIDE { | 492 virtual void AsyncMountGuest(const AsyncMethodCallback& callback) OVERRIDE { |
| 475 ReturnAsyncMethodResult(callback); | 493 ReturnAsyncMethodResult(callback); |
| 476 } | 494 } |
| 477 | 495 |
| 478 // CryptohomeClient override. | 496 // CryptohomeClient override. |
| 479 virtual bool TpmIsReady(bool* ready) OVERRIDE { | 497 virtual void TpmIsReady(const BoolMethodCallback& callback) OVERRIDE { |
| 480 *ready = (tpm_is_ready_counter_++ > 20); | 498 MessageLoop::current()->PostTask( |
| 481 return true; | 499 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); |
| 482 } | 500 } |
| 483 | 501 |
| 484 // CryptohomeClient override. | 502 // CryptohomeClient override. |
| 485 virtual void TpmIsEnabled(const BoolMethodCallback& callback) OVERRIDE { | 503 virtual void TpmIsEnabled(const BoolMethodCallback& callback) OVERRIDE { |
| 486 MessageLoop::current()->PostTask( | 504 MessageLoop::current()->PostTask( |
| 487 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); | 505 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); |
| 488 } | 506 } |
| 489 | 507 |
| 490 // CryptohomeClient override. | 508 // CryptohomeClient override. |
| 491 virtual bool CallTpmIsEnabledAndBlock(bool* enabled) OVERRIDE { | 509 virtual bool CallTpmIsEnabledAndBlock(bool* enabled) OVERRIDE { |
| 492 *enabled = true; | 510 *enabled = true; |
| 493 return true; | 511 return true; |
| 494 } | 512 } |
| 495 | 513 |
| 496 // CryptohomeClient override. | 514 // CryptohomeClient override. |
| 497 virtual bool TpmGetPassword(std::string* password) OVERRIDE { | 515 virtual void TpmGetPassword(const StringMethodCallback& callback) OVERRIDE { |
| 498 const char kStubTpmPassword[] = "Stub-TPM-password"; | 516 const char kStubTpmPassword[] = "Stub-TPM-password"; |
| 499 *password = kStubTpmPassword; | 517 MessageLoop::current()->PostTask( |
| 500 return true; | 518 FROM_HERE, |
| 519 base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, kStubTpmPassword)); |
| 501 } | 520 } |
| 502 | 521 |
| 503 // CryptohomeClient override. | 522 // CryptohomeClient override. |
| 504 virtual bool TpmIsOwned(bool* owned) OVERRIDE { | 523 virtual bool TpmIsOwned(bool* owned) OVERRIDE { |
| 505 *owned = true; | 524 *owned = true; |
| 506 return true; | 525 return true; |
| 507 } | 526 } |
| 508 | 527 |
| 509 // CryptohomeClient override. | 528 // CryptohomeClient override. |
| 510 virtual bool TpmIsBeingOwned(bool* owning) OVERRIDE { | 529 virtual bool TpmIsBeingOwned(bool* owning) OVERRIDE { |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 630 // static | 649 // static |
| 631 CryptohomeClient* CryptohomeClient::Create(DBusClientImplementationType type, | 650 CryptohomeClient* CryptohomeClient::Create(DBusClientImplementationType type, |
| 632 dbus::Bus* bus) { | 651 dbus::Bus* bus) { |
| 633 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) | 652 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) |
| 634 return new CryptohomeClientImpl(bus); | 653 return new CryptohomeClientImpl(bus); |
| 635 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); | 654 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); |
| 636 return new CryptohomeClientStubImpl(); | 655 return new CryptohomeClientStubImpl(); |
| 637 } | 656 } |
| 638 | 657 |
| 639 } // namespace chromeos | 658 } // namespace chromeos |
| OLD | NEW |