summaryrefslogtreecommitdiffstats
path: root/dom/webauthn/MacOSWebAuthnService.mm
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:13:27 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:13:27 +0000
commit40a355a42d4a9444dc753c04c6608dade2f06a23 (patch)
tree871fc667d2de662f171103ce5ec067014ef85e61 /dom/webauthn/MacOSWebAuthnService.mm
parentAdding upstream version 124.0.1. (diff)
downloadfirefox-adbda400be353e676059e335c3c0aaf99e719475.tar.xz
firefox-adbda400be353e676059e335c3c0aaf99e719475.zip
Adding upstream version 125.0.1.upstream/125.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/webauthn/MacOSWebAuthnService.mm')
-rw-r--r--dom/webauthn/MacOSWebAuthnService.mm21
1 files changed, 21 insertions, 0 deletions
diff --git a/dom/webauthn/MacOSWebAuthnService.mm b/dom/webauthn/MacOSWebAuthnService.mm
index 79b9030541..cec9600e57 100644
--- a/dom/webauthn/MacOSWebAuthnService.mm
+++ b/dom/webauthn/MacOSWebAuthnService.mm
@@ -545,6 +545,19 @@ MacOSWebAuthnService::MakeCredential(uint64_t aTransactionId,
"MacOSWebAuthnService::MakeCredential",
[self = RefPtr{this}, browsingContextId(aBrowsingContextId),
aArgs = nsCOMPtr{aArgs}, aPromise = nsCOMPtr{aPromise}]() {
+ // Bug 1884574 - The Reset() call above should have cancelled any
+ // transactions that were dispatched to the platform, the platform
+ // should have called didCompleteWithError, and didCompleteWithError
+ // should have rejected the pending promise. However, in some scenarios,
+ // the platform fails to call the callback, and this leads to a
+ // diagnostic assertion failure when we drop `mRegisterPromise`. Avoid
+ // this by aborting the transaction here.
+ if (self->mRegisterPromise) {
+ MOZ_LOG(gMacOSWebAuthnServiceLog, mozilla::LogLevel::Debug,
+ ("MacOSAuthenticatorRequestDelegate::MakeCredential: "
+ "platform failed to call callback"));
+ self->AbortTransaction(NS_ERROR_DOM_ABORT_ERR);
+ }
self->mRegisterPromise = aPromise;
nsAutoString rpId;
@@ -847,6 +860,14 @@ void MacOSWebAuthnService::DoGetAssertion(
[self = RefPtr{this}, browsingContextId(aBrowsingContextId), aArgs,
aPromise,
aSelectedCredentialId = std::move(aSelectedCredentialId)]() mutable {
+ // Bug 1884574 - This AbortTransaction call is necessary.
+ // See comment in MacOSWebAuthnService::MakeCredential.
+ if (self->mSignPromise) {
+ MOZ_LOG(gMacOSWebAuthnServiceLog, mozilla::LogLevel::Debug,
+ ("MacOSAuthenticatorRequestDelegate::DoGetAssertion: "
+ "platform failed to call callback"));
+ self->AbortTransaction(NS_ERROR_DOM_ABORT_ERR);
+ }
self->mSignPromise = aPromise;
nsAutoString rpId;