Avi Drissman | 4e1b7bc3 | 2022-09-15 14:03:50 | [diff] [blame] | 1 | // Copyright 2017 The Chromium Authors |
kpaulhamus | 7c9f0094 | 2017-06-30 11:08:45 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #include "content/browser/webauth/authenticator_impl.h" |
| 6 | |
Martin Kreichgauer | 7d2b8dbb | 2021-04-01 16:03:45 | [diff] [blame] | 7 | #include <memory> |
Kim Paulhamus | fbe092bf | 2017-11-21 16:46:08 | [diff] [blame] | 8 | #include <utility> |
kpaulhamus | 7c9f0094 | 2017-06-30 11:08:45 | [diff] [blame] | 9 | |
Amos Lim | 12696e5e3 | 2022-09-16 07:37:58 | [diff] [blame] | 10 | #include "content/browser/webauth/authenticator_common_impl.h" |
Daniel Cheng | 9fb887ff | 2021-10-01 20:27:38 | [diff] [blame] | 11 | #include "content/public/browser/document_service.h" |
kpaulhamus | 7c9f0094 | 2017-06-30 11:08:45 | [diff] [blame] | 12 | #include "content/public/browser/render_frame_host.h" |
Martin Kreichgauer | 977c0047 | 2018-11-29 00:09:04 | [diff] [blame] | 13 | |
kpaulhamus | 7c9f0094 | 2017-06-30 11:08:45 | [diff] [blame] | 14 | namespace content { |
| 15 | |
Martin Kreichgauer | 7d2b8dbb | 2021-04-01 16:03:45 | [diff] [blame] | 16 | void AuthenticatorImpl::Create( |
| 17 | RenderFrameHost* render_frame_host, |
| 18 | mojo::PendingReceiver<blink::mojom::Authenticator> receiver) { |
danakj | c70aec1f | 2022-07-07 15:48:19 | [diff] [blame] | 19 | CHECK(render_frame_host); |
Sreeja Kamishetty | e49854f8 | 2021-06-02 00:52:03 | [diff] [blame] | 20 | // Avoid creating the service if the RenderFrameHost isn't active, e.g. if a |
Martin Kreichgauer | 7d2b8dbb | 2021-04-01 16:03:45 | [diff] [blame] | 21 | // request arrives during a navigation. |
Sreeja Kamishetty | e49854f8 | 2021-06-02 00:52:03 | [diff] [blame] | 22 | if (!render_frame_host->IsActive()) { |
Martin Kreichgauer | 7d2b8dbb | 2021-04-01 16:03:45 | [diff] [blame] | 23 | return; |
| 24 | } |
Martin Kreichgauer | 7d2b8dbb | 2021-04-01 16:03:45 | [diff] [blame] | 25 | // AuthenticatorImpl owns itself. It self-destructs when the RenderFrameHost |
Daniel Cheng | 9fb887ff | 2021-10-01 20:27:38 | [diff] [blame] | 26 | // navigates or is deleted. See DocumentService for details. |
Martin Kreichgauer | 7d2b8dbb | 2021-04-01 16:03:45 | [diff] [blame] | 27 | new AuthenticatorImpl( |
danakj | c70aec1f | 2022-07-07 15:48:19 | [diff] [blame] | 28 | *render_frame_host, std::move(receiver), |
Adam Langley | 3ec44c2 | 2023-08-10 01:04:01 | [diff] [blame] | 29 | std::make_unique<AuthenticatorCommonImpl>( |
| 30 | render_frame_host, |
| 31 | AuthenticatorCommonImpl::ServingRequestsFor::kWebContents)); |
Martin Kreichgauer | 7d2b8dbb | 2021-04-01 16:03:45 | [diff] [blame] | 32 | } |
Kim Paulhamus | 40de29e4 | 2017-12-07 04:14:08 | [diff] [blame] | 33 | |
danakj | c70aec1f | 2022-07-07 15:48:19 | [diff] [blame] | 34 | void AuthenticatorImpl::CreateForTesting( |
| 35 | RenderFrameHost& render_frame_host, |
| 36 | mojo::PendingReceiver<blink::mojom::Authenticator> receiver, |
Amos Lim | 12696e5e3 | 2022-09-16 07:37:58 | [diff] [blame] | 37 | std::unique_ptr<AuthenticatorCommonImpl> authenticator_common_impl) { |
danakj | c70aec1f | 2022-07-07 15:48:19 | [diff] [blame] | 38 | new AuthenticatorImpl(render_frame_host, std::move(receiver), |
Amos Lim | 12696e5e3 | 2022-09-16 07:37:58 | [diff] [blame] | 39 | std::move(authenticator_common_impl)); |
danakj | c70aec1f | 2022-07-07 15:48:19 | [diff] [blame] | 40 | } |
| 41 | |
Manas Verma | 9ba1369 | 2019-03-21 21:01:00 | [diff] [blame] | 42 | AuthenticatorImpl::AuthenticatorImpl( |
danakj | c70aec1f | 2022-07-07 15:48:19 | [diff] [blame] | 43 | RenderFrameHost& render_frame_host, |
Martin Kreichgauer | 7d2b8dbb | 2021-04-01 16:03:45 | [diff] [blame] | 44 | mojo::PendingReceiver<blink::mojom::Authenticator> receiver, |
Amos Lim | 12696e5e3 | 2022-09-16 07:37:58 | [diff] [blame] | 45 | std::unique_ptr<AuthenticatorCommonImpl> authenticator_common_impl) |
Daniel Cheng | 9fb887ff | 2021-10-01 20:27:38 | [diff] [blame] | 46 | : DocumentService(render_frame_host, std::move(receiver)), |
Amos Lim | 12696e5e3 | 2022-09-16 07:37:58 | [diff] [blame] | 47 | authenticator_common_impl_(std::move(authenticator_common_impl)) { |
| 48 | authenticator_common_impl_->EnableRequestProxyExtensionsAPISupport(); |
| 49 | DCHECK(authenticator_common_impl_); |
kpaulhamus | 7c9f0094 | 2017-06-30 11:08:45 | [diff] [blame] | 50 | } |
| 51 | |
Adam Langley | b038582 | 2021-03-19 23:34:00 | [diff] [blame] | 52 | AuthenticatorImpl::~AuthenticatorImpl() = default; |
kpaulhamus | 7c9f0094 | 2017-06-30 11:08:45 | [diff] [blame] | 53 | |
Kim Paulhamus | fbe092bf | 2017-11-21 16:46:08 | [diff] [blame] | 54 | // mojom::Authenticator |
kpaulhamus | 7c9f0094 | 2017-06-30 11:08:45 | [diff] [blame] | 55 | void AuthenticatorImpl::MakeCredential( |
Amos Lim | dddb699 | 2018-07-19 22:14:32 | [diff] [blame] | 56 | blink::mojom::PublicKeyCredentialCreationOptionsPtr options, |
kpaulhamus | 7c9f0094 | 2017-06-30 11:08:45 | [diff] [blame] | 57 | MakeCredentialCallback callback) { |
Amos Lim | 12696e5e3 | 2022-09-16 07:37:58 | [diff] [blame] | 58 | authenticator_common_impl_->MakeCredential(origin(), std::move(options), |
| 59 | std::move(callback)); |
Kim Paulhamus | 021c362 | 2017-08-28 18:35:17 | [diff] [blame] | 60 | } |
Kim Paulhamus | fbe092bf | 2017-11-21 16:46:08 | [diff] [blame] | 61 | |
Amos Lim | 12696e5e3 | 2022-09-16 07:37:58 | [diff] [blame] | 62 | // mojom::Authenticator |
Adem Derinel | 72e11db | 2025-02-11 15:58:00 | [diff] [blame] | 63 | void AuthenticatorImpl::GetCredential( |
Amos Lim | dddb699 | 2018-07-19 22:14:32 | [diff] [blame] | 64 | blink::mojom::PublicKeyCredentialRequestOptionsPtr options, |
Adem Derinel | 72e11db | 2025-02-11 15:58:00 | [diff] [blame] | 65 | GetCredentialCallback callback) { |
| 66 | authenticator_common_impl_->GetCredential(origin(), std::move(options), |
| 67 | /*payment=*/nullptr, |
| 68 | std::move(callback)); |
Kim Paulhamus | 9d87fb0d | 2018-01-18 18:36:22 | [diff] [blame] | 69 | } |
| 70 | |
Gabriel Viera | 7bc08f21 | 2024-07-10 15:42:33 | [diff] [blame] | 71 | // mojom::Authenticator |
| 72 | void AuthenticatorImpl::Report( |
| 73 | blink::mojom::PublicKeyCredentialReportOptionsPtr options, |
| 74 | ReportCallback callback) { |
| 75 | authenticator_common_impl_->Report(origin(), std::move(options), |
| 76 | std::move(callback)); |
| 77 | } |
| 78 | |
Andrii Natiahlyi | 1a4ab7d | 2024-08-23 22:16:51 | [diff] [blame] | 79 | // mojom::Authenticator |
| 80 | void AuthenticatorImpl::GetClientCapabilities( |
| 81 | GetClientCapabilitiesCallback callback) { |
Andrii Natiahlyi | 6b2f4b1 | 2024-09-03 14:58:42 | [diff] [blame] | 82 | authenticator_common_impl_->GetClientCapabilities(origin(), |
| 83 | std::move(callback)); |
Andrii Natiahlyi | 1a4ab7d | 2024-08-23 22:16:51 | [diff] [blame] | 84 | } |
| 85 | |
Kim Paulhamus | 0112af7 | 2018-05-31 00:23:59 | [diff] [blame] | 86 | void AuthenticatorImpl::IsUserVerifyingPlatformAuthenticatorAvailable( |
| 87 | IsUserVerifyingPlatformAuthenticatorAvailableCallback callback) { |
Amos Lim | 12696e5e3 | 2022-09-16 07:37:58 | [diff] [blame] | 88 | authenticator_common_impl_->IsUserVerifyingPlatformAuthenticatorAvailable( |
Martin Kreichgauer | 1f4aa59 | 2023-01-06 18:39:37 | [diff] [blame] | 89 | origin(), std::move(callback)); |
Kim Paulhamus | 0112af7 | 2018-05-31 00:23:59 | [diff] [blame] | 90 | } |
| 91 | |
Nina Satragno | c3444e8f | 2022-08-04 22:43:00 | [diff] [blame] | 92 | void AuthenticatorImpl::IsConditionalMediationAvailable( |
| 93 | IsConditionalMediationAvailableCallback callback) { |
Amos Lim | 12696e5e3 | 2022-09-16 07:37:58 | [diff] [blame] | 94 | authenticator_common_impl_->IsConditionalMediationAvailable( |
Martin Kreichgauer | 1f4aa59 | 2023-01-06 18:39:37 | [diff] [blame] | 95 | origin(), std::move(callback)); |
Nina Satragno | c3444e8f | 2022-08-04 22:43:00 | [diff] [blame] | 96 | } |
| 97 | |
Suzy Li | d4dda9c | 2019-05-10 17:36:42 | [diff] [blame] | 98 | void AuthenticatorImpl::Cancel() { |
Amos Lim | 12696e5e3 | 2022-09-16 07:37:58 | [diff] [blame] | 99 | authenticator_common_impl_->Cancel(); |
Suzy Li | d4dda9c | 2019-05-10 17:36:42 | [diff] [blame] | 100 | } |
| 101 | |
Martin Kreichgauer | 2c9e535 | 2018-10-30 23:28:53 | [diff] [blame] | 102 | } // namespace content |