1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROMEOS_TPM_PASSWORD_FETCHER_H_ 6#define CHROMEOS_TPM_PASSWORD_FETCHER_H_ 7 8#include <string> 9 10#include "base/basictypes.h" 11#include "base/memory/weak_ptr.h" 12#include "chromeos/chromeos_export.h" 13#include "chromeos/dbus/dbus_method_call_status.h" 14 15namespace chromeos { 16 17// Interface which TpmPasswordFetcher uses to notify that password has been 18// fetched. 19class CHROMEOS_EXPORT TpmPasswordFetcherDelegate { 20 public: 21 virtual ~TpmPasswordFetcherDelegate() {} 22 virtual void OnPasswordFetched(const std::string& tpm_password) = 0; 23}; 24 25// Class for fetching TPM password from the Cryptohome. 26class CHROMEOS_EXPORT TpmPasswordFetcher { 27 public: 28 // Creates fetcher with the given delegate to be notified every time fetching 29 // is done. 30 explicit TpmPasswordFetcher(TpmPasswordFetcherDelegate* delegate); 31 ~TpmPasswordFetcher(); 32 33 // Fetches TPM password and stores the result. Also notifies |delegate_| with 34 // OnPasswordFetched() call. 35 void Fetch(); 36 37 private: 38 // Used to implement Fetch(). 39 void OnTpmIsReady(DBusMethodCallStatus call_status, bool tpm_is_ready); 40 41 // Used to implement Fetch(). 42 void OnTpmGetPassword(DBusMethodCallStatus call_status, 43 const std::string& password); 44 45 // Posts a task to call Fetch() later. 46 void RescheduleFetch(); 47 48 TpmPasswordFetcherDelegate* delegate_; 49 50 base::WeakPtrFactory<TpmPasswordFetcher> weak_factory_; 51 52 DISALLOW_COPY_AND_ASSIGN(TpmPasswordFetcher); 53}; 54 55} // namespace chromeos 56 57#endif // CHROMEOS_TPM_PASSWORD_FETCHER_H_ 58