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