blob: 2daf2d5b32a8d9d8dfe496938389bd419d43f275 [file] [log] [blame] [edit]
// Copyright 2024 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef HEARTD_DAEMON_MOJO_SERVICE_H_
#define HEARTD_DAEMON_MOJO_SERVICE_H_
#include <mojo/public/cpp/bindings/pending_receiver.h>
#include <mojo/public/cpp/bindings/remote.h>
#include <mojo_service_manager/lib/mojom/service_manager.mojom.h>
#include <mojo_service_manager/lib/simple_mojo_service_provider.h>
#include "heartd/daemon/action_runner.h"
#include "heartd/daemon/heartbeat_manager.h"
#include "heartd/daemon/sheriffs/heartbeat_verifier.h"
#include "heartd/daemon/top_sheriff.h"
#include "heartd/mojom/heartd.mojom.h"
namespace heartd {
// Implements the Mojo interface exposed by the heartd daemon.
// See the API definition at //heartd/mojom/heartd.mojom.
class HeartdMojoService final : public ash::heartd::mojom::HeartbeatService,
public ash::heartd::mojom::HeartdControl {
public:
explicit HeartdMojoService(HeartbeatManager* heartbeat_manager,
ActionRunner* action_runner,
TopSheriff* top_sheriff);
HeartdMojoService(const HeartdMojoService&) = delete;
HeartdMojoService& operator=(const HeartdMojoService&) = delete;
~HeartdMojoService() override;
// ash::heartd::mojom::HeartbeatService overrides:
void Register(ash::heartd::mojom::ServiceName name,
ash::heartd::mojom::HeartbeatServiceArgumentPtr argument,
mojo::PendingReceiver<ash::heartd::mojom::Pacemaker> receiver,
RegisterCallback callback) override;
// ash::heartd::mojom::HeartdControl overrides:
void EnableNormalRebootAction() override;
void EnableForceRebootAction() override;
void RunAction(ash::heartd::mojom::ActionType action,
RunActionCallback callback) override;
private:
// Mojo remote to mojo service manager, used to register mojo interface.
mojo::Remote<chromeos::mojo_service_manager::mojom::ServiceManager>
service_manager_;
// Mojo service providers to provide heartbeat services interface to mojo
// service manager.
chromeos::mojo_service_manager::SimpleMojoServiceProvider<
ash::heartd::mojom::HeartbeatService>
heartbeat_service_provider_{this};
// Mojo service providers to provide heartd control interface to mojo service
// manager.
chromeos::mojo_service_manager::SimpleMojoServiceProvider<
ash::heartd::mojom::HeartdControl>
heartd_control_provider_{this};
// Unowned pointer. Should outlive this instance.
// It is used to register new heartbeat tracker.
HeartbeatManager* const heartbeat_manager_;
// Unowned pointer. Should outlive this instance.
// It is used to configure the actions.
ActionRunner* const action_runner_;
// Unowned pointer. Should outlive this instance.
// It is used to run the sheriff task such as heartbeat verifier.
TopSheriff* const top_sheriff_;
// It is owned by TopSheriff and has the same lifecycle with heartd.
HeartbeatVerifier* heartbeat_verifier_;
};
} // namespace heartd
#endif // HEARTD_DAEMON_MOJO_SERVICE_H_