blob: d12187a7ba20853193d9db04c5b850f6d201c64f [file] [log] [blame]
// Copyright 2021 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 DNS_PROXY_SESSION_MONITOR_H_
#define DNS_PROXY_SESSION_MONITOR_H_
#include <memory>
#include <string>
#include <base/callback_helpers.h>
#include <session_manager/dbus-proxies.h>
namespace dns_proxy {
// Monitors session manager for session state (login/logout) changes.
class SessionMonitor {
public:
explicit SessionMonitor(scoped_refptr<dbus::Bus> bus);
SessionMonitor(const SessionMonitor&) = delete;
SessionMonitor& operator=(const SessionMonitor&) = delete;
virtual ~SessionMonitor() = default;
// Attaches a handler to be called whenever the session state changes.
// A parameter value of |true| indicates a user is logging in, and |false|
// indicates a user is logging out.
void RegisterSessionStateHandler(base::RepeatingCallback<void(bool)> handler);
protected:
// Handles the SessionStateChanged DBus signal.
void OnSessionStateChanged(const std::string& state);
private:
org::chromium::SessionManagerInterfaceProxy proxy_;
base::RepeatingCallback<void(bool)> handler_;
base::WeakPtrFactory<SessionMonitor> weak_ptr_factory_;
};
} // namespace dns_proxy
#endif // DNS_PROXY_SESSION_MONITOR_H_