1 // Copyright 2019 The Chromium Authors. All rights reserved. 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/virtual_authenticator_request_delegate.h" 6 7 #include <utility> 8 #include <vector> 9 10 #include "base/callback.h" 11 #include "content/browser/webauth/authenticator_environment_impl.h" 12 #include "content/browser/webauth/virtual_authenticator.h" 13 #include "content/browser/webauth/virtual_fido_discovery_factory.h" 14 #include "device/fido/authenticator_get_assertion_response.h" 15 #include "device/fido/fido_transport_protocol.h" 16 17 namespace content { 18 VirtualAuthenticatorRequestDelegate(FrameTreeNode * frame_tree_node)19VirtualAuthenticatorRequestDelegate::VirtualAuthenticatorRequestDelegate( 20 FrameTreeNode* frame_tree_node) 21 : frame_tree_node_(frame_tree_node) {} 22 23 VirtualAuthenticatorRequestDelegate::~VirtualAuthenticatorRequestDelegate() = 24 default; 25 SupportsResidentKeys()26bool VirtualAuthenticatorRequestDelegate::SupportsResidentKeys() { 27 return true; 28 } 29 SelectAccount(std::vector<device::AuthenticatorGetAssertionResponse> responses,base::OnceCallback<void (device::AuthenticatorGetAssertionResponse)> callback)30void VirtualAuthenticatorRequestDelegate::SelectAccount( 31 std::vector<device::AuthenticatorGetAssertionResponse> responses, 32 base::OnceCallback<void(device::AuthenticatorGetAssertionResponse)> 33 callback) { 34 // TODO(crbug.com/991666): Provide a way to determine which account gets 35 // picked. 36 std::move(callback).Run(std::move(responses[0])); 37 } 38 39 base::Optional<bool> VirtualAuthenticatorRequestDelegate:: IsUserVerifyingPlatformAuthenticatorAvailableOverride()40 IsUserVerifyingPlatformAuthenticatorAvailableOverride() { 41 auto* virtual_discovery_factory = 42 AuthenticatorEnvironmentImpl::GetInstance()->GetVirtualFactoryFor( 43 frame_tree_node_); 44 if (!virtual_discovery_factory) { 45 return base::nullopt; 46 } 47 const auto& authenticators = virtual_discovery_factory->GetAuthenticators(); 48 return std::any_of(authenticators.begin(), authenticators.end(), 49 [](VirtualAuthenticator* a) { 50 return a->is_user_verifying_platform_authenticator(); 51 }); 52 } 53 54 } // namespace content 55