diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-12 05:35:37 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-12 05:35:37 +0000 |
commit | a90a5cba08fdf6c0ceb95101c275108a152a3aed (patch) | |
tree | 532507288f3defd7f4dcf1af49698bcb76034855 /security/manager/ssl/NSSSocketControl.cpp | |
parent | Adding debian version 126.0.1-1. (diff) | |
download | firefox-a90a5cba08fdf6c0ceb95101c275108a152a3aed.tar.xz firefox-a90a5cba08fdf6c0ceb95101c275108a152a3aed.zip |
Merging upstream version 127.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'security/manager/ssl/NSSSocketControl.cpp')
-rw-r--r-- | security/manager/ssl/NSSSocketControl.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/security/manager/ssl/NSSSocketControl.cpp b/security/manager/ssl/NSSSocketControl.cpp index e8f0f99dae..64c999701a 100644 --- a/security/manager/ssl/NSSSocketControl.cpp +++ b/security/manager/ssl/NSSSocketControl.cpp @@ -11,7 +11,9 @@ #include "nsISocketProvider.h" #include "secerr.h" #include "mozilla/Base64.h" +#include "mozilla/dom/Promise.h" #include "nsNSSCallbacks.h" +#include "nsProxyRelease.h" using namespace mozilla; using namespace mozilla::psm; @@ -293,6 +295,58 @@ NSSSocketControl::StartTLS() { } NS_IMETHODIMP +NSSSocketControl::AsyncStartTLS(JSContext* aCx, + mozilla::dom::Promise** aPromise) { + MOZ_RELEASE_ASSERT(NS_IsMainThread()); + NS_ENSURE_ARG_POINTER(aCx); + NS_ENSURE_ARG_POINTER(aPromise); + + nsIGlobalObject* globalObject = xpc::CurrentNativeGlobal(aCx); + if (!globalObject) { + return NS_ERROR_UNEXPECTED; + } + + ErrorResult result; + RefPtr<mozilla::dom::Promise> promise = + mozilla::dom::Promise::Create(globalObject, result); + if (result.Failed()) { + return result.StealNSResult(); + } + + nsCOMPtr<nsIEventTarget> target( + do_GetService(NS_SOCKETTRANSPORTSERVICE_CONTRACTID)); + if (!target) { + return NS_ERROR_UNEXPECTED; + } + + auto promiseHolder = MakeRefPtr<nsMainThreadPtrHolder<dom::Promise>>( + "AsyncStartTLS promise", promise); + + nsCOMPtr<nsIRunnable> runnable(NS_NewRunnableFunction( + "AsyncStartTLS::StartTLS", + [promiseHolder = std::move(promiseHolder), self = RefPtr{this}]() { + nsresult rv = self->StartTLS(); + NS_DispatchToMainThread(NS_NewRunnableFunction( + "AsyncStartTLS::Resolve", [rv, promiseHolder]() { + dom::Promise* promise = promiseHolder.get()->get(); + if (NS_FAILED(rv)) { + promise->MaybeReject(rv); + } else { + promise->MaybeResolveWithUndefined(); + } + })); + })); + + nsresult rv = target->Dispatch(runnable, NS_DISPATCH_NORMAL); + if (NS_FAILED(rv)) { + return rv; + } + + promise.forget(aPromise); + return NS_OK; +} + +NS_IMETHODIMP NSSSocketControl::SetNPNList(nsTArray<nsCString>& protocolArray) { COMMON_SOCKET_CONTROL_ASSERT_ON_OWNING_THREAD(); if (!mFd) return NS_ERROR_FAILURE; |