| Index: chromeos/attestation/attestation_flow.h
|
| diff --git a/chromeos/attestation/attestation_flow.h b/chromeos/attestation/attestation_flow.h
|
| index 26a7292d60a9d4eab6901f21e268e31b6a799846..d77e6cb87b44a6f2f8cb5b788322a557647ba6bd 100644
|
| --- a/chromeos/attestation/attestation_flow.h
|
| +++ b/chromeos/attestation/attestation_flow.h
|
| @@ -11,6 +11,8 @@
|
| #include "base/callback_forward.h"
|
| #include "base/macros.h"
|
| #include "base/memory/weak_ptr.h"
|
| +#include "base/time/time.h"
|
| +#include "base/timer/timer.h"
|
| #include "chromeos/attestation/attestation_constants.h"
|
| #include "chromeos/chromeos_export.h"
|
| #include "chromeos/dbus/dbus_method_call_status.h"
|
| @@ -46,11 +48,14 @@ class CHROMEOS_EXPORT ServerProxy {
|
| // Implements the message flow for Chrome OS attestation tasks. Generally this
|
| // consists of coordinating messages between the Chrome OS attestation service
|
| // and the Chrome OS Privacy CA server. Sample usage:
|
| +//
|
| // AttestationFlow flow(AsyncMethodCaller::GetInstance(),
|
| // DBusThreadManager::Get().GetCryptohomeClient(),
|
| // std::move(my_server_proxy));
|
| // AttestationFlow::CertificateCallback callback = base::Bind(&MyCallback);
|
| // flow.GetCertificate(ENTERPRISE_USER_CERTIFICATE, false, callback);
|
| +//
|
| +// This class is not thread safe.
|
| class CHROMEOS_EXPORT AttestationFlow {
|
| public:
|
| typedef base::Callback<void(bool success,
|
| @@ -82,6 +87,21 @@ class CHROMEOS_EXPORT AttestationFlow {
|
| std::unique_ptr<ServerProxy> server_proxy);
|
| virtual ~AttestationFlow();
|
|
|
| + // Sets the timeout for attestation to be ready.
|
| + void set_ready_timeout(base::TimeDelta ready_timeout) {
|
| + ready_timeout_ = ready_timeout;
|
| + }
|
| + // Gets the timeout for attestation to be ready.
|
| + base::TimeDelta ready_timeout() const { return ready_timeout_; }
|
| +
|
| + // Sets the retry delay.
|
| + void set_retry_delay(base::TimeDelta retry_delay) {
|
| + retry_delay_ = retry_delay;
|
| + }
|
| +
|
| + // Returns the retry delay.
|
| + base::TimeDelta retry_delay() { return retry_delay_; }
|
| +
|
| // Gets an attestation certificate for a hardware-protected key. If a key for
|
| // the given profile does not exist, it will be generated and a certificate
|
| // request will be made to the Chrome OS Privacy CA to issue a certificate for
|
| @@ -109,7 +129,19 @@ class CHROMEOS_EXPORT AttestationFlow {
|
| const CertificateCallback& callback);
|
|
|
| private:
|
| - // Asynchronously initiates the attestation enrollment flow.
|
| + // Asynchronously waits for attestation to be ready and start enrollment once
|
| + // it is. If attestation is not ready by the time the flow's timeout is
|
| + // reached, fail.
|
| + //
|
| + // Parameters
|
| + // retries_left - Number of retries left (-1 for infinite retries).
|
| + // on_failure - Called if any failure occurs.
|
| + // next_task - Called on successful enrollment.
|
| + void WaitForAttestationReadyAndStartEnroll(base::TimeTicks end_time,
|
| + const base::Closure& on_failure,
|
| + const base::Closure& next_task);
|
| +
|
| + // Called when attestation is prepared, to start the actual enrollment flow.
|
| //
|
| // Parameters
|
| // on_failure - Called if any failure occurs.
|
| @@ -223,10 +255,25 @@ class CHROMEOS_EXPORT AttestationFlow {
|
| const std::string& key_name,
|
| const CertificateCallback& callback);
|
|
|
| + // Checks whether attestation is ready. If it is, runs |next_task|. If not,
|
| + // reschedules a check after a delay unless we are out of retry time, in
|
| + // which case we run |on_failure|.
|
| + //
|
| + // Parameters
|
| + // end_time - The time at or past which we give up retrying.
|
| + // on_failure - Called if any failure occurs or after we give up retrying.
|
| + // next_task - Called when attestation is ready.
|
| + void CheckAttestationReadyAndReschedule(base::TimeTicks end_time,
|
| + const base::Closure& on_failure,
|
| + const base::Closure& next_task);
|
| +
|
| cryptohome::AsyncMethodCaller* async_caller_;
|
| CryptohomeClient* cryptohome_client_;
|
| std::unique_ptr<ServerProxy> server_proxy_;
|
|
|
| + base::TimeDelta ready_timeout_;
|
| + base::TimeDelta retry_delay_;
|
| +
|
| base::WeakPtrFactory<AttestationFlow> weak_factory_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(AttestationFlow);
|
|
|