blob: 116a7114fd7b7d4c3d92863250afc99c95d0a1c5 [file] [log] [blame]
// Copyright (c) 2013 The Chromium 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 "chrome/browser/chromeos/imageburner/burn_device_handler.h"
#include <string>
#include <vector>
#include "base/logging.h"
#include "chromeos/dbus/cros_disks_client.h"
#include "chromeos/disks/disk_mount_manager.h"
namespace chromeos {
namespace imageburner {
using disks::DiskMountManager;
namespace {
// Returns true when |disk| is a device on which we can burn recovery image.
bool IsBurnableDevice(const DiskMountManager::Disk& disk) {
return disk.is_parent() && !disk.on_boot_device() && disk.has_media() &&
(disk.device_type() == DEVICE_TYPE_USB ||
disk.device_type() == DEVICE_TYPE_SD);
}
} // namespace
BurnDeviceHandler::BurnDeviceHandler(DiskMountManager* disk_mount_manager)
: disk_mount_manager_(disk_mount_manager) {
DCHECK(disk_mount_manager_);
disk_mount_manager_->AddObserver(this);
}
BurnDeviceHandler::~BurnDeviceHandler() {
disk_mount_manager_->RemoveObserver(this);
}
void BurnDeviceHandler::SetCallbacks(const DiskCallback& add_callback,
const DiskCallback& remove_callback) {
add_callback_ = add_callback;
remove_callback_ = remove_callback;
}
std::vector<DiskMountManager::Disk> BurnDeviceHandler::GetBurnableDevices() {
const DiskMountManager::DiskMap& disks = disk_mount_manager_->disks();
std::vector<DiskMountManager::Disk> result;
for (DiskMountManager::DiskMap::const_iterator iter = disks.begin();
iter != disks.end();
++iter) {
const DiskMountManager::Disk& disk = *iter->second;
if (IsBurnableDevice(disk))
result.push_back(disk);
}
return result;
}
void BurnDeviceHandler::OnDiskEvent(DiskMountManager::DiskEvent event,
const DiskMountManager::Disk* disk) {
// We are only interested in burnable devices.
if (!IsBurnableDevice(*disk))
return;
switch (event) {
case DiskMountManager::DISK_ADDED:
add_callback_.Run(*disk);
break;
case DiskMountManager::DISK_REMOVED:
remove_callback_.Run(*disk);
break;
default: {
// Do nothing.
}
}
}
void BurnDeviceHandler::OnDeviceEvent(DiskMountManager::DeviceEvent event,
const std::string& device_path) {
// Do nothing.
}
void BurnDeviceHandler::OnMountEvent(
DiskMountManager::MountEvent event,
MountError error_code,
const DiskMountManager::MountPointInfo& mount_info) {
// Do nothing.
}
void BurnDeviceHandler::OnFormatEvent(DiskMountManager::FormatEvent event,
FormatError error_code,
const std::string& device_path) {
// Do nothing.
}
} // namespace imageburner
} // namespace chromeos