Index: chrome/browser/storage_monitor/portable_device_watcher_win.cc |
diff --git a/chrome/browser/storage_monitor/portable_device_watcher_win.cc b/chrome/browser/storage_monitor/portable_device_watcher_win.cc |
index 2a2b9da9b0894bd04cad45dc3cf439aa525f60de..efa5b2ce0f44394059c6240d9cb392046004034c 100644 |
--- a/chrome/browser/storage_monitor/portable_device_watcher_win.cc |
+++ b/chrome/browser/storage_monitor/portable_device_watcher_win.cc |
@@ -555,7 +555,19 @@ void PortableDeviceWatcherWin::SetNotifications( |
void PortableDeviceWatcherWin::EjectDevice( |
const std::string& device_id, |
base::Callback<void(StorageMonitor::EjectStatus)> callback) { |
- callback.Run(chrome::StorageMonitor::EJECT_FAILURE); |
+ // MTP devices on Windows don't have a detach API needed -- signal |
+ // the object as if the device is gone and tell the caller it is OK |
+ // to remove. |
+ string16 device_location; // The device_map_ key. |
+ string16 storage_object_id; |
+ if (!GetMTPStorageInfoFromDeviceId(device_id, |
+ &device_location, &storage_object_id)) { |
+ callback.Run(chrome::StorageMonitor::EJECT_NO_SUCH_DEVICE); |
+ return; |
+ } |
+ HandleDeviceDetachEvent(device_location); |
+ |
+ callback.Run(chrome::StorageMonitor::EJECT_OK); |
} |
void PortableDeviceWatcherWin::EnumerateAttachedDevices() { |
@@ -623,7 +635,7 @@ void PortableDeviceWatcherWin::OnDidHandleDeviceAttachEvent( |
string16 storage_name(name + L" (" + storage_iter->object_temporary_id + |
L')'); |
StorageInfo info(storage_id, storage_name, location, |
- string16(), string16(), string16(), 0); |
+ storage_name, string16(), string16(), 0); |
storage_map_[storage_id] = info; |
if (storage_notifications_) { |
info.set_location(GetStoragePathFromStorageId(storage_id)); |