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