fake_fido_discovery.cc 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // Copyright 2018 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. #include "device/fido/fake_fido_discovery.h"
  5. #include <utility>
  6. #include "base/bind.h"
  7. #include "base/callback_helpers.h"
  8. #include "base/location.h"
  9. #include "base/notreached.h"
  10. #include "base/threading/sequenced_task_runner_handle.h"
  11. #include "testing/gtest/include/gtest/gtest.h"
  12. namespace device {
  13. namespace test {
  14. // FakeFidoDiscovery ----------------------------------------------------------
  15. FakeFidoDiscovery::FakeFidoDiscovery(FidoTransportProtocol transport,
  16. StartMode mode)
  17. : FidoDeviceDiscovery(transport), mode_(mode) {}
  18. void FakeFidoDiscovery::WaitForCallToStart() {
  19. wait_for_start_loop_.Run();
  20. }
  21. void FakeFidoDiscovery::SimulateStarted(bool success) {
  22. ASSERT_FALSE(is_running());
  23. NotifyDiscoveryStarted(success);
  24. }
  25. void FakeFidoDiscovery::WaitForCallToStartAndSimulateSuccess() {
  26. WaitForCallToStart();
  27. SimulateStarted(true /* success */);
  28. }
  29. void FakeFidoDiscovery::StartInternal() {
  30. wait_for_start_loop_.Quit();
  31. if (mode_ == StartMode::kAutomatic) {
  32. base::SequencedTaskRunnerHandle::Get()->PostTask(
  33. FROM_HERE, base::BindOnce(&FakeFidoDiscovery::SimulateStarted,
  34. AsWeakPtr(), true /* success */));
  35. }
  36. }
  37. // FakeFidoDiscoveryFactory ---------------------------------------------
  38. FakeFidoDiscoveryFactory::FakeFidoDiscoveryFactory() = default;
  39. FakeFidoDiscoveryFactory::~FakeFidoDiscoveryFactory() = default;
  40. FakeFidoDiscovery* FakeFidoDiscoveryFactory::ForgeNextHidDiscovery(
  41. FakeFidoDiscovery::StartMode mode) {
  42. next_hid_discovery_ = std::make_unique<FakeFidoDiscovery>(
  43. FidoTransportProtocol::kUsbHumanInterfaceDevice, mode);
  44. return next_hid_discovery_.get();
  45. }
  46. FakeFidoDiscovery* FakeFidoDiscoveryFactory::ForgeNextNfcDiscovery(
  47. FakeFidoDiscovery::StartMode mode) {
  48. next_nfc_discovery_ = std::make_unique<FakeFidoDiscovery>(
  49. FidoTransportProtocol::kNearFieldCommunication, mode);
  50. return next_nfc_discovery_.get();
  51. }
  52. FakeFidoDiscovery* FakeFidoDiscoveryFactory::ForgeNextCableDiscovery(
  53. FakeFidoDiscovery::StartMode mode) {
  54. next_cable_discovery_ =
  55. std::make_unique<FakeFidoDiscovery>(FidoTransportProtocol::kHybrid, mode);
  56. return next_cable_discovery_.get();
  57. }
  58. FakeFidoDiscovery* FakeFidoDiscoveryFactory::ForgeNextPlatformDiscovery(
  59. FakeFidoDiscovery::StartMode mode) {
  60. next_platform_discovery_ = std::make_unique<FakeFidoDiscovery>(
  61. FidoTransportProtocol::kInternal, mode);
  62. return next_platform_discovery_.get();
  63. }
  64. std::vector<std::unique_ptr<FidoDiscoveryBase>>
  65. FakeFidoDiscoveryFactory::Create(FidoTransportProtocol transport) {
  66. switch (transport) {
  67. case FidoTransportProtocol::kUsbHumanInterfaceDevice:
  68. return SingleDiscovery(std::move(next_hid_discovery_));
  69. case FidoTransportProtocol::kNearFieldCommunication:
  70. return SingleDiscovery(std::move(next_nfc_discovery_));
  71. case FidoTransportProtocol::kBluetoothLowEnergy:
  72. case FidoTransportProtocol::kAndroidAccessory:
  73. return {};
  74. case FidoTransportProtocol::kHybrid:
  75. return SingleDiscovery(std::move(next_cable_discovery_));
  76. case FidoTransportProtocol::kInternal:
  77. return SingleDiscovery(std::move(next_platform_discovery_));
  78. }
  79. NOTREACHED();
  80. return {};
  81. }
  82. } // namespace test
  83. } // namespace device