fake_cryptohome_client.cc revision 1e9bf3e0803691d0a228da41fc608347b6db4340
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), 201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) system_salt_(GetStubSystemSalt()), 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) locked_(false), 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) weak_ptr_factory_(this) {} 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)FakeCryptohomeClient::~FakeCryptohomeClient() {} 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::Init(dbus::Bus* bus) { 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::SetAsyncCallStatusHandlers( 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncCallStatusHandler& handler, 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncCallStatusWithDataHandler& data_handler) { 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) async_call_status_handler_ = handler; 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) async_call_status_data_handler_ = data_handler; 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::ResetAsyncCallStatusHandlers() { 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) async_call_status_handler_.Reset(); 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) async_call_status_data_handler_.Reset(); 39424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 40424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void FakeCryptohomeClient::WaitForServiceToBeAvailable( 428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const WaitForServiceToBeAvailableCallback& callback) { 438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (service_is_available_) { 448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::MessageLoop::current()->PostTask(FROM_HERE, 458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::Bind(callback, true)); 468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } else { 478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pending_wait_for_service_to_be_available_callbacks_.push_back(callback); 488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::IsMounted( 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool FakeCryptohomeClient::Unmount(bool* success) { 58b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) *success = unmount_result_; 59b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return true; 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncCheckKey( 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& username, 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key, 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncMigrateKey( 704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& username, 714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& from_key, 724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& to_key, 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const AsyncMethodCallback& callback) { 744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncRemove( 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& username, 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void FakeCryptohomeClient::GetSystemSalt( 841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const GetSystemSaltCallback& callback) { 851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::MessageLoop::current()->PostTask( 861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) FROM_HERE, 871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, system_salt_)); 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::GetSanitizedUsername( 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& username, 924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const StringDBusMethodCallback& callback) { 934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Even for stub implementation we have to return different values so that 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // multi-profiles would work. 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string sanitized_username = GetStubSanitizedUsername(username); 964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, sanitized_username)); 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)std::string FakeCryptohomeClient::BlockingGetSanitizedUsername( 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& username) { 1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return GetStubSanitizedUsername(username); 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncMount(const std::string& username, 1074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key, 1084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int flags, 1094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncAddKey( 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& username, 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key, 1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& new_key, 1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCryptohomeClient::AsyncMountGuest( 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const AsyncMethodCallback& callback) { 1234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 126a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void FakeCryptohomeClient::AsyncMountPublic( 127a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const std::string& public_mount_id, 128a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) int flags, 129a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const AsyncMethodCallback& callback) { 1304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 131a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 132a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmIsReady( 1344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmIsEnabled( 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 1414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::CallTpmIsEnabledAndBlock(bool* enabled) { 1464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *enabled = true; 1474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 1484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmGetPassword( 1514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const StringDBusMethodCallback& callback) { 1524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const char kStubTpmPassword[] = "Stub-TPM-password"; 1534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 1554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, 1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string(kStubTpmPassword))); 1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmIsOwned( 1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 1614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::CallTpmIsOwnedAndBlock(bool* owned) { 1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *owned = true; 1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 1684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmIsBeingOwned( 1714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 1744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::CallTpmIsBeingOwnedAndBlock(bool* owning) { 1774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *owning = true; 1784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCryptohomeClient::TpmCanAttemptOwnership( 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const VoidDBusMethodCallback& callback) { 1834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS)); 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmClearStoredPassword( 1884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const VoidDBusMethodCallback& callback) { 1894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS)); 1914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::CallTpmClearStoredPasswordAndBlock() { 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return true; 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::Pkcs11IsTpmTokenReady( 1984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 1994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 2004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::Pkcs11GetTpmTokenInfo( 2044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const Pkcs11GetTpmTokenInfoCallback& callback) { 2054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const char kStubUserPin[] = "012345"; 2064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const int kStubSlot = 0; 2074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 2084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 2094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(callback, 2104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DBUS_METHOD_CALL_SUCCESS, 2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string(crypto::kTestTPMTokenName), 2124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string(kStubUserPin), 2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kStubSlot)); 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::Pkcs11GetTpmTokenInfoForUser( 2174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& username, 2184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const Pkcs11GetTpmTokenInfoCallback& callback) { 2194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Pkcs11GetTpmTokenInfo(callback); 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::InstallAttributesGet(const std::string& name, 2234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::vector<uint8>* value, 2244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool* successful) { 2254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (install_attrs_.find(name) != install_attrs_.end()) { 2264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *value = install_attrs_[name]; 2274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *successful = true; 2284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } else { 2294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) value->clear(); 2304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *successful = false; 2314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 2324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool FakeCryptohomeClient::InstallAttributesSet( 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& name, 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::vector<uint8>& value, 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool* successful) { 2394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) install_attrs_[name] = value; 2404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *successful = true; 2414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::InstallAttributesFinalize(bool* successful) { 2454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) locked_ = true; 2464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *successful = true; 2474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCryptohomeClient::InstallAttributesIsReady( 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 2524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 2534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::InstallAttributesIsInvalid(bool* is_invalid) { 2574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *is_invalid = false; 2584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::InstallAttributesIsFirstInstall( 2624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool* is_first_install) { 2634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *is_first_install = !locked_; 2644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationIsPrepared( 2684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 2694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 2704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationIsEnrolled( 2744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 2754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 2764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncTpmAttestationCreateEnrollRequest( 2804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 2814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, true); 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncTpmAttestationEnroll( 2854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& pca_response, 2864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 2874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncTpmAttestationCreateCertRequest( 2914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) attestation::AttestationCertificateProfile certificate_profile, 2928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 2934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& request_origin, 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const AsyncMethodCallback& callback) { 2954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, true); 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncTpmAttestationFinishCertRequest( 2994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& pca_response, 3004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) attestation::AttestationKeyType key_type, 3018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 3024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key_name, 3034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 3044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, true); 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationDoesKeyExist( 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attestation::AttestationKeyType key_type, 3098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key_name, 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 3124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 3134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false)); 314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationGetCertificate( 317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attestation::AttestationKeyType key_type, 3188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key_name, 3204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const DataMethodCallback& callback) { 3214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 3224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 3234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false, std::string())); 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationGetPublicKey( 3274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) attestation::AttestationKeyType key_type, 3288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 3294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key_name, 3304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const DataMethodCallback& callback) { 331868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::MessageLoop::current()->PostTask( 332b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) FROM_HERE, 3334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false, std::string())); 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationRegisterKey( 3374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) attestation::AttestationKeyType key_type, 3388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 3394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key_name, 3404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 3414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, true); 342bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 343bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationSignEnterpriseChallenge( 345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attestation::AttestationKeyType key_type, 3468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key_name, 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& domain, 349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& device_id, 350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attestation::AttestationChallengeOptions options, 351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& challenge, 352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const AsyncMethodCallback& callback) { 3534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, true); 354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationSignSimpleChallenge( 3574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) attestation::AttestationKeyType key_type, 3588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 3594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key_name, 3604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& challenge, 3614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 3624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, true); 363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationGetKeyPayload( 366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attestation::AttestationKeyType key_type, 3678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key_name, 3694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const DataMethodCallback& callback) { 3704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 3714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 3724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false, std::string())); 373c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationSetKeyPayload( 3764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) attestation::AttestationKeyType key_type, 3778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 3784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key_name, 3794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& payload, 3804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 3814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 3824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false)); 383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void FakeCryptohomeClient::SetServiceIsAvailable(bool is_available) { 3868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service_is_available_ = is_available; 3878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (is_available) { 3888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) std::vector<WaitForServiceToBeAvailableCallback> callbacks; 3898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) callbacks.swap(pending_wait_for_service_to_be_available_callbacks_); 3908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) for (size_t i = 0; i < callbacks.size(); ++i) 3918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) callbacks[i].Run(is_available); 3928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 3938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 3948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 3954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// static 3964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)std::vector<uint8> FakeCryptohomeClient::GetStubSystemSalt() { 3974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const char kStubSystemSalt[] = "stub_system_salt"; 3984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return std::vector<uint8>(kStubSystemSalt, 3994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kStubSystemSalt + arraysize(kStubSystemSalt) - 1); 4004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 4014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::ReturnAsyncMethodResult( 4034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback, 4044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool returns_data) { 4054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 4064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 4074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(&FakeCryptohomeClient::ReturnAsyncMethodResultInternal, 4084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), 4094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) callback, 4104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) returns_data)); 4114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 4124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::ReturnAsyncMethodResultInternal( 4144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback, 4154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool returns_data) { 4164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) callback.Run(async_call_id_); 4174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!returns_data && !async_call_status_handler_.is_null()) { 4184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 4194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 4204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(async_call_status_handler_, 4214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) async_call_id_, 4224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) true, 4234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) cryptohome::MOUNT_ERROR_NONE)); 4244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } else if (returns_data && !async_call_status_data_handler_.is_null()) { 4254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 4264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 4274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(async_call_status_data_handler_, 4284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) async_call_id_, 4294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) true, 4304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string())); 4314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 4324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ++async_call_id_; 433c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace chromeos 436