1 // Copyright (c) 2012 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 CHROME_BROWSER_CHROMEOS_LOGIN_TPM_PASSWORD_FETCHER_H_ 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_TPM_PASSWORD_FETCHER_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 #include "base/memory/weak_ptr.h" 12 #include "chromeos/dbus/dbus_method_call_status.h" 13 14 namespace chromeos { 15 16 // Interface which TpmPasswordFetcher uses to notify that password has been 17 // fetched. 18 class TpmPasswordFetcherDelegate { 19 public: 20 virtual ~TpmPasswordFetcherDelegate() {} 21 virtual void OnPasswordFetched(const std::string& tpm_password) = 0; 22 }; 23 24 // Class for fetching TPM password from the Cryptohome. 25 class TpmPasswordFetcher { 26 public: 27 // Creates fetcher with the given delegate to be notified every time fetching 28 // is done. 29 explicit TpmPasswordFetcher(TpmPasswordFetcherDelegate* delegate); 30 ~TpmPasswordFetcher(); 31 32 // Fetches TPM password and stores the result. Also notifies |delegate_| with 33 // OnPasswordFetched() call. 34 void Fetch(); 35 36 private: 37 // Used to implement Fetch(). 38 void OnTpmIsReady(DBusMethodCallStatus call_status, bool tpm_is_ready); 39 40 // Used to implement Fetch(). 41 void OnTpmGetPassword(DBusMethodCallStatus call_status, 42 const std::string& password); 43 44 // Posts a task to call Fetch() later. 45 void RescheduleFetch(); 46 47 base::WeakPtrFactory<TpmPasswordFetcher> weak_factory_; 48 TpmPasswordFetcherDelegate* delegate_; 49 50 DISALLOW_COPY_AND_ASSIGN(TpmPasswordFetcher); 51 }; 52 53 } // namespace chromeos 54 55 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_TPM_PASSWORD_FETCHER_H_ 56