blob: 13c930b7cc163a41990d9a00f2087ec63084c3ae [file] [log] [blame]
// Copyright 2020 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 PCIGUARD_EVENT_HANDLER_H_
#define PCIGUARD_EVENT_HANDLER_H_
#include "pciguard/authorizer.h"
#include <memory>
namespace pciguard {
// A class for handling all events.
class EventHandler {
public:
explicit EventHandler(SysfsUtils* utils);
EventHandler(const EventHandler&) = delete;
EventHandler& operator=(const EventHandler&) = delete;
~EventHandler() = default;
void OnUserLogin();
void OnUserLogout();
void OnScreenLocked();
void OnScreenUnlocked();
void OnUserPermissionChanged(bool new_permission);
void OnNewThunderboltDev(base::FilePath path);
private:
enum {
NO_USER_LOGGED_IN,
USER_LOGGED_IN_BUT_SCREEN_LOCKED,
USER_LOGGED_IN_SCREEN_UNLOCKED,
} state_;
std::unique_ptr<Authorizer> authorizer_;
// Protects concurrent access to state_ and authorizer_
std::mutex lock_;
// User Permission from chrome browser, to allow external PCI devices.
bool user_permission_;
SysfsUtils* utils_;
// Logs the event
void LogEvent(const char ev[]);
friend class EventHandlerTest;
};
} // namespace pciguard
#endif // PCIGUARD_EVENT_HANDLER_H_