root/chrome/browser/chromeos/imageburner/burn_device_handler.cc

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. IsBurnableDevice
  2. SetCallbacks
  3. GetBurnableDevices
  4. OnDiskEvent
  5. OnDeviceEvent
  6. OnMountEvent
  7. OnFormatEvent

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

/* [<][>][^][v][top][bottom][index][help] */