Index: chrome/browser/storage_monitor/removable_device_notifications_chromeos.cc |
diff --git a/chrome/browser/storage_monitor/removable_device_notifications_chromeos.cc b/chrome/browser/storage_monitor/removable_device_notifications_chromeos.cc |
deleted file mode 100644 |
index 9847fc5b1f43fe62aea382b0f596d91c3d354489..0000000000000000000000000000000000000000 |
--- a/chrome/browser/storage_monitor/removable_device_notifications_chromeos.cc |
+++ /dev/null |
@@ -1,255 +0,0 @@ |
-// Copyright (c) 2012 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. |
- |
-// chromeos::RemovableDeviceNotificationsCros implementation. |
- |
-#include "chrome/browser/storage_monitor/removable_device_notifications_chromeos.h" |
- |
-#include "base/files/file_path.h" |
-#include "base/logging.h" |
-#include "base/stl_util.h" |
-#include "base/string_util.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "base/utf_string_conversions.h" |
-#include "chrome/browser/storage_monitor/media_device_notifications_utils.h" |
-#include "chrome/browser/storage_monitor/media_storage_util.h" |
-#include "chrome/browser/storage_monitor/removable_device_constants.h" |
-#include "content/public/browser/browser_thread.h" |
- |
-namespace chromeos { |
- |
-namespace { |
- |
-// Constructs a device name using label or manufacturer (vendor and product) |
-// name details. |
-string16 GetDeviceName(const disks::DiskMountManager::Disk& disk) { |
- if (disk.device_type() == DEVICE_TYPE_SD) { |
- // Mount path of an SD card will be one of the following: |
- // (1) /media/removable/<volume_label> |
- // (2) /media/removable/SD Card |
- // If the volume label is available, mount path will be (1) else (2). |
- base::FilePath mount_point(disk.mount_path()); |
- const string16 display_name(mount_point.BaseName().LossyDisplayName()); |
- if (!display_name.empty()) |
- return display_name; |
- } |
- |
- const std::string& device_label = disk.device_label(); |
- if (!device_label.empty() && IsStringUTF8(device_label)) |
- return UTF8ToUTF16(device_label); |
- return chrome::GetFullProductName(disk.vendor_name(), disk.product_name()); |
-} |
- |
-// Constructs a device id using uuid or manufacturer (vendor and product) id |
-// details. |
-std::string MakeDeviceUniqueId(const disks::DiskMountManager::Disk& disk) { |
- std::string uuid = disk.fs_uuid(); |
- if (!uuid.empty()) |
- return chrome::kFSUniqueIdPrefix + uuid; |
- |
- // If one of the vendor or product information is missing, its value in the |
- // string is empty. |
- // Format: VendorModelSerial:VendorInfo:ModelInfo:SerialInfo |
- // TODO(kmadhusu) Extract serial information for the disks and append it to |
- // the device unique id. |
- const std::string& vendor = disk.vendor_id(); |
- const std::string& product = disk.product_id(); |
- if (vendor.empty() && product.empty()) |
- return std::string(); |
- return chrome::kVendorModelSerialPrefix + vendor + ":" + product + ":"; |
-} |
- |
-// Returns true if the requested device is valid, else false. On success, fills |
-// in |unique_id|, |device_label| and |storage_size_in_bytes|. |
-bool GetDeviceInfo(const std::string& source_path, |
- std::string* unique_id, |
- string16* device_label, |
- uint64* storage_size_in_bytes) { |
- const disks::DiskMountManager::Disk* disk = |
- disks::DiskMountManager::GetInstance()->FindDiskBySourcePath(source_path); |
- if (!disk || disk->device_type() == DEVICE_TYPE_UNKNOWN) |
- return false; |
- |
- if (unique_id) |
- *unique_id = MakeDeviceUniqueId(*disk); |
- |
- if (device_label) |
- *device_label = GetDeviceName(*disk); |
- |
- if (storage_size_in_bytes) |
- *storage_size_in_bytes = disk->total_size_in_bytes(); |
- return true; |
-} |
- |
-} // namespace |
- |
-using content::BrowserThread; |
- |
-RemovableDeviceNotificationsCros::RemovableDeviceNotificationsCros() { |
- DCHECK(disks::DiskMountManager::GetInstance()); |
- disks::DiskMountManager::GetInstance()->AddObserver(this); |
- CheckExistingMountPointsOnUIThread(); |
-} |
- |
-RemovableDeviceNotificationsCros::~RemovableDeviceNotificationsCros() { |
- disks::DiskMountManager* manager = disks::DiskMountManager::GetInstance(); |
- if (manager) { |
- manager->RemoveObserver(this); |
- } |
-} |
- |
-void RemovableDeviceNotificationsCros::CheckExistingMountPointsOnUIThread() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- const disks::DiskMountManager::MountPointMap& mount_point_map = |
- disks::DiskMountManager::GetInstance()->mount_points(); |
- for (disks::DiskMountManager::MountPointMap::const_iterator it = |
- mount_point_map.begin(); it != mount_point_map.end(); ++it) { |
- BrowserThread::PostTask( |
- BrowserThread::FILE, FROM_HERE, |
- base::Bind( |
- &RemovableDeviceNotificationsCros::CheckMountedPathOnFileThread, |
- this, it->second)); |
- } |
-} |
- |
-void RemovableDeviceNotificationsCros::OnDiskEvent( |
- disks::DiskMountManager::DiskEvent event, |
- const disks::DiskMountManager::Disk* disk) { |
-} |
- |
-void RemovableDeviceNotificationsCros::OnDeviceEvent( |
- disks::DiskMountManager::DeviceEvent event, |
- const std::string& device_path) { |
-} |
- |
-void RemovableDeviceNotificationsCros::OnMountEvent( |
- disks::DiskMountManager::MountEvent event, |
- MountError error_code, |
- const disks::DiskMountManager::MountPointInfo& mount_info) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- |
- // Ignore mount points that are not devices. |
- if (mount_info.mount_type != MOUNT_TYPE_DEVICE) |
- return; |
- // Ignore errors. |
- if (error_code != MOUNT_ERROR_NONE) |
- return; |
- if (mount_info.mount_condition != disks::MOUNT_CONDITION_NONE) |
- return; |
- |
- switch (event) { |
- case disks::DiskMountManager::MOUNTING: { |
- if (ContainsKey(mount_map_, mount_info.mount_path)) { |
- NOTREACHED(); |
- return; |
- } |
- |
- BrowserThread::PostTask( |
- BrowserThread::FILE, FROM_HERE, |
- base::Bind( |
- &RemovableDeviceNotificationsCros::CheckMountedPathOnFileThread, |
- this, mount_info)); |
- break; |
- } |
- case disks::DiskMountManager::UNMOUNTING: { |
- MountMap::iterator it = mount_map_.find(mount_info.mount_path); |
- if (it == mount_map_.end()) |
- return; |
- receiver()->ProcessDetach(it->second.storage_info.device_id); |
- mount_map_.erase(it); |
- break; |
- } |
- } |
-} |
- |
-void RemovableDeviceNotificationsCros::OnFormatEvent( |
- disks::DiskMountManager::FormatEvent event, |
- FormatError error_code, |
- const std::string& device_path) { |
-} |
- |
-bool RemovableDeviceNotificationsCros::GetStorageInfoForPath( |
- const base::FilePath& path, |
- StorageInfo* device_info) const { |
- if (!path.IsAbsolute()) |
- return false; |
- |
- base::FilePath current = path; |
- while (!ContainsKey(mount_map_, current.value()) && |
- current != current.DirName()) { |
- current = current.DirName(); |
- } |
- |
- MountMap::const_iterator info_it = mount_map_.find(current.value()); |
- if (info_it == mount_map_.end()) |
- return false; |
- |
- if (device_info) |
- *device_info = info_it->second.storage_info; |
- return true; |
-} |
- |
-uint64 RemovableDeviceNotificationsCros::GetStorageSize( |
- const std::string& device_location) const { |
- MountMap::const_iterator info_it = mount_map_.find(device_location); |
- return (info_it != mount_map_.end()) ? |
- info_it->second.storage_size_in_bytes : 0; |
-} |
- |
-void RemovableDeviceNotificationsCros::CheckMountedPathOnFileThread( |
- const disks::DiskMountManager::MountPointInfo& mount_info) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
- |
- bool has_dcim = chrome::IsMediaDevice(mount_info.mount_path); |
- |
- BrowserThread::PostTask( |
- BrowserThread::UI, FROM_HERE, |
- base::Bind(&RemovableDeviceNotificationsCros::AddMountedPathOnUIThread, |
- this, mount_info, has_dcim)); |
-} |
- |
-void RemovableDeviceNotificationsCros::AddMountedPathOnUIThread( |
- const disks::DiskMountManager::MountPointInfo& mount_info, bool has_dcim) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- |
- if (ContainsKey(mount_map_, mount_info.mount_path)) { |
- // CheckExistingMountPointsOnUIThread() added the mount point information |
- // in the map before the device attached handler is called. Therefore, an |
- // entry for the device already exists in the map. |
- return; |
- } |
- |
- // Get the media device uuid and label if exists. |
- std::string unique_id; |
- string16 device_label; |
- uint64 storage_size_in_bytes; |
- if (!GetDeviceInfo(mount_info.source_path, &unique_id, &device_label, |
- &storage_size_in_bytes)) |
- return; |
- |
- // Keep track of device uuid and label, to see how often we receive empty |
- // values. |
- chrome::MediaStorageUtil::RecordDeviceInfoHistogram(true, unique_id, |
- device_label); |
- if (unique_id.empty() || device_label.empty()) |
- return; |
- |
- chrome::MediaStorageUtil::Type type = has_dcim ? |
- chrome::MediaStorageUtil::REMOVABLE_MASS_STORAGE_WITH_DCIM : |
- chrome::MediaStorageUtil::REMOVABLE_MASS_STORAGE_NO_DCIM; |
- |
- std::string device_id = chrome::MediaStorageUtil::MakeDeviceId(type, |
- unique_id); |
- StorageObjectInfo object_info = { |
- StorageInfo(device_id, device_label, mount_info.mount_path), |
- storage_size_in_bytes |
- }; |
- mount_map_.insert(std::make_pair(mount_info.mount_path, object_info)); |
- receiver()->ProcessAttach(StorageInfo( |
- device_id, |
- chrome::GetDisplayNameForDevice(storage_size_in_bytes, device_label), |
- mount_info.mount_path)); |
-} |
- |
-} // namespace chromeos |