// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROMEOS_TPM_PASSWORD_FETCHER_H_ #define CHROMEOS_TPM_PASSWORD_FETCHER_H_ #include <string> #include "base/basictypes.h" #include "base/memory/weak_ptr.h" #include "chromeos/chromeos_export.h" #include "chromeos/dbus/dbus_method_call_status.h" namespace chromeos { // Interface which TpmPasswordFetcher uses to notify that password has been // fetched. class CHROMEOS_EXPORT TpmPasswordFetcherDelegate { public: virtual ~TpmPasswordFetcherDelegate() {} virtual void OnPasswordFetched(const std::string& tpm_password) = 0; }; // Class for fetching TPM password from the Cryptohome. class CHROMEOS_EXPORT TpmPasswordFetcher { public: // Creates fetcher with the given delegate to be notified every time fetching // is done. explicit TpmPasswordFetcher(TpmPasswordFetcherDelegate* delegate); ~TpmPasswordFetcher(); // Fetches TPM password and stores the result. Also notifies |delegate_| with // OnPasswordFetched() call. void Fetch(); private: // Used to implement Fetch(). void OnTpmIsReady(DBusMethodCallStatus call_status, bool tpm_is_ready); // Used to implement Fetch(). void OnTpmGetPassword(DBusMethodCallStatus call_status, const std::string& password); // Posts a task to call Fetch() later. void RescheduleFetch(); TpmPasswordFetcherDelegate* delegate_; base::WeakPtrFactory<TpmPasswordFetcher> weak_factory_; DISALLOW_COPY_AND_ASSIGN(TpmPasswordFetcher); }; } // namespace chromeos #endif // CHROMEOS_TPM_PASSWORD_FETCHER_H_