Index: chrome/browser/storage_monitor/removable_device_notifications_mac.mm |
diff --git a/chrome/browser/storage_monitor/removable_device_notifications_mac.mm b/chrome/browser/storage_monitor/removable_device_notifications_mac.mm |
deleted file mode 100644 |
index d1027e45c3707fbccb2ed4130508a4cd5518ff51..0000000000000000000000000000000000000000 |
--- a/chrome/browser/storage_monitor/removable_device_notifications_mac.mm |
+++ /dev/null |
@@ -1,203 +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. |
- |
-#include "chrome/browser/storage_monitor/removable_device_notifications_mac.h" |
- |
-#include "chrome/browser/storage_monitor/media_device_notifications_utils.h" |
-#include "content/public/browser/browser_thread.h" |
- |
-namespace chrome { |
- |
-namespace { |
- |
-const char kDiskImageModelName[] = "Disk Image"; |
- |
-void GetDiskInfoAndUpdateOnFileThread( |
- const scoped_refptr<RemovableDeviceNotificationsMac>& notifications, |
- base::mac::ScopedCFTypeRef<CFDictionaryRef> dict, |
- RemovableDeviceNotificationsMac::UpdateType update_type) { |
- DiskInfoMac info = DiskInfoMac::BuildDiskInfoOnFileThread(dict); |
- if (info.device_id().empty()) |
- return; |
- |
- content::BrowserThread::PostTask( |
- content::BrowserThread::UI, |
- FROM_HERE, |
- base::Bind(&RemovableDeviceNotificationsMac::UpdateDisk, |
- notifications, |
- info, |
- update_type)); |
-} |
- |
-void GetDiskInfoAndUpdate( |
- const scoped_refptr<RemovableDeviceNotificationsMac>& notifications, |
- DADiskRef disk, |
- RemovableDeviceNotificationsMac::UpdateType update_type) { |
- base::mac::ScopedCFTypeRef<CFDictionaryRef> dict(DADiskCopyDescription(disk)); |
- content::BrowserThread::PostTask( |
- content::BrowserThread::FILE, |
- FROM_HERE, |
- base::Bind(GetDiskInfoAndUpdateOnFileThread, |
- notifications, |
- dict, |
- update_type)); |
-} |
- |
-} // namespace |
- |
-RemovableDeviceNotificationsMac::RemovableDeviceNotificationsMac() { |
- session_.reset(DASessionCreate(NULL)); |
- |
- DASessionScheduleWithRunLoop( |
- session_, CFRunLoopGetCurrent(), kCFRunLoopCommonModes); |
- |
- // Register for callbacks for attached, changed, and removed devices. |
- // This will send notifications for existing devices too. |
- DARegisterDiskAppearedCallback( |
- session_, |
- kDADiskDescriptionMatchVolumeMountable, |
- DiskAppearedCallback, |
- this); |
- DARegisterDiskDisappearedCallback( |
- session_, |
- kDADiskDescriptionMatchVolumeMountable, |
- DiskDisappearedCallback, |
- this); |
- DARegisterDiskDescriptionChangedCallback( |
- session_, |
- kDADiskDescriptionMatchVolumeMountable, |
- kDADiskDescriptionWatchVolumePath, |
- DiskDescriptionChangedCallback, |
- this); |
-} |
- |
-RemovableDeviceNotificationsMac::~RemovableDeviceNotificationsMac() { |
- DASessionUnscheduleFromRunLoop( |
- session_, CFRunLoopGetCurrent(), kCFRunLoopCommonModes); |
-} |
- |
-void RemovableDeviceNotificationsMac::UpdateDisk( |
- const DiskInfoMac& info, |
- UpdateType update_type) { |
- if (info.bsd_name().empty()) |
- return; |
- |
- std::map<std::string, DiskInfoMac>::iterator it = |
- disk_info_map_.find(info.bsd_name()); |
- if (it != disk_info_map_.end()) { |
- // If an attached notification was previously posted then post a detached |
- // notification now. This is used for devices that are being removed or |
- // devices that have changed. |
- if (ShouldPostNotificationForDisk(it->second)) { |
- receiver()->ProcessDetach(it->second.device_id()); |
- } |
- } |
- |
- if (update_type == UPDATE_DEVICE_REMOVED) { |
- if (it != disk_info_map_.end()) |
- disk_info_map_.erase(it); |
- } else { |
- disk_info_map_[info.bsd_name()] = info; |
- MediaStorageUtil::RecordDeviceInfoHistogram(true, info.device_id(), |
- info.device_name()); |
- if (ShouldPostNotificationForDisk(info)) { |
- string16 display_name = GetDisplayNameForDevice( |
- info.total_size_in_bytes(), info.device_name()); |
- receiver()->ProcessAttach(StorageInfo( |
- info.device_id(), display_name, info.mount_point().value())); |
- } |
- } |
-} |
- |
-bool RemovableDeviceNotificationsMac::GetStorageInfoForPath( |
- const base::FilePath& path, |
- StorageInfo* device_info) const { |
- if (!path.IsAbsolute()) |
- return false; |
- |
- base::FilePath current = path; |
- const base::FilePath root(base::FilePath::kSeparators); |
- while (current != root) { |
- DiskInfoMac info; |
- if (FindDiskWithMountPoint(current, &info)) { |
- device_info->device_id = info.device_id(); |
- device_info->name = info.device_name(); |
- device_info->location = info.mount_point().value(); |
- return true; |
- } |
- current = current.DirName(); |
- } |
- |
- return false; |
-} |
- |
-uint64 RemovableDeviceNotificationsMac::GetStorageSize( |
- const std::string& location) const { |
- DiskInfoMac info; |
- if (!FindDiskWithMountPoint(base::FilePath(location), &info)) |
- return 0; |
- return info.total_size_in_bytes(); |
-} |
- |
-// static |
-void RemovableDeviceNotificationsMac::DiskAppearedCallback( |
- DADiskRef disk, |
- void* context) { |
- RemovableDeviceNotificationsMac* notifications = |
- static_cast<RemovableDeviceNotificationsMac*>(context); |
- GetDiskInfoAndUpdate(notifications, |
- disk, |
- UPDATE_DEVICE_ADDED); |
-} |
- |
-// static |
-void RemovableDeviceNotificationsMac::DiskDisappearedCallback( |
- DADiskRef disk, |
- void* context) { |
- RemovableDeviceNotificationsMac* notifications = |
- static_cast<RemovableDeviceNotificationsMac*>(context); |
- GetDiskInfoAndUpdate(notifications, |
- disk, |
- UPDATE_DEVICE_REMOVED); |
-} |
- |
-// static |
-void RemovableDeviceNotificationsMac::DiskDescriptionChangedCallback( |
- DADiskRef disk, |
- CFArrayRef keys, |
- void *context) { |
- RemovableDeviceNotificationsMac* notifications = |
- static_cast<RemovableDeviceNotificationsMac*>(context); |
- GetDiskInfoAndUpdate(notifications, |
- disk, |
- UPDATE_DEVICE_CHANGED); |
-} |
- |
-bool RemovableDeviceNotificationsMac::ShouldPostNotificationForDisk( |
- const DiskInfoMac& info) const { |
- // Only post notifications about disks that have no empty fields and |
- // are removable. Also exclude disk images (DMGs). |
- return !info.bsd_name().empty() && |
- !info.device_id().empty() && |
- !info.device_name().empty() && |
- !info.mount_point().empty() && |
- info.model_name() != kDiskImageModelName && |
- (info.type() == MediaStorageUtil::REMOVABLE_MASS_STORAGE_WITH_DCIM || |
- info.type() == MediaStorageUtil::REMOVABLE_MASS_STORAGE_NO_DCIM); |
-} |
- |
-bool RemovableDeviceNotificationsMac::FindDiskWithMountPoint( |
- const base::FilePath& mount_point, |
- DiskInfoMac* info) const { |
- for (std::map<std::string, DiskInfoMac>::const_iterator |
- it = disk_info_map_.begin(); it != disk_info_map_.end(); ++it) { |
- if (it->second.mount_point() == mount_point) { |
- *info = it->second; |
- return true; |
- } |
- } |
- return false; |
-} |
- |
-} // namespace chrome |