| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_TRUSTED_VAULT_RECOVERY_KEY_PROVIDER_ASH_H_ |
| #define COMPONENTS_TRUSTED_VAULT_RECOVERY_KEY_PROVIDER_ASH_H_ |
| |
| #include <optional> |
| #include <vector> |
| |
| #include "base/memory/scoped_refptr.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/sequence_checker.h" |
| #include "base/task/single_thread_task_runner.h" |
| #include "chromeos/ash/components/dbus/cryptohome/UserDataAuth.pb.h" |
| #include "chromeos/ash/components/dbus/cryptohome/recoverable_key_store.pb.h" |
| #include "chromeos/ash/components/dbus/userdataauth/userdataauth_client.h" |
| #include "components/account_id/account_id.h" |
| #include "components/signin/public/identity_manager/account_info.h" |
| #include "components/trusted_vault/recovery_key_store_connection.h" |
| #include "components/trusted_vault/recovery_key_store_controller.h" |
| #include "components/trusted_vault/trusted_vault_access_token_fetcher_frontend.h" |
| |
| namespace trusted_vault { |
| |
| // Fetches recovery key store data for ChromeOS devices, which contains a set of |
| // LSKF-wrapped keys. |
| class RecoveryKeyProviderAsh |
| : public RecoveryKeyStoreController::RecoveryKeyProvider { |
| public: |
| // `user_data_auth_client_task_runner` must be non-null and able to execute |
| // requests to `ash::UserDataAuthClient` (i.e. the main thread task runner). |
| RecoveryKeyProviderAsh(scoped_refptr<base::SequencedTaskRunner> |
| user_data_auth_client_task_runner, |
| AccountId account_id, |
| std::string device_id); |
| RecoveryKeyProviderAsh(const RecoveryKeyProviderAsh&) = delete; |
| RecoveryKeyProviderAsh& operator=(const RecoveryKeyProviderAsh&) = delete; |
| ~RecoveryKeyProviderAsh() override; |
| |
| void GetCurrentRecoveryKeyStoreData( |
| RecoveryKeyStoreDataCallback callback) override; |
| |
| private: |
| void OnUserDataAuthClientAvailable(RecoveryKeyStoreDataCallback callback, |
| bool is_available); |
| void OnGetRecoverableKeyStoresReply( |
| RecoveryKeyStoreDataCallback callback, |
| std::optional<user_data_auth::GetRecoverableKeyStoresReply> reply); |
| |
| // Used to schedule requests to `ash::UserDataAuthClient`. This must be the |
| // main thread task runner. |
| scoped_refptr<base::SequencedTaskRunner> user_data_auth_client_task_runner_; |
| |
| const AccountId account_id_; |
| const std::string device_id_; |
| |
| SEQUENCE_CHECKER(sequence_checker_); |
| |
| base::WeakPtrFactory<RecoveryKeyProviderAsh> weak_factory_{this}; |
| }; |
| |
| } // namespace trusted_vault |
| |
| #endif // COMPONENTS_TRUSTED_VAULT_RECOVERY_KEY_PROVIDER_ASH_H_ |