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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 OVERRIDE { | 46 OVERRIDE { |
47 async_call_status_handler_ = handler; | 47 async_call_status_handler_ = handler; |
48 } | 48 } |
49 | 49 |
50 // CryptohomeClient override. | 50 // CryptohomeClient override. |
51 virtual void ResetAsyncCallStatusHandler() OVERRIDE { | 51 virtual void ResetAsyncCallStatusHandler() OVERRIDE { |
52 async_call_status_handler_.Reset(); | 52 async_call_status_handler_.Reset(); |
53 } | 53 } |
54 | 54 |
55 // CryptohomeClient override. | 55 // CryptohomeClient override. |
56 virtual bool IsMounted(bool* is_mounted) OVERRIDE { | 56 virtual void IsMounted(const BoolMethodCallback& callback) { |
57 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeIsMounted); | 57 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeIsMounted); |
58 return CallBoolMethodAndBlock(&method_call, is_mounted); | 58 CallBoolMethod(&method_call, callback); |
59 } | 59 } |
60 | 60 |
61 // CryptohomeClient override. | 61 // CryptohomeClient override. |
62 virtual bool Unmount(bool *success) OVERRIDE { | 62 virtual bool Unmount(bool *success) OVERRIDE { |
63 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeUnmount); | 63 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeUnmount); |
64 return CallBoolMethodAndBlock(&method_call, success); | 64 return CallBoolMethodAndBlock(&method_call, success); |
65 } | 65 } |
66 | 66 |
67 // CryptohomeClient override. | 67 // CryptohomeClient override. |
68 virtual void AsyncCheckKey(const std::string& username, | 68 virtual void AsyncCheckKey(const std::string& username, |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 void TpmIsReady(const BoolMethodCallback& callback) 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 proxy_->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, | 156 CallBoolMethod(&method_call, callback); |
157 base::Bind( | |
158 &CryptohomeClientImpl::OnBoolMethod, | |
159 weak_ptr_factory_.GetWeakPtr(), | |
160 callback)); | |
161 } | 157 } |
162 | 158 |
163 // CryptohomeClient override. | 159 // CryptohomeClient override. |
164 virtual void TpmIsEnabled(const BoolMethodCallback& callback) OVERRIDE { | 160 virtual void TpmIsEnabled(const BoolMethodCallback& callback) OVERRIDE { |
165 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeTpmIsEnabled); | 161 INITIALIZE_METHOD_CALL(method_call, cryptohome::kCryptohomeTpmIsEnabled); |
166 proxy_->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, | 162 CallBoolMethod(&method_call, callback); |
167 base::Bind( | |
168 &CryptohomeClientImpl::OnBoolMethod, | |
169 weak_ptr_factory_.GetWeakPtr(), | |
170 callback)); | |
171 } | 163 } |
172 | 164 |
173 // CryptohomeClient override. | 165 // CryptohomeClient override. |
174 // TODO(hashimoto): Remove this method. crosbug.com/28500 | 166 // TODO(hashimoto): Remove this method. crosbug.com/28500 |
175 virtual bool CallTpmIsEnabledAndBlock(bool* enabled) OVERRIDE { | 167 virtual bool CallTpmIsEnabledAndBlock(bool* enabled) OVERRIDE { |
176 // We don't use INITIALIZE_METHOD_CALL here because the C++ method name is | 168 // We don't use INITIALIZE_METHOD_CALL here because the C++ method name is |
177 // different from the D-Bus method name (TpmIsEnabled). | 169 // different from the D-Bus method name (TpmIsEnabled). |
178 dbus::MethodCall method_call(cryptohome::kCryptohomeInterface, | 170 dbus::MethodCall method_call(cryptohome::kCryptohomeInterface, |
179 cryptohome::kCryptohomeTpmIsEnabled); | 171 cryptohome::kCryptohomeTpmIsEnabled); |
180 return CallBoolMethodAndBlock(&method_call, enabled); | 172 return CallBoolMethodAndBlock(&method_call, enabled); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 scoped_ptr<dbus::Response> response( | 210 scoped_ptr<dbus::Response> response( |
219 blocking_method_caller_.CallMethodAndBlock(&method_call)); | 211 blocking_method_caller_.CallMethodAndBlock(&method_call)); |
220 return response.get() != NULL; | 212 return response.get() != NULL; |
221 } | 213 } |
222 | 214 |
223 // CryptohomeClient override. | 215 // CryptohomeClient override. |
224 virtual void Pkcs11IsTpmTokenReady(const BoolMethodCallback& callback) | 216 virtual void Pkcs11IsTpmTokenReady(const BoolMethodCallback& callback) |
225 OVERRIDE { | 217 OVERRIDE { |
226 INITIALIZE_METHOD_CALL(method_call, | 218 INITIALIZE_METHOD_CALL(method_call, |
227 cryptohome::kCryptohomePkcs11IsTpmTokenReady); | 219 cryptohome::kCryptohomePkcs11IsTpmTokenReady); |
228 proxy_->CallMethod( | 220 CallBoolMethod(&method_call, callback); |
229 &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, | |
230 base::Bind( | |
231 &CryptohomeClientImpl::OnBoolMethod, | |
232 weak_ptr_factory_.GetWeakPtr(), | |
233 callback)); | |
234 } | 221 } |
235 | 222 |
236 // CryptohomeClient override. | 223 // CryptohomeClient override. |
237 virtual void Pkcs11GetTpmTokenInfo( | 224 virtual void Pkcs11GetTpmTokenInfo( |
238 const Pkcs11GetTpmTokenInfoCallback& callback) OVERRIDE { | 225 const Pkcs11GetTpmTokenInfoCallback& callback) OVERRIDE { |
239 INITIALIZE_METHOD_CALL(method_call, | 226 INITIALIZE_METHOD_CALL(method_call, |
240 cryptohome::kCryptohomePkcs11GetTpmTokenInfo); | 227 cryptohome::kCryptohomePkcs11GetTpmTokenInfo); |
241 proxy_->CallMethod( | 228 proxy_->CallMethod( |
242 &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, | 229 &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
243 base::Bind( | 230 base::Bind( |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 bool CallBoolMethodAndBlock(dbus::MethodCall* method_call, | 315 bool CallBoolMethodAndBlock(dbus::MethodCall* method_call, |
329 bool* result) { | 316 bool* result) { |
330 scoped_ptr<dbus::Response> response( | 317 scoped_ptr<dbus::Response> response( |
331 blocking_method_caller_.CallMethodAndBlock(method_call)); | 318 blocking_method_caller_.CallMethodAndBlock(method_call)); |
332 if (!response.get()) | 319 if (!response.get()) |
333 return false; | 320 return false; |
334 dbus::MessageReader reader(response.get()); | 321 dbus::MessageReader reader(response.get()); |
335 return reader.PopBool(result); | 322 return reader.PopBool(result); |
336 } | 323 } |
337 | 324 |
| 325 // Calls a method with a bool value result. |
| 326 void CallBoolMethod(dbus::MethodCall* method_call, |
| 327 const BoolMethodCallback& callback) { |
| 328 proxy_->CallMethod(method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
| 329 base::Bind( |
| 330 &CryptohomeClientImpl::OnBoolMethod, |
| 331 weak_ptr_factory_.GetWeakPtr(), |
| 332 callback)); |
| 333 } |
| 334 |
338 // Handles responses for methods with a bool value result. | 335 // Handles responses for methods with a bool value result. |
339 void OnBoolMethod(const BoolMethodCallback& callback, | 336 void OnBoolMethod(const BoolMethodCallback& callback, |
340 dbus::Response* response) { | 337 dbus::Response* response) { |
341 if (!response) { | 338 if (!response) { |
342 callback.Run(DBUS_METHOD_CALL_FAILURE, false); | 339 callback.Run(DBUS_METHOD_CALL_FAILURE, false); |
343 return; | 340 return; |
344 } | 341 } |
345 dbus::MessageReader reader(response); | 342 dbus::MessageReader reader(response); |
346 bool result = false; | 343 bool result = false; |
347 if (!reader.PopBool(&result)) { | 344 if (!reader.PopBool(&result)) { |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
433 OVERRIDE { | 430 OVERRIDE { |
434 async_call_status_handler_ = handler; | 431 async_call_status_handler_ = handler; |
435 } | 432 } |
436 | 433 |
437 // CryptohomeClient override. | 434 // CryptohomeClient override. |
438 virtual void ResetAsyncCallStatusHandler() OVERRIDE { | 435 virtual void ResetAsyncCallStatusHandler() OVERRIDE { |
439 async_call_status_handler_.Reset(); | 436 async_call_status_handler_.Reset(); |
440 } | 437 } |
441 | 438 |
442 // CryptohomeClient override. | 439 // CryptohomeClient override. |
443 virtual bool IsMounted(bool* is_mounted) OVERRIDE { | 440 virtual void IsMounted(const BoolMethodCallback& callback) OVERRIDE { |
444 *is_mounted = true; | 441 MessageLoop::current()->PostTask( |
445 return true; | 442 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); |
446 } | 443 } |
447 | 444 |
448 // CryptohomeClient override. | 445 // CryptohomeClient override. |
449 virtual bool Unmount(bool* success) OVERRIDE { | 446 virtual bool Unmount(bool* success) OVERRIDE { |
450 *success = true; | 447 *success = true; |
451 return true; | 448 return true; |
452 } | 449 } |
453 | 450 |
454 // CryptohomeClient override. | 451 // CryptohomeClient override. |
455 virtual void AsyncCheckKey(const std::string& username, | 452 virtual void AsyncCheckKey(const std::string& username, |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
649 // static | 646 // static |
650 CryptohomeClient* CryptohomeClient::Create(DBusClientImplementationType type, | 647 CryptohomeClient* CryptohomeClient::Create(DBusClientImplementationType type, |
651 dbus::Bus* bus) { | 648 dbus::Bus* bus) { |
652 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) | 649 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) |
653 return new CryptohomeClientImpl(bus); | 650 return new CryptohomeClientImpl(bus); |
654 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); | 651 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); |
655 return new CryptohomeClientStubImpl(); | 652 return new CryptohomeClientStubImpl(); |
656 } | 653 } |
657 | 654 |
658 } // namespace chromeos | 655 } // namespace chromeos |
OLD | NEW |