fake_cryptohome_client.cc revision 8bcbed890bc3ce4d7a057a8f32cab53fa534672e
14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/dbus/fake_cryptohome_client.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/bind.h" 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/location.h" 99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "crypto/nss_util.h" 11b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace chromeos { 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)FakeCryptohomeClient::FakeCryptohomeClient() 168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) : service_is_available_(true), 178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) async_call_id_(1), 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) tpm_is_ready_counter_(0), 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) unmount_result_(true), 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) locked_(false), 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) weak_ptr_factory_(this) {} 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)FakeCryptohomeClient::~FakeCryptohomeClient() {} 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::Init(dbus::Bus* bus) { 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::SetAsyncCallStatusHandlers( 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncCallStatusHandler& handler, 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncCallStatusWithDataHandler& data_handler) { 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) async_call_status_handler_ = handler; 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) async_call_status_data_handler_ = data_handler; 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::ResetAsyncCallStatusHandlers() { 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) async_call_status_handler_.Reset(); 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) async_call_status_data_handler_.Reset(); 38424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 39424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void FakeCryptohomeClient::WaitForServiceToBeAvailable( 418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const WaitForServiceToBeAvailableCallback& callback) { 428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (service_is_available_) { 438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::MessageLoop::current()->PostTask(FROM_HERE, 448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::Bind(callback, true)); 458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } else { 468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pending_wait_for_service_to_be_available_callbacks_.push_back(callback); 478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::IsMounted( 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool FakeCryptohomeClient::Unmount(bool* success) { 57b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) *success = unmount_result_; 58b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return true; 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncCheckKey( 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& username, 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key, 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncMigrateKey( 694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& username, 704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& from_key, 714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& to_key, 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const AsyncMethodCallback& callback) { 734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncRemove( 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& username, 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::GetSystemSalt(std::vector<uint8>* salt) { 834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *salt = GetStubSystemSalt(); 844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::GetSanitizedUsername( 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& username, 894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const StringDBusMethodCallback& callback) { 904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Even for stub implementation we have to return different values so that 914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // multi-profiles would work. 924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string sanitized_username = GetStubSanitizedUsername(username); 934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, sanitized_username)); 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)std::string FakeCryptohomeClient::BlockingGetSanitizedUsername( 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& username) { 1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return GetStubSanitizedUsername(username); 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncMount(const std::string& username, 1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key, 1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int flags, 1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 1074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncAddKey( 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& username, 1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key, 1134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& new_key, 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCryptohomeClient::AsyncMountGuest( 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const AsyncMethodCallback& callback) { 1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 123a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void FakeCryptohomeClient::AsyncMountPublic( 124a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const std::string& public_mount_id, 125a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) int flags, 126a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const AsyncMethodCallback& callback) { 1274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 128a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 129a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmIsReady( 1314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 1324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmIsEnabled( 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 1384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::CallTpmIsEnabledAndBlock(bool* enabled) { 1434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *enabled = true; 1444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 1454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmGetPassword( 1484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const StringDBusMethodCallback& callback) { 1494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const char kStubTpmPassword[] = "Stub-TPM-password"; 1504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 1524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, 1534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string(kStubTpmPassword))); 1544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmIsOwned( 1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::CallTpmIsOwnedAndBlock(bool* owned) { 1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *owned = true; 1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmIsBeingOwned( 1684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 1714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::CallTpmIsBeingOwnedAndBlock(bool* owning) { 1744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *owning = true; 1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCryptohomeClient::TpmCanAttemptOwnership( 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const VoidDBusMethodCallback& callback) { 1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS)); 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmClearStoredPassword( 1854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const VoidDBusMethodCallback& callback) { 1864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS)); 1884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::CallTpmClearStoredPasswordAndBlock() { 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return true; 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::Pkcs11IsTpmTokenReady( 1954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 1964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::Pkcs11GetTpmTokenInfo( 2014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const Pkcs11GetTpmTokenInfoCallback& callback) { 2024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const char kStubUserPin[] = "012345"; 2034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const int kStubSlot = 0; 2044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 2054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 2064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(callback, 2074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DBUS_METHOD_CALL_SUCCESS, 2084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string(crypto::kTestTPMTokenName), 2094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string(kStubUserPin), 2104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kStubSlot)); 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::Pkcs11GetTpmTokenInfoForUser( 2144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& username, 2154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const Pkcs11GetTpmTokenInfoCallback& callback) { 2164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Pkcs11GetTpmTokenInfo(callback); 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::InstallAttributesGet(const std::string& name, 2204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::vector<uint8>* value, 2214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool* successful) { 2224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (install_attrs_.find(name) != install_attrs_.end()) { 2234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *value = install_attrs_[name]; 2244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *successful = true; 2254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } else { 2264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) value->clear(); 2274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *successful = false; 2284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 2294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool FakeCryptohomeClient::InstallAttributesSet( 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& name, 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::vector<uint8>& value, 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool* successful) { 2364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) install_attrs_[name] = value; 2374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *successful = true; 2384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::InstallAttributesFinalize(bool* successful) { 2424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) locked_ = true; 2434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *successful = true; 2444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCryptohomeClient::InstallAttributesIsReady( 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 2494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 2504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::InstallAttributesIsInvalid(bool* is_invalid) { 2544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *is_invalid = false; 2554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::InstallAttributesIsFirstInstall( 2594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool* is_first_install) { 2604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *is_first_install = !locked_; 2614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationIsPrepared( 2654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 2664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 2674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationIsEnrolled( 2714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 2724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 2734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncTpmAttestationCreateEnrollRequest( 2774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 2784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, true); 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncTpmAttestationEnroll( 2824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& pca_response, 2834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 2844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncTpmAttestationCreateCertRequest( 2884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) attestation::AttestationCertificateProfile certificate_profile, 2898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 2904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& request_origin, 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const AsyncMethodCallback& callback) { 2924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, true); 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncTpmAttestationFinishCertRequest( 2964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& pca_response, 2974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) attestation::AttestationKeyType key_type, 2988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 2994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key_name, 3004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 3014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, true); 302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationDoesKeyExist( 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attestation::AttestationKeyType key_type, 3068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key_name, 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 3094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 3104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false)); 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationGetCertificate( 314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attestation::AttestationKeyType key_type, 3158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key_name, 3174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const DataMethodCallback& callback) { 3184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 3194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 3204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false, std::string())); 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationGetPublicKey( 3244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) attestation::AttestationKeyType key_type, 3258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 3264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key_name, 3274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const DataMethodCallback& callback) { 328868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::MessageLoop::current()->PostTask( 329b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) FROM_HERE, 3304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false, std::string())); 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationRegisterKey( 3344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) attestation::AttestationKeyType key_type, 3358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 3364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key_name, 3374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 3384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, true); 339bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 340bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationSignEnterpriseChallenge( 342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attestation::AttestationKeyType key_type, 3438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key_name, 345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& domain, 346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& device_id, 347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attestation::AttestationChallengeOptions options, 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& challenge, 349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const AsyncMethodCallback& callback) { 3504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, true); 351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationSignSimpleChallenge( 3544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) attestation::AttestationKeyType key_type, 3558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 3564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key_name, 3574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& challenge, 3584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 3594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, true); 360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationGetKeyPayload( 363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attestation::AttestationKeyType key_type, 3648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key_name, 3664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const DataMethodCallback& callback) { 3674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 3684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 3694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false, std::string())); 370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationSetKeyPayload( 3734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) attestation::AttestationKeyType key_type, 3748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 3754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key_name, 3764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& payload, 3774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 3784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 3794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false)); 380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void FakeCryptohomeClient::SetServiceIsAvailable(bool is_available) { 3838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service_is_available_ = is_available; 3848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (is_available) { 3858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) std::vector<WaitForServiceToBeAvailableCallback> callbacks; 3868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) callbacks.swap(pending_wait_for_service_to_be_available_callbacks_); 3878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) for (size_t i = 0; i < callbacks.size(); ++i) 3888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) callbacks[i].Run(is_available); 3898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 3908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 3918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// static 3934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)std::vector<uint8> FakeCryptohomeClient::GetStubSystemSalt() { 3944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const char kStubSystemSalt[] = "stub_system_salt"; 3954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return std::vector<uint8>(kStubSystemSalt, 3964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kStubSystemSalt + arraysize(kStubSystemSalt) - 1); 3974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 3984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::ReturnAsyncMethodResult( 4004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback, 4014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool returns_data) { 4024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 4034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 4044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(&FakeCryptohomeClient::ReturnAsyncMethodResultInternal, 4054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), 4064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) callback, 4074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) returns_data)); 4084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 4094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::ReturnAsyncMethodResultInternal( 4114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback, 4124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool returns_data) { 4134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) callback.Run(async_call_id_); 4144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!returns_data && !async_call_status_handler_.is_null()) { 4154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 4164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 4174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(async_call_status_handler_, 4184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) async_call_id_, 4194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) true, 4204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) cryptohome::MOUNT_ERROR_NONE)); 4214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } else if (returns_data && !async_call_status_data_handler_.is_null()) { 4224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 4234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 4244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(async_call_status_data_handler_, 4254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) async_call_id_, 4264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) true, 4274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string())); 4284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 4294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ++async_call_id_; 430c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 431c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace chromeos 433