// Copyright (c) 2011 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 CHROME_BROWSER_CHROMEOS_LOGIN_CRYPTOHOME_OP_H_ #define CHROME_BROWSER_CHROMEOS_LOGIN_CRYPTOHOME_OP_H_ #pragma once #include <string> #include "base/memory/ref_counted.h" #include "chrome/browser/chromeos/cros/cryptohome_library.h" namespace chromeos { class AuthAttemptState; class AuthAttemptStateResolver; class CryptohomeOp : public base::RefCountedThreadSafe<CryptohomeOp>, public CryptohomeLibrary::Delegate { public: static CryptohomeOp* CreateMountAttempt(AuthAttemptState* current_attempt, AuthAttemptStateResolver* callback, bool create_if_missing); static CryptohomeOp* CreateMountGuestAttempt( AuthAttemptState* current_attempt, AuthAttemptStateResolver* callback); static CryptohomeOp* CreateMigrateAttempt(AuthAttemptState* current_attempt, AuthAttemptStateResolver* callback, bool passing_old_hash, const std::string& hash); static CryptohomeOp* CreateRemoveAttempt(AuthAttemptState* current_attempt, AuthAttemptStateResolver* callback); static CryptohomeOp* CreateCheckKeyAttempt( AuthAttemptState* current_attempt, AuthAttemptStateResolver* callback); virtual bool Initiate() = 0; // Implementation of CryptohomeLibrary::Delegate. virtual void OnComplete(bool success, int return_code); protected: CryptohomeOp(AuthAttemptState* current_attempt, AuthAttemptStateResolver* callback); virtual ~CryptohomeOp(); virtual void TriggerResolve(bool offline_outcome, int offline_code); AuthAttemptState* const attempt_; AuthAttemptStateResolver* const resolver_; private: friend class base::RefCountedThreadSafe<CryptohomeOp>; DISALLOW_COPY_AND_ASSIGN(CryptohomeOp); }; } // namespace chromeos #endif // CHROME_BROWSER_CHROMEOS_LOGIN_CRYPTOHOME_OP_H_