1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_WEBAUTHN_ANDROID_INTERNAL_AUTHENTICATOR_ANDROID_H_
#define COMPONENTS_WEBAUTHN_ANDROID_INTERNAL_AUTHENTICATOR_ANDROID_H_
#include <jni.h>
#include <cstdint>
#include <string>
#include <vector>
#include "base/android/scoped_java_ref.h"
#include "components/webauthn/core/browser/internal_authenticator.h"
#include "content/public/browser/global_routing_id.h"
#include "third_party/blink/public/mojom/webauthn/authenticator.mojom.h"
namespace url {
class Origin;
}
namespace content {
class RenderFrameHost;
} // namespace content
namespace webauthn {
// Implementation of the public InternalAuthenticator interface.
// This class is meant only for trusted and internal components of Chrome to
// use. The Android implementation is in
// org.chromium.chrome.browser.webauth.AuthenticatorImpl.
// When MakeCredential() or GetAssertion() is called, the Java implementation
// passes the response through InvokeMakeCredentialResponse() and
// InvokeGetAssertionResponse(), which eventually invokes the callback given by
// the original caller.
class InternalAuthenticatorAndroid : public webauthn::InternalAuthenticator {
public:
explicit InternalAuthenticatorAndroid(
content::RenderFrameHost* render_frame_host);
~InternalAuthenticatorAndroid() override;
// InternalAuthenticator:
void SetEffectiveOrigin(const url::Origin& origin) override;
void SetPaymentOptions(blink::mojom::PaymentOptionsPtr payment) override;
void MakeCredential(
blink::mojom::PublicKeyCredentialCreationOptionsPtr options,
blink::mojom::Authenticator::MakeCredentialCallback callback) override;
void GetAssertion(blink::mojom::PublicKeyCredentialRequestOptionsPtr options,
GetAssertionCallback callback) override;
void IsUserVerifyingPlatformAuthenticatorAvailable(
blink::mojom::Authenticator::
IsUserVerifyingPlatformAuthenticatorAvailableCallback callback)
override;
bool IsGetMatchingCredentialIdsSupported() override;
void GetMatchingCredentialIds(
const std::string& relying_party_id,
const std::vector<std::vector<uint8_t>>& credential_ids,
bool require_third_party_payment_bit,
webauthn::GetMatchingCredentialIdsCallback callback) override;
void Cancel() override;
content::RenderFrameHost* GetRenderFrameHost() override;
void InvokeMakeCredentialResponse(
JNIEnv* env,
jint status,
const base::android::JavaParamRef<jobject>& byte_buffer);
void InvokeGetAssertionResponse(
JNIEnv* env,
jint status,
const base::android::JavaParamRef<jobject>& byte_buffer);
void InvokeIsUserVerifyingPlatformAuthenticatorAvailableResponse(
JNIEnv* env,
jboolean is_uvpaa);
void InvokeGetMatchingCredentialIdsResponse(
JNIEnv* env,
const base::android::JavaParamRef<jobjectArray>& credential_ids_array);
private:
// Returns the associated AuthenticatorImpl Java object. Initializes new
// instance if not done so already in order to avoid possibility of any null
// pointer issues.
base::android::JavaRef<jobject>& GetJavaObject();
const content::GlobalRenderFrameHostId render_frame_host_id_;
base::android::ScopedJavaGlobalRef<jobject> java_internal_authenticator_ref_;
blink::mojom::Authenticator::MakeCredentialCallback
make_credential_response_callback_;
GetAssertionCallback get_assertion_response_callback_;
blink::mojom::Authenticator::
IsUserVerifyingPlatformAuthenticatorAvailableCallback is_uvpaa_callback_;
webauthn::GetMatchingCredentialIdsCallback
get_matching_credential_ids_callback_;
};
} // namespace webauthn
#endif // COMPONENTS_WEBAUTHN_ANDROID_INTERNAL_AUTHENTICATOR_ANDROID_H_
|