| // 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. |
| |
| #ifndef DEVICE_FIDO_FIDO_DISCOVERY_BASE_H_ |
| #define DEVICE_FIDO_FIDO_DISCOVERY_BASE_H_ |
| |
| #include "base/component_export.h" |
| #include "base/logging.h" |
| #include "base/macros.h" |
| #include "device/fido/fido_transport_protocol.h" |
| |
| namespace device { |
| |
| class FidoAuthenticator; |
| |
| class COMPONENT_EXPORT(DEVICE_FIDO) FidoDiscoveryBase { |
| public: |
| virtual ~FidoDiscoveryBase(); |
| |
| class COMPONENT_EXPORT(DEVICE_FIDO) Observer { |
| public: |
| virtual ~Observer(); |
| |
| // It is guaranteed that this is never invoked synchronously from Start(). |
| virtual void DiscoveryStarted(FidoDiscoveryBase* discovery, bool success) {} |
| |
| // It is guaranteed that AuthenticatorAdded/AuthenticatorRemoved() will not |
| // be invoked before the client of FidoDiscoveryBase calls |
| // FidoDiscoveryBase::Start(). However, for authenticators already known to |
| // the system at that point, AuthenticatorAdded() might already be called to |
| // reported already known devices. |
| virtual void AuthenticatorAdded(FidoDiscoveryBase* discovery, |
| FidoAuthenticator* authenticator) = 0; |
| virtual void AuthenticatorRemoved(FidoDiscoveryBase* discovery, |
| FidoAuthenticator* authenticator) = 0; |
| |
| // Invoked when address of a connected FIDO Bluetooth device changes due |
| // to pairing. |
| virtual void AuthenticatorIdChanged(FidoDiscoveryBase* discovery, |
| const std::string& previous_id, |
| std::string new_id) = 0; |
| |
| // Invoked when connected Bluetooth device advertises that its pairing mode |
| // has changed. |
| virtual void AuthenticatorPairingModeChanged(FidoDiscoveryBase* discovery, |
| const std::string& device_id, |
| bool is_in_pairing_mode) = 0; |
| }; |
| |
| // Start authenticator discovery. The Observer must have been set before this |
| // method is invoked. DiscoveryStarted must be invoked asynchronously from |
| // this method. |
| virtual void Start() = 0; |
| |
| Observer* observer() const { return observer_; } |
| void set_observer(Observer* observer) { |
| DCHECK(!observer_ || !observer) << "Only one observer is supported."; |
| observer_ = observer; |
| } |
| FidoTransportProtocol transport() const { return transport_; } |
| |
| protected: |
| FidoDiscoveryBase(FidoTransportProtocol transport); |
| |
| private: |
| const FidoTransportProtocol transport_; |
| Observer* observer_ = nullptr; |
| |
| DISALLOW_COPY_AND_ASSIGN(FidoDiscoveryBase); |
| }; |
| |
| } // namespace device |
| |
| #endif // DEVICE_FIDO_FIDO_DISCOVERY_BASE_H_ |