// Copyright 2018 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "content/browser/webauth/virtual_discovery.h" #include #include "base/bind.h" #include "base/callback_helpers.h" #include "base/check.h" #include "base/location.h" #include "base/threading/thread_task_runner_handle.h" #include "content/browser/webauth/authenticator_environment_impl.h" #include "device/fido/fido_device.h" namespace content { VirtualFidoDiscovery::VirtualFidoDiscovery( ::device::FidoTransportProtocol transport) : FidoDeviceDiscovery(transport) {} VirtualFidoDiscovery::~VirtualFidoDiscovery() = default; void VirtualFidoDiscovery::AddVirtualDevice( std::unique_ptr<::device::FidoDevice> device) { // The real implementation would never notify the client's observer about // devices before the client calls Start(), mimic the same behavior. if (is_start_requested()) { FidoDeviceDiscovery::AddDevice(std::move(device)); } else { devices_pending_discovery_start_.push_back(std::move(device)); } } bool VirtualFidoDiscovery::RemoveVirtualDevice(base::StringPiece device_id) { DCHECK(is_start_requested()); return ::device::FidoDeviceDiscovery::RemoveDevice(device_id); } void VirtualFidoDiscovery::StartInternal() { for (auto& device : devices_pending_discovery_start_) FidoDeviceDiscovery::AddDevice(std::move(device)); devices_pending_discovery_start_.clear(); base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce(&VirtualFidoDiscovery::NotifyDiscoveryStarted, AsWeakPtr(), true /* success */)); } } // namespace content