blob: 626d69fa614474891c505bd4681232cd93971c42 [file] [log] [blame]
// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// 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"
namespace {
const char kArchiveMountRootDirectory[] = "/media/archive";
const char kDiskMountRootDirectory[] = "/media/removable";
const char kNonPrivilegedMountUser[] = "chronos";
} // namespace
namespace cros_disks {
Daemon::Daemon(DBus::Connection* dbus_connection, bool has_session_manager)
: archive_manager_(kArchiveMountRootDirectory, &platform_, &metrics_),
disk_manager_(
kDiskMountRootDirectory, &platform_, &metrics_, &device_ejector_),
rename_manager_(&platform_),
server_(*dbus_connection,
&platform_,
&disk_manager_,
&format_manager_,
&rename_manager_),
event_moderator_(&server_, &disk_manager_, has_session_manager),
session_manager_proxy_(dbus_connection) {}
void Daemon::Initialize() {
// Register mount managers with the commonly used ones come first.
server_.RegisterMountManager(&disk_manager_);
server_.RegisterMountManager(&archive_manager_);
CHECK(platform_.SetMountUser(kNonPrivilegedMountUser))
<< "'" << kNonPrivilegedMountUser
<< "' is not available for non-privileged mount operations.";
CHECK(archive_manager_.Initialize())
<< "Failed to initialize the archive manager";
CHECK(disk_manager_.Initialize()) << "Failed to initialize the disk manager";
session_manager_proxy_.AddObserver(&server_);
session_manager_proxy_.AddObserver(&event_moderator_);
}
int Daemon::GetDeviceEventDescriptor() const {
return disk_manager_.udev_monitor_fd();
}
void Daemon::ProcessDeviceEvents() {
event_moderator_.ProcessDeviceEvents();
}
} // namespace cros_disks