blob: 887821468204d84a6489edb4d1e42e846093baa0 [file] [log] [blame]
// 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_