| // Copyright 2016 The Chromium OS 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 BIOD_FAKE_BIOMETRICS_MANAGER_H_ |
| #define BIOD_FAKE_BIOMETRICS_MANAGER_H_ |
| |
| #include <memory> |
| #include <string> |
| #include <unordered_map> |
| #include <unordered_set> |
| #include <vector> |
| |
| #include <base/files/file_util.h> |
| #include <base/macros.h> |
| #include <base/message_loop/message_loop.h> |
| |
| #include "biod/biod_storage.h" |
| #include "biod/biometrics_manager.h" |
| #include "biod/fake_biometrics_manager_common.h" |
| |
| namespace biod { |
| |
| class FakeBiometricsManager : public BiometricsManager, |
| public base::MessageLoopForIO::Watcher { |
| public: |
| FakeBiometricsManager(); |
| |
| // base::MessageLoopForIO::Watcher overrides: |
| void OnFileCanWriteWithoutBlocking(int fd) override; |
| void OnFileCanReadWithoutBlocking(int fd) override; |
| |
| // BiometricsManager overrides: |
| BiometricType GetType() override; |
| BiometricsManager::EnrollSession StartEnrollSession( |
| std::string user_id, std::string label) override; |
| BiometricsManager::AuthSession StartAuthSession() override; |
| std::vector<std::unique_ptr<BiometricsManager::Record>> GetRecords() override; |
| bool DestroyAllRecords() override; |
| void RemoveRecordsFromMemory() override; |
| bool ReadRecords(const std::unordered_set<std::string>& user_ids) override; |
| |
| void SetEnrollScanDoneHandler(const BiometricsManager::EnrollScanDoneCallback& |
| on_enroll_scan_done) override; |
| void SetAuthScanDoneHandler(const BiometricsManager::AuthScanDoneCallback& |
| on_auth_scan_done) override; |
| void SetSessionFailedHandler(const BiometricsManager::SessionFailedCallback& |
| on_session_failed) override; |
| |
| protected: |
| void EndEnrollSession() override; |
| void EndAuthSession() override; |
| |
| private: |
| // This structure stores the record data internally to this class, and is |
| // exposed with our Record implementation. |
| struct InternalRecord { |
| std::string user_id; |
| std::string label; |
| }; |
| |
| // Our Record implementation is just a proxy for InternalRecord, which |
| // are all stored inside the FakeBiometricsManager object's records map. |
| class Record : public BiometricsManager::Record { |
| public: |
| Record(const base::WeakPtr<FakeBiometricsManager>& biometrics_manager, |
| std::string id) |
| : biometrics_manager_(biometrics_manager), id_(id) {} |
| |
| // BiometricsManager::Record overrides: |
| const std::string& GetId() const override; |
| const std::string& GetUserId() const override; |
| const std::string& GetLabel() const override; |
| bool SetLabel(std::string label) override; |
| bool Remove() override; |
| |
| private: |
| base::WeakPtr<FakeBiometricsManager> biometrics_manager_; |
| std::string id_; |
| |
| InternalRecord* GetInternal() const; |
| }; |
| |
| enum class Mode { |
| kNone, |
| kEnrollSession, |
| kAuthSession, |
| }; |
| |
| Mode mode_ = Mode::kNone; |
| |
| InternalRecord next_internal_record_; |
| std::unordered_map<std::string, InternalRecord> records_; |
| |
| base::ScopedFD fake_input_; |
| std::unique_ptr<base::MessageLoopForIO::FileDescriptorWatcher> fd_watcher_; |
| |
| BiometricsManager::EnrollScanDoneCallback on_enroll_scan_done_; |
| BiometricsManager::AuthScanDoneCallback on_auth_scan_done_; |
| BiometricsManager::SessionFailedCallback on_session_failed_; |
| |
| base::WeakPtrFactory<FakeBiometricsManager> session_weak_factory_; |
| base::WeakPtrFactory<FakeBiometricsManager> weak_factory_; |
| |
| BiodStorage biod_storage_; |
| |
| bool LoadRecord(const std::string& user_id, |
| const std::string& label, |
| const std::string& record_id, |
| const base::Value& data); |
| |
| DISALLOW_COPY_AND_ASSIGN(FakeBiometricsManager); |
| }; |
| } // namespace biod |
| |
| #endif // BIOD_FAKE_BIOMETRICS_MANAGER_H_ |