| // Copyright 2024 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <libarc-attestation/lib/manager.h> |
| #include <libarc-attestation/lib/manager_base.h> |
| |
| namespace arc_attestation { |
| |
| ArcAttestationManagerSingleton* ArcAttestationManagerSingleton::Get() { |
| if (g_instance == nullptr) { |
| g_instance = new ArcAttestationManagerSingleton(); |
| g_instance->Setup(); |
| } |
| return g_instance; |
| } |
| |
| ArcAttestationManagerSingleton* |
| ArcAttestationManagerSingleton::CreateForTesting() { |
| CHECK(!g_instance); |
| g_instance = new ArcAttestationManagerSingleton(); |
| return g_instance; |
| } |
| |
| void ArcAttestationManagerSingleton::DestroyForTesting() { |
| if (g_instance) { |
| delete g_instance; |
| g_instance = nullptr; |
| } |
| } |
| |
| void ArcAttestationManagerSingleton::SetManagerForTesting( |
| std::unique_ptr<ArcAttestationManagerBase> manager) { |
| manager_ = std::move(manager); |
| } |
| |
| ArcAttestationManagerBase* ArcAttestationManagerSingleton::manager() { |
| return manager_.get(); |
| } |
| |
| ArcAttestationManagerSingleton::ArcAttestationManagerSingleton() |
| : manager_(nullptr) {} |
| |
| void ArcAttestationManagerSingleton::Setup() { |
| CHECK(!manager_); |
| manager_ = std::make_unique<ArcAttestationManager>(); |
| manager_->Setup(); |
| } |
| |
| // This instance is intentionally allowed to leak as this is a singleton in a |
| // library. |
| ArcAttestationManagerSingleton* ArcAttestationManagerSingleton::g_instance; |
| |
| } // namespace arc_attestation |