// 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 CRYPTO_SCOPED_LACONTEXT_H_ #define CRYPTO_SCOPED_LACONTEXT_H_ #if defined(__OBJC__) #import #endif // defined(__OBJC__) #include #include "crypto/crypto_export.h" namespace crypto { // ScopedLAContext can hold an `LAContext` and is safe to pass around from C++. // ScopedLAContext functions as a unique pointer. The UI can create one with an // authenticated LAContext, then pass it down to the platform. class CRYPTO_EXPORT ScopedLAContext { public: #if defined(__OBJC__) // Takes ownership of |lacontext|. explicit ScopedLAContext(LAContext* lacontext); #endif // defined(__OBJC__) ~ScopedLAContext(); ScopedLAContext(ScopedLAContext&) = delete; ScopedLAContext(ScopedLAContext&&); ScopedLAContext& operator=(const ScopedLAContext&) = delete; ScopedLAContext& operator=(ScopedLAContext&&); #if defined(__OBJC__) // release returns the last `LAContext` passed on construction and drops its // reference to it. It is invalid to to call release more than once. LAContext* release(); #endif // defined(__OBJC__) private: struct ObjCStorage; std::unique_ptr storage_; }; } // namespace crypto #endif // CRYPTO_SCOPED_LACONTEXT_H_