| // Copyright 2012 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "cros-disks/daemon.h" |
| |
| #include <base/check.h> |
| #include <chromeos/dbus/service_constants.h> |
| |
| namespace cros_disks { |
| |
| Daemon::Daemon(bool has_session_manager) |
| : brillo::DBusServiceDaemon(kCrosDisksServiceName), |
| has_session_manager_(has_session_manager) { |
| process_reaper_.Register(this); |
| CHECK(platform_.SetMountUser("chronos")); |
| CHECK(archive_manager_.Initialize()); |
| CHECK(disk_manager_.Initialize()); |
| CHECK(fuse_manager_.Initialize()); |
| } |
| |
| Daemon::~Daemon() = default; |
| |
| void Daemon::RegisterDBusObjectsAsync( |
| brillo::dbus_utils::AsyncEventSequencer* sequencer) { |
| server_ = std::make_unique<CrosDisksServer>( |
| bus_, &platform_, &disk_monitor_, &format_manager_, &partition_manager_, |
| &rename_manager_); |
| |
| // Register mount managers with the commonly used ones come first. |
| server_->RegisterMountManager(&disk_manager_); |
| server_->RegisterMountManager(&archive_manager_); |
| server_->RegisterMountManager(&fuse_manager_); |
| |
| event_moderator_ = std::make_unique<DeviceEventModerator>( |
| server_.get(), &disk_monitor_, has_session_manager_); |
| |
| if (has_session_manager_) { |
| session_manager_proxy_ = std::make_unique<SessionManagerProxy>(bus_); |
| session_manager_proxy_->AddObserver(server_.get()); |
| session_manager_proxy_->AddObserver(event_moderator_.get()); |
| } |
| |
| device_event_watcher_ = base::FileDescriptorWatcher::WatchReadable( |
| disk_monitor_.udev_monitor_fd(), |
| base::BindRepeating(&DeviceEventModerator::ProcessDeviceEvents, |
| base::Unretained(event_moderator_.get()))); |
| |
| server_->RegisterAsync( |
| sequencer->GetHandler("Failed to export cros-disks service.", false)); |
| } |
| |
| } // namespace cros_disks |