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