/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef MOZILLA_CREDENTIALCHOSENCALLBACK_H_ #define MOZILLA_CREDENTIALCHOSENCALLBACK_H_ #include "nsICredentialChosenCallback.h" #include "nsINamed.h" #include "nsStringFwd.h" #include "nsTArray.h" #include "mozilla/dom/IdentityCredentialSerializationHelpers.h" #include "mozilla/dom/Promise.h" namespace mozilla { using dom::IPCIdentityCredential; using dom::Promise; class CredentialChosenCallback final : public nsICredentialChosenCallback, public nsINamed { public: explicit CredentialChosenCallback( CopyableTArray&& aOptions, const RefPtr::Private>& aResult) : mOptions(aOptions), mResult(aResult) {} NS_IMETHOD Notify(const nsACString& aCredential) override; NS_IMETHOD GetName(nsACString& aName) override; NS_DECL_ISUPPORTS private: ~CredentialChosenCallback() { if (mResult) { mResult->Reject(NS_ERROR_FAILURE, __func__); } }; // mOptions is the list of credentials presented to the user in the credential // chooser. We maintain this list so we can resolve with the user's choice of // credential. CopyableTArray mOptions; // mResult is a promise that will fulfill once the user has made a choice. // Dismissal is represented as a reject(NS_OK), and selection resolves with // an entry of mOptions. RefPtr::Private> mResult; }; } // namespace mozilla #endif /* MOZILLA_CREDENTIALCHOSENCALLBACK_H_ */