blob: c359977042741bf0e17d486d3975fe6f48659baa [file] [log] [blame]
// Copyright 2014 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/extensions/api/image_writer_private/removable_storage_provider.h"
#include "chromeos/disks/disk_mount_manager.h"
namespace extensions {
const char kUnknownSDDiskModel[] = "SD Card";
const char kUnknownUSBDiskModel[] = "USB Drive";
using chromeos::disks::DiskMountManager;
// The Chrome OS implementation takes advantage of the Chrome OS
// DiskMountManager. This does not expose whether the device is a removable or
// fixed disk. In fact, some SD cards will present themselves as fixed disks
// (see http://crbug.com/340761). Thus we just expose all USB and SD drives.
// static
scoped_refptr<StorageDeviceList>
RemovableStorageProvider::PopulateDeviceList() {
DiskMountManager* disk_mount_manager = DiskMountManager::GetInstance();
const DiskMountManager::DiskMap& disks = disk_mount_manager->disks();
scoped_refptr<StorageDeviceList> device_list(new StorageDeviceList());
for (DiskMountManager::DiskMap::const_iterator iter = disks.begin();
iter != disks.end();
++iter) {
const DiskMountManager::Disk& disk = *iter->second;
if (disk.is_parent() && !disk.on_boot_device() && disk.has_media() &&
(disk.device_type() == chromeos::DEVICE_TYPE_USB ||
disk.device_type() == chromeos::DEVICE_TYPE_SD)) {
api::image_writer_private::RemovableStorageDevice device;
device.storage_unit_id = disk.device_path();
device.capacity = disk.total_size_in_bytes();
device.removable = disk.on_removable_device();
device.vendor = disk.vendor_name();
device.model = disk.product_name();
if (device.model.empty() && device.vendor.empty()) {
if (disk.device_type() == chromeos::DEVICE_TYPE_USB) {
device.model = kUnknownUSBDiskModel;
} else {
device.model = kUnknownSDDiskModel;
}
}
device_list->data.push_back(std::move(device));
}
}
return device_list;
}
} // namespace extensions