| // 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_ |