blob: 6eb71ad545b796d9fcdcdea4a40880325464b61a [file] [log] [blame]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <memory>
#include <base/check.h>
#include <base/logging.h>
#include <base/memory/ptr_util.h>
#include <chromeos/dbus/service_constants.h>
#include "bootsplash/session_manager_client.h"
namespace bootsplash {
std::unique_ptr<SessionManagerClientInterface> SessionManagerClient::Create(
const scoped_refptr<dbus::Bus>& bus) {
return base::WrapUnique(new SessionManagerClient(bus));
}
SessionManagerClient::SessionManagerClient(
const scoped_refptr<dbus::Bus>& bus) {
proxy_ = std::make_unique<org::chromium::SessionManagerInterfaceProxy>(bus);
// Register Input Event signal Handler.
proxy_->RegisterLoginPromptVisibleSignalHandler(
base::BindRepeating(&SessionManagerClient::LoginPromptVisible,
weak_factory_.GetWeakPtr()),
base::BindOnce(&SessionManagerClient::OnSignalConnected,
weak_factory_.GetWeakPtr()));
}
void SessionManagerClient::AddObserver(SessionEventObserver* observer) {
DCHECK(observer);
observers_.AddObserver(observer);
}
bool SessionManagerClient::HasObserver(SessionEventObserver* observer) {
DCHECK(observer);
return observers_.HasObserver(observer);
}
void SessionManagerClient::RemoveObserver(SessionEventObserver* observer) {
DCHECK(observer);
observers_.RemoveObserver(observer);
}
void SessionManagerClient::LoginPromptVisible() {
for (auto& observer : observers_) {
observer.SessionManagerLoginPromptVisibleEventReceived();
}
}
void SessionManagerClient::OnSignalConnected(const std::string& interface_name,
const std::string& signal_name,
bool success) {
LOG(INFO) << __func__ << " interface: " << interface_name
<< " signal: " << signal_name << " success: " << success;
if (!success) {
LOG(ERROR) << "Failed to connect signal " << signal_name << " to interface "
<< interface_name;
}
}
} // namespace bootsplash