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 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 return CallBoolMethodAndBlock(&method_call, owned); | 188 return CallBoolMethodAndBlock(&method_call, owned); |
189 } | 189 } |
190 | 190 |
191 // CryptohomeClient override. | 191 // CryptohomeClient override. |
192 virtual bool TpmIsBeingOwned(bool* owning) OVERRIDE { | 192 virtual bool TpmIsBeingOwned(bool* owning) OVERRIDE { |
193 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeTpmIsBeingOwned); | 193 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeTpmIsBeingOwned); |
194 return CallBoolMethodAndBlock(&method_call, owning); | 194 return CallBoolMethodAndBlock(&method_call, owning); |
195 } | 195 } |
196 | 196 |
197 // CryptohomeClient override. | 197 // CryptohomeClient override. |
198 virtual bool TpmCanAttemptOwnership() OVERRIDE { | 198 virtual void TpmCanAttemptOwnership( |
| 199 const VoidMethodCallback& callback) OVERRIDE { |
199 INITIALIZE_METHOD_CALL(method_call, | 200 INITIALIZE_METHOD_CALL(method_call, |
200 cryptohome::kCryptohomeTpmCanAttemptOwnership); | 201 cryptohome::kCryptohomeTpmCanAttemptOwnership); |
201 scoped_ptr<dbus::Response> response( | 202 CallVoidMethod(&method_call, callback); |
202 blocking_method_caller_.CallMethodAndBlock(&method_call)); | |
203 return response.get() != NULL; | |
204 } | 203 } |
205 | 204 |
206 // CryptohomeClient override. | 205 // CryptohomeClient override. |
207 virtual bool TpmClearStoredPassword() OVERRIDE { | 206 virtual bool TpmClearStoredPassword() OVERRIDE { |
208 INITIALIZE_METHOD_CALL(method_call, | 207 INITIALIZE_METHOD_CALL(method_call, |
209 cryptohome::kCryptohomeTpmClearStoredPassword); | 208 cryptohome::kCryptohomeTpmClearStoredPassword); |
210 scoped_ptr<dbus::Response> response( | 209 scoped_ptr<dbus::Response> response( |
211 blocking_method_caller_.CallMethodAndBlock(&method_call)); | 210 blocking_method_caller_.CallMethodAndBlock(&method_call)); |
212 return response.get() != NULL; | 211 return response.get() != NULL; |
213 } | 212 } |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 return; | 303 return; |
305 dbus::MessageReader reader(response); | 304 dbus::MessageReader reader(response); |
306 int async_id = 0; | 305 int async_id = 0; |
307 if (!reader.PopInt32(&async_id)) { | 306 if (!reader.PopInt32(&async_id)) { |
308 LOG(ERROR) << "Invalid response: " << response->ToString(); | 307 LOG(ERROR) << "Invalid response: " << response->ToString(); |
309 return; | 308 return; |
310 } | 309 } |
311 callback.Run(async_id); | 310 callback.Run(async_id); |
312 } | 311 } |
313 | 312 |
| 313 // Calls a method without result values. |
| 314 void CallVoidMethod(dbus::MethodCall* method_call, |
| 315 const VoidMethodCallback& callback) { |
| 316 proxy_->CallMethod(method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
| 317 base::Bind(&CryptohomeClientImpl::OnVoidMethod, |
| 318 weak_ptr_factory_.GetWeakPtr(), |
| 319 callback)); |
| 320 } |
| 321 |
| 322 void OnVoidMethod(const VoidMethodCallback& callback, |
| 323 dbus::Response* response) { |
| 324 if (!response) { |
| 325 callback.Run(DBUS_METHOD_CALL_FAILURE); |
| 326 return; |
| 327 } |
| 328 callback.Run(DBUS_METHOD_CALL_SUCCESS); |
| 329 } |
| 330 |
314 // Calls a method with a bool value reult and block. | 331 // Calls a method with a bool value reult and block. |
315 bool CallBoolMethodAndBlock(dbus::MethodCall* method_call, | 332 bool CallBoolMethodAndBlock(dbus::MethodCall* method_call, |
316 bool* result) { | 333 bool* result) { |
317 scoped_ptr<dbus::Response> response( | 334 scoped_ptr<dbus::Response> response( |
318 blocking_method_caller_.CallMethodAndBlock(method_call)); | 335 blocking_method_caller_.CallMethodAndBlock(method_call)); |
319 if (!response.get()) | 336 if (!response.get()) |
320 return false; | 337 return false; |
321 dbus::MessageReader reader(response.get()); | 338 dbus::MessageReader reader(response.get()); |
322 return reader.PopBool(result); | 339 return reader.PopBool(result); |
323 } | 340 } |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
522 return true; | 539 return true; |
523 } | 540 } |
524 | 541 |
525 // CryptohomeClient override. | 542 // CryptohomeClient override. |
526 virtual bool TpmIsBeingOwned(bool* owning) OVERRIDE { | 543 virtual bool TpmIsBeingOwned(bool* owning) OVERRIDE { |
527 *owning = true; | 544 *owning = true; |
528 return true; | 545 return true; |
529 } | 546 } |
530 | 547 |
531 // CryptohomeClient override. | 548 // CryptohomeClient override. |
532 virtual bool TpmCanAttemptOwnership() OVERRIDE { return true; } | 549 virtual void TpmCanAttemptOwnership( |
| 550 const VoidMethodCallback& callback) OVERRIDE { |
| 551 MessageLoop::current()->PostTask( |
| 552 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS)); |
| 553 } |
533 | 554 |
534 // CryptohomeClient override. | 555 // CryptohomeClient override. |
535 virtual bool TpmClearStoredPassword() OVERRIDE { return true; } | 556 virtual bool TpmClearStoredPassword() OVERRIDE { return true; } |
536 | 557 |
537 // CryptohomeClient override. | 558 // CryptohomeClient override. |
538 virtual void Pkcs11IsTpmTokenReady( | 559 virtual void Pkcs11IsTpmTokenReady( |
539 const BoolMethodCallback& callback) OVERRIDE { | 560 const BoolMethodCallback& callback) OVERRIDE { |
540 MessageLoop::current()->PostTask( | 561 MessageLoop::current()->PostTask( |
541 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); | 562 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); |
542 } | 563 } |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
646 // static | 667 // static |
647 CryptohomeClient* CryptohomeClient::Create(DBusClientImplementationType type, | 668 CryptohomeClient* CryptohomeClient::Create(DBusClientImplementationType type, |
648 dbus::Bus* bus) { | 669 dbus::Bus* bus) { |
649 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) | 670 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) |
650 return new CryptohomeClientImpl(bus); | 671 return new CryptohomeClientImpl(bus); |
651 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); | 672 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); |
652 return new CryptohomeClientStubImpl(); | 673 return new CryptohomeClientStubImpl(); |
653 } | 674 } |
654 | 675 |
655 } // namespace chromeos | 676 } // namespace chromeos |
OLD | NEW |