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