summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/modules/credentialmanager/public_key_credential.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/credentialmanager/public_key_credential.cc')
-rw-r--r--chromium/third_party/blink/renderer/modules/credentialmanager/public_key_credential.cc29
1 files changed, 25 insertions, 4 deletions
diff --git a/chromium/third_party/blink/renderer/modules/credentialmanager/public_key_credential.cc b/chromium/third_party/blink/renderer/modules/credentialmanager/public_key_credential.cc
index e4a5d1c3afb..e219eb6b405 100644
--- a/chromium/third_party/blink/renderer/modules/credentialmanager/public_key_credential.cc
+++ b/chromium/third_party/blink/renderer/modules/credentialmanager/public_key_credential.cc
@@ -7,7 +7,8 @@
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
#include "third_party/blink/renderer/core/dom/dom_exception.h"
-#include "third_party/blink/renderer/core/dom/exception_code.h"
+#include "third_party/blink/renderer/modules/credentialmanager/credential_manager_proxy.h"
+#include "third_party/blink/renderer/modules/credentialmanager/scoped_promise_resolver.h"
#include "third_party/blink/renderer/platform/bindings/script_state.h"
namespace blink {
@@ -15,6 +16,12 @@ namespace blink {
namespace {
// https://www.w3.org/TR/webauthn/#dom-publickeycredential-type-slot:
constexpr char kPublicKeyCredentialType[] = "public-key";
+
+void OnIsUserVerifyingComplete(
+ std::unique_ptr<ScopedPromiseResolver> scoped_resolver,
+ bool available) {
+ scoped_resolver->Release()->Resolve(available);
+}
} // namespace
PublicKeyCredential* PublicKeyCredential::Create(
@@ -38,9 +45,23 @@ PublicKeyCredential::PublicKeyCredential(
ScriptPromise
PublicKeyCredential::isUserVerifyingPlatformAuthenticatorAvailable(
ScriptState* script_state) {
- return ScriptPromise::RejectWithDOMException(
- script_state,
- DOMException::Create(kNotSupportedError, "Operation not implemented."));
+ ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state);
+ ScriptPromise promise = resolver->Promise();
+
+ // Ignore calls if the current realm execution context is no longer valid,
+ // e.g., because the responsible document was detached.
+ DCHECK(resolver->GetExecutionContext());
+ if (resolver->GetExecutionContext()->IsContextDestroyed()) {
+ resolver->Reject();
+ return promise;
+ }
+
+ auto* authenticator =
+ CredentialManagerProxy::From(script_state)->Authenticator();
+ authenticator->IsUserVerifyingPlatformAuthenticatorAvailable(WTF::Bind(
+ &OnIsUserVerifyingComplete,
+ WTF::Passed(std::make_unique<ScopedPromiseResolver>(resolver))));
+ return promise;
}
void PublicKeyCredential::getClientExtensionResults(