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 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 return CallBoolMethodAndBlock(&method_call, owned); | 196 return CallBoolMethodAndBlock(&method_call, owned); |
197 } | 197 } |
198 | 198 |
199 // CryptohomeClient override. | 199 // CryptohomeClient override. |
200 virtual bool TpmIsBeingOwned(bool* owning) OVERRIDE { | 200 virtual bool TpmIsBeingOwned(bool* owning) OVERRIDE { |
201 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeTpmIsBeingOwned); | 201 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeTpmIsBeingOwned); |
202 return CallBoolMethodAndBlock(&method_call, owning); | 202 return CallBoolMethodAndBlock(&method_call, owning); |
203 } | 203 } |
204 | 204 |
205 // CryptohomeClient override. | 205 // CryptohomeClient override. |
206 virtual bool TpmCanAttemptOwnership() OVERRIDE { | 206 virtual void TpmCanAttemptOwnership( |
| 207 const VoidMethodCallback& callback) OVERRIDE { |
207 INITIALIZE_METHOD_CALL(method_call, | 208 INITIALIZE_METHOD_CALL(method_call, |
208 cryptohome::kCryptohomeTpmCanAttemptOwnership); | 209 cryptohome::kCryptohomeTpmCanAttemptOwnership); |
209 scoped_ptr<dbus::Response> response( | 210 CallVoidMethod(&method_call, callback); |
210 blocking_method_caller_.CallMethodAndBlock(&method_call)); | |
211 return response.get() != NULL; | |
212 } | 211 } |
213 | 212 |
214 // CryptohomeClient override. | 213 // CryptohomeClient override. |
215 virtual bool TpmClearStoredPassword() OVERRIDE { | 214 virtual bool TpmClearStoredPassword() OVERRIDE { |
216 INITIALIZE_METHOD_CALL(method_call, | 215 INITIALIZE_METHOD_CALL(method_call, |
217 cryptohome::kCryptohomeTpmClearStoredPassword); | 216 cryptohome::kCryptohomeTpmClearStoredPassword); |
218 scoped_ptr<dbus::Response> response( | 217 scoped_ptr<dbus::Response> response( |
219 blocking_method_caller_.CallMethodAndBlock(&method_call)); | 218 blocking_method_caller_.CallMethodAndBlock(&method_call)); |
220 return response.get() != NULL; | 219 return response.get() != NULL; |
221 } | 220 } |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
317 return; | 316 return; |
318 dbus::MessageReader reader(response); | 317 dbus::MessageReader reader(response); |
319 int async_id = 0; | 318 int async_id = 0; |
320 if (!reader.PopInt32(&async_id)) { | 319 if (!reader.PopInt32(&async_id)) { |
321 LOG(ERROR) << "Invalid response: " << response->ToString(); | 320 LOG(ERROR) << "Invalid response: " << response->ToString(); |
322 return; | 321 return; |
323 } | 322 } |
324 callback.Run(async_id); | 323 callback.Run(async_id); |
325 } | 324 } |
326 | 325 |
| 326 // Calls a method without result values. |
| 327 void CallVoidMethod(dbus::MethodCall* method_call, |
| 328 const VoidMethodCallback& callback) { |
| 329 proxy_->CallMethod(method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
| 330 base::Bind(&CryptohomeClientImpl::OnVoidMethod, |
| 331 weak_ptr_factory_.GetWeakPtr(), |
| 332 callback)); |
| 333 } |
| 334 |
| 335 void OnVoidMethod(const VoidMethodCallback& callback, |
| 336 dbus::Response* response) { |
| 337 if (!response) { |
| 338 callback.Run(DBUS_METHOD_CALL_FAILURE); |
| 339 return; |
| 340 } |
| 341 callback.Run(DBUS_METHOD_CALL_SUCCESS); |
| 342 } |
| 343 |
327 // Calls a method with a bool value reult and block. | 344 // Calls a method with a bool value reult and block. |
328 bool CallBoolMethodAndBlock(dbus::MethodCall* method_call, | 345 bool CallBoolMethodAndBlock(dbus::MethodCall* method_call, |
329 bool* result) { | 346 bool* result) { |
330 scoped_ptr<dbus::Response> response( | 347 scoped_ptr<dbus::Response> response( |
331 blocking_method_caller_.CallMethodAndBlock(method_call)); | 348 blocking_method_caller_.CallMethodAndBlock(method_call)); |
332 if (!response.get()) | 349 if (!response.get()) |
333 return false; | 350 return false; |
334 dbus::MessageReader reader(response.get()); | 351 dbus::MessageReader reader(response.get()); |
335 return reader.PopBool(result); | 352 return reader.PopBool(result); |
336 } | 353 } |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 return true; | 542 return true; |
526 } | 543 } |
527 | 544 |
528 // CryptohomeClient override. | 545 // CryptohomeClient override. |
529 virtual bool TpmIsBeingOwned(bool* owning) OVERRIDE { | 546 virtual bool TpmIsBeingOwned(bool* owning) OVERRIDE { |
530 *owning = true; | 547 *owning = true; |
531 return true; | 548 return true; |
532 } | 549 } |
533 | 550 |
534 // CryptohomeClient override. | 551 // CryptohomeClient override. |
535 virtual bool TpmCanAttemptOwnership() OVERRIDE { return true; } | 552 virtual void TpmCanAttemptOwnership( |
| 553 const VoidMethodCallback& callback) OVERRIDE { |
| 554 MessageLoop::current()->PostTask( |
| 555 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS)); |
| 556 } |
536 | 557 |
537 // CryptohomeClient override. | 558 // CryptohomeClient override. |
538 virtual bool TpmClearStoredPassword() OVERRIDE { return true; } | 559 virtual bool TpmClearStoredPassword() OVERRIDE { return true; } |
539 | 560 |
540 // CryptohomeClient override. | 561 // CryptohomeClient override. |
541 virtual void Pkcs11IsTpmTokenReady( | 562 virtual void Pkcs11IsTpmTokenReady( |
542 const BoolMethodCallback& callback) OVERRIDE { | 563 const BoolMethodCallback& callback) OVERRIDE { |
543 MessageLoop::current()->PostTask( | 564 MessageLoop::current()->PostTask( |
544 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); | 565 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); |
545 } | 566 } |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
649 // static | 670 // static |
650 CryptohomeClient* CryptohomeClient::Create(DBusClientImplementationType type, | 671 CryptohomeClient* CryptohomeClient::Create(DBusClientImplementationType type, |
651 dbus::Bus* bus) { | 672 dbus::Bus* bus) { |
652 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) | 673 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) |
653 return new CryptohomeClientImpl(bus); | 674 return new CryptohomeClientImpl(bus); |
654 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); | 675 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); |
655 return new CryptohomeClientStubImpl(); | 676 return new CryptohomeClientStubImpl(); |
656 } | 677 } |
657 | 678 |
658 } // namespace chromeos | 679 } // namespace chromeos |
OLD | NEW |