Makes the is_blocking method public.
[chromium-blink-merge.git] / chromeos / cryptohome / async_method_caller.h
blob7414284e18876955f487b72a7c52285d613e1df6
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.
5 #ifndef CHROMEOS_CRYPTOHOME_ASYNC_METHOD_CALLER_H_
6 #define CHROMEOS_CRYPTOHOME_ASYNC_METHOD_CALLER_H_
8 #include <string>
10 #include "base/basictypes.h"
11 #include "base/callback_forward.h"
12 #include "chromeos/chromeos_export.h"
13 #include "chromeos/dbus/cryptohome_client.h"
14 #include "third_party/cros_system_api/dbus/service_constants.h"
16 namespace cryptohome {
18 // Note: This file is placed in ::cryptohome instead of ::chromeos::cryptohome
19 // since there is already a namespace ::cryptohome which holds the error code
20 // enum (MountError) and referencing ::chromeos::cryptohome and ::cryptohome
21 // within the same code is confusing.
23 // Flags for the AsyncMount method.
24 enum MountFlags {
25 MOUNT_FLAGS_NONE = 0, // Used to explicitly denote that no flags are
26 // set.
27 CREATE_IF_MISSING = 1, // Create a cryptohome if it does not exist yet.
28 ENSURE_EPHEMERAL = 1 << 1, // Ensure that the mount is ephemeral.
31 // This class manages calls to Cryptohome service's 'async' methods.
32 class CHROMEOS_EXPORT AsyncMethodCaller {
33 public:
34 // A callback type which is called back on the UI thread when the results of
35 // method calls are ready.
36 typedef base::Callback<void(bool success, MountError return_code)> Callback;
37 typedef base::Callback<void(bool success, const std::string& data)>
38 DataCallback;
40 virtual ~AsyncMethodCaller() {}
42 // Asks cryptohomed to asynchronously try to find the cryptohome for
43 // |user_email| and then use |passhash| to unlock the key.
44 // |callback| will be called with status info on completion.
45 virtual void AsyncCheckKey(const std::string& user_email,
46 const std::string& passhash,
47 Callback callback) = 0;
49 // Asks cryptohomed to asynchronously try to find the cryptohome for
50 // |user_email| and then change from using |old_hash| to lock the
51 // key to using |new_hash|.
52 // |callback| will be called with status info on completion.
53 virtual void AsyncMigrateKey(const std::string& user_email,
54 const std::string& old_hash,
55 const std::string& new_hash,
56 Callback callback) = 0;
58 // Asks cryptohomed to asynchronously try to find the cryptohome for
59 // |user_email| and then mount it using |passhash| to unlock the key.
60 // The |flags| are a combination of |MountFlags|:
61 // * CREATE_IF_MISSING Controls whether or not cryptohomed is asked to create
62 // a new cryptohome if one does not exist yet for
63 // |user_email|.
64 // * ENSURE_EPHEMERAL If |true|, the mounted cryptohome will be backed by
65 // tmpfs. If |false|, the ephemeral users policy decides
66 // whether tmpfs or an encrypted directory is used as the
67 // backend.
68 // |callback| will be called with status info on completion.
69 // If the |CREATE_IF_MISSING| flag is not given and no cryptohome exists
70 // for |user_email|, the expected result is
71 // callback.Run(false, kCryptohomeMountErrorUserDoesNotExist). Otherwise,
72 // the normal range of return codes is expected.
73 virtual void AsyncMount(const std::string& user_email,
74 const std::string& passhash,
75 int flags,
76 Callback callback) = 0;
78 // Asks cryptohomed to asynchronously try to add another |new_passhash| for
79 // |user_email| using |passhash| to unlock the key.
80 // |callback| will be called with status info on completion.
81 virtual void AsyncAddKey(const std::string& user_email,
82 const std::string& passhash,
83 const std::string& new_passhash,
84 Callback callback) = 0;
86 // Asks cryptohomed to asynchronously to mount a tmpfs for guest mode.
87 // |callback| will be called with status info on completion.
88 virtual void AsyncMountGuest(Callback callback) = 0;
90 // Asks cryptohomed to asynchrounously try to find the cryptohome for
91 // |public_mount_id| and then mount it using a passhash derived from
92 // |public_mount_id| and a secret. See AsyncMount for possible values for
93 // |flags|.
94 virtual void AsyncMountPublic(const std::string& public_mount_id,
95 int flags,
96 Callback callback) = 0;
98 // Asks cryptohomed to asynchronously try to find the cryptohome for
99 // |user_email| and then nuke it.
100 virtual void AsyncRemove(const std::string& user_email,
101 Callback callback) = 0;
103 // Asks cryptohomed to asynchronously create an attestation enrollment
104 // request. On success the data sent to |callback| is a request to be sent
105 // to the Privacy CA.
106 virtual void AsyncTpmAttestationCreateEnrollRequest(
107 const DataCallback& callback) = 0;
109 // Asks cryptohomed to asynchronously finish an attestation enrollment.
110 // |pca_response| is the response to the enrollment request emitted by the
111 // Privacy CA.
112 virtual void AsyncTpmAttestationEnroll(const std::string& pca_response,
113 const Callback& callback) = 0;
115 // Asks cryptohomed to asynchronously create an attestation certificate
116 // request according to |options|, which is a combination of
117 // attestation::AttestationCertificateOptions. On success the data sent to
118 // |callback| is a request to be sent to the Privacy CA.
119 virtual void AsyncTpmAttestationCreateCertRequest(
120 int options,
121 const DataCallback& callback) = 0;
123 // Asks cryptohomed to asynchronously finish an attestation certificate
124 // request. On success the data sent to |callback| is a certificate chain
125 // in PEM format. |pca_response| is the response to the certificate request
126 // emitted by the Privacy CA. |key_type| determines whether the certified key
127 // is to be associated with the current user. |key_name| is a name for the
128 // key.
129 virtual void AsyncTpmAttestationFinishCertRequest(
130 const std::string& pca_response,
131 chromeos::attestation::AttestationKeyType key_type,
132 const std::string& key_name,
133 const DataCallback& callback) = 0;
135 // Asks cryptohomed to asynchronously register the attestation key specified
136 // by |key_type| and |key_name|.
137 virtual void TpmAttestationRegisterKey(
138 chromeos::attestation::AttestationKeyType key_type,
139 const std::string& key_name,
140 const Callback& callback) = 0;
142 // Asks cryptohomed to asynchronously sign an enterprise challenge with the
143 // key specified by |key_type| and |key_name|. The |domain| and |device_id|
144 // parameters will be included in the challenge response. |challenge| must be
145 // a valid enterprise challenge. On success, the data sent to |callback| is
146 // the challenge response.
147 virtual void TpmAttestationSignEnterpriseChallenge(
148 chromeos::attestation::AttestationKeyType key_type,
149 const std::string& key_name,
150 const std::string& domain,
151 const std::string& device_id,
152 chromeos::attestation::AttestationChallengeOptions options,
153 const std::string& challenge,
154 const DataCallback& callback) = 0;
156 // Asks cryptohomed to asynchronously sign a simple challenge with the key
157 // specified by |key_type| and |key_name|. |challenge| can be any arbitrary
158 // set of bytes. On success, the data sent to |callback| is the challenge
159 // response.
160 virtual void TpmAttestationSignSimpleChallenge(
161 chromeos::attestation::AttestationKeyType key_type,
162 const std::string& key_name,
163 const std::string& challenge,
164 const DataCallback& callback) = 0;
166 // Asks cryptohome to asynchronously retrieve a string associated with given
167 // |user| that would be used in mount path instead of |user|.
168 // On success the data is sent to |callback|.
169 virtual void AsyncGetSanitizedUsername(
170 const std::string& user,
171 const DataCallback& callback) = 0;
173 // Creates the global AsyncMethodCaller instance.
174 static void Initialize();
176 // Similar to Initialize(), but can inject an alternative
177 // AsyncMethodCaller such as MockAsyncMethodCaller for testing.
178 // The injected object will be owned by the internal pointer and deleted
179 // by Shutdown().
180 static void InitializeForTesting(AsyncMethodCaller* async_method_caller);
182 // Destroys the global AsyncMethodCaller instance if it exists.
183 static void Shutdown();
185 // Returns a pointer to the global AsyncMethodCaller instance.
186 // Initialize() should already have been called.
187 static AsyncMethodCaller* GetInstance();
190 } // namespace cryptohome
192 #endif // CHROMEOS_CRYPTOHOME_ASYNC_METHOD_CALLER_H_