blob: d89b31cf1225d5d230e2dc5ac298d181fc5ee6e0 [file] [log] [blame]
Ben Chan1e5a0cb2012-03-22 00:41:52 -07001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Ben Chana4c75062011-11-11 09:47:55 -08002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CROS_DISKS_DAEMON_H_
6#define CROS_DISKS_DAEMON_H_
7
Ben Chan445852f2017-10-02 23:00:16 -07008#include <memory>
9
Hidehiko Abe26ad98c2019-08-15 01:23:05 +090010#include <base/files/file_descriptor_watcher_posix.h>
Ben Chan445852f2017-10-02 23:00:16 -070011#include <brillo/daemons/dbus_daemon.h>
Simon Glass2b1da092020-05-21 12:24:16 -060012#include <brillo/process/process_reaper.h>
Ben Chana4c75062011-11-11 09:47:55 -080013
Sergei Datsenkoc9904bb2020-12-11 12:46:02 +110014#include "cros-disks/archive_manager.h"
Ben Chan5ccd9fe2013-11-13 18:28:27 -080015#include "cros-disks/cros_disks_server.h"
16#include "cros-disks/device_ejector.h"
17#include "cros-disks/device_event_moderator.h"
18#include "cros-disks/disk_manager.h"
Sergei Datsenko16821892019-04-05 11:26:38 +110019#include "cros-disks/disk_monitor.h"
Ben Chan5ccd9fe2013-11-13 18:28:27 -080020#include "cros-disks/format_manager.h"
Sergei Datsenko0f014d22018-04-04 16:37:22 +100021#include "cros-disks/fuse_mount_manager.h"
Ben Chana4c75062011-11-11 09:47:55 -080022#include "cros-disks/metrics.h"
Omid Tourzan7943a9d2020-08-31 13:54:36 +100023#include "cros-disks/partition_manager.h"
Ben Chana4c75062011-11-11 09:47:55 -080024#include "cros-disks/platform.h"
Klemen Kozjekb0658852017-08-15 13:03:48 +090025#include "cros-disks/rename_manager.h"
Ben Chan5ccd9fe2013-11-13 18:28:27 -080026#include "cros-disks/session_manager_proxy.h"
Ben Chana4c75062011-11-11 09:47:55 -080027
28namespace cros_disks {
29
Ben Chan445852f2017-10-02 23:00:16 -070030class Daemon : public brillo::DBusServiceDaemon {
Ben Chana4c75062011-11-11 09:47:55 -080031 public:
Mathieu Perreault8104e6b2016-04-18 14:54:47 -040032 // |has_session_manager| indicates whether the presence of a SessionManager is
33 // expected.
Ben Chan445852f2017-10-02 23:00:16 -070034 explicit Daemon(bool has_session_manager);
Qijiang Fan6bc59e12020-11-11 02:51:06 +090035 Daemon(const Daemon&) = delete;
36 Daemon& operator=(const Daemon&) = delete;
Ben Chana4c75062011-11-11 09:47:55 -080037
Ben Chan445852f2017-10-02 23:00:16 -070038 ~Daemon() override;
Ben Chana4c75062011-11-11 09:47:55 -080039
40 private:
Ben Chan445852f2017-10-02 23:00:16 -070041 // brillo::DBusServiceDaemon overrides:
42 void RegisterDBusObjectsAsync(
43 brillo::dbus_utils::AsyncEventSequencer* sequencer) override;
44
45 void OnDeviceEvents();
46
47 const bool has_session_manager_;
Ben Chana4c75062011-11-11 09:47:55 -080048 Metrics metrics_;
49 Platform platform_;
Ben Chan445852f2017-10-02 23:00:16 -070050 brillo::ProcessReaper process_reaper_;
Ben Chan1e5a0cb2012-03-22 00:41:52 -070051 DeviceEjector device_ejector_;
Sergei Datsenkoc9904bb2020-12-11 12:46:02 +110052 ArchiveManager archive_manager_;
Sergei Datsenko16821892019-04-05 11:26:38 +110053 DiskMonitor disk_monitor_;
Ben Chana4c75062011-11-11 09:47:55 -080054 DiskManager disk_manager_;
55 FormatManager format_manager_;
Omid Tourzan7943a9d2020-08-31 13:54:36 +100056 PartitionManager partition_manager_;
Klemen Kozjekb0658852017-08-15 13:03:48 +090057 RenameManager rename_manager_;
Sergei Datsenko0f014d22018-04-04 16:37:22 +100058 FUSEMountManager fuse_manager_;
Ben Chan445852f2017-10-02 23:00:16 -070059 std::unique_ptr<DeviceEventModerator> event_moderator_;
60 std::unique_ptr<SessionManagerProxy> session_manager_proxy_;
61 std::unique_ptr<CrosDisksServer> server_;
Hidehiko Abe26ad98c2019-08-15 01:23:05 +090062 std::unique_ptr<base::FileDescriptorWatcher::Controller>
63 device_event_watcher_;
Ben Chana4c75062011-11-11 09:47:55 -080064};
65
66} // namespace cros_disks
67
Ben Chan2bfa6242012-04-30 08:16:20 -070068#endif // CROS_DISKS_DAEMON_H_