OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/file_manager/volume_manager.h" | 5 #include "chrome/browser/chromeos/file_manager/volume_manager.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 struct Event { | 31 struct Event { |
32 enum EventType { | 32 enum EventType { |
33 DISK_ADDED, | 33 DISK_ADDED, |
34 DISK_REMOVED, | 34 DISK_REMOVED, |
35 DEVICE_ADDED, | 35 DEVICE_ADDED, |
36 DEVICE_REMOVED, | 36 DEVICE_REMOVED, |
37 VOLUME_MOUNTED, | 37 VOLUME_MOUNTED, |
38 VOLUME_UNMOUNTED, | 38 VOLUME_UNMOUNTED, |
39 FORMAT_STARTED, | 39 FORMAT_STARTED, |
40 FORMAT_COMPLETED, | 40 FORMAT_COMPLETED, |
41 HARD_UNPLUGGED, | |
42 } type; | 41 } type; |
43 | 42 |
44 // Available on DEVICE_ADDED, DEVICE_REMOVED, VOLUME_MOUNTED, | 43 // Available on DEVICE_ADDED, DEVICE_REMOVED, VOLUME_MOUNTED, |
45 // VOLUME_UNMOUNTED, FORMAT_STARTED and FORMAT_COMPLETED. | 44 // VOLUME_UNMOUNTED, FORMAT_STARTED and FORMAT_COMPLETED. |
46 std::string device_path; | 45 std::string device_path; |
47 | 46 |
48 // Available on DISK_ADDED. | 47 // Available on DISK_ADDED. |
49 bool mounting; | 48 bool mounting; |
50 | 49 |
51 // Available on VOLUME_MOUNTED and VOLUME_UNMOUNTED. | 50 // Available on VOLUME_MOUNTED and VOLUME_UNMOUNTED. |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 | 107 |
109 virtual void OnVolumeUnmounted(chromeos::MountError error_code, | 108 virtual void OnVolumeUnmounted(chromeos::MountError error_code, |
110 const VolumeInfo& volume_info) OVERRIDE { | 109 const VolumeInfo& volume_info) OVERRIDE { |
111 Event event; | 110 Event event; |
112 event.type = Event::VOLUME_UNMOUNTED; | 111 event.type = Event::VOLUME_UNMOUNTED; |
113 event.device_path = volume_info.source_path.AsUTF8Unsafe(); | 112 event.device_path = volume_info.source_path.AsUTF8Unsafe(); |
114 event.mount_error = error_code; | 113 event.mount_error = error_code; |
115 events_.push_back(event); | 114 events_.push_back(event); |
116 } | 115 } |
117 | 116 |
118 virtual void OnHardUnplugged(const std::string& device_path) OVERRIDE { | |
119 Event event; | |
120 event.type = Event::HARD_UNPLUGGED; | |
121 event.device_path = device_path; | |
122 events_.push_back(event); | |
123 } | |
124 | |
125 virtual void OnFormatStarted( | 117 virtual void OnFormatStarted( |
126 const std::string& device_path, bool success) OVERRIDE { | 118 const std::string& device_path, bool success) OVERRIDE { |
127 Event event; | 119 Event event; |
128 event.type = Event::FORMAT_STARTED; | 120 event.type = Event::FORMAT_STARTED; |
129 event.device_path = device_path; | 121 event.device_path = device_path; |
130 event.success = success; | 122 event.success = success; |
131 events_.push_back(event); | 123 events_.push_back(event); |
132 } | 124 } |
133 | 125 |
134 virtual void OnFormatCompleted( | 126 virtual void OnFormatCompleted( |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 LoggingObserver observer; | 374 LoggingObserver observer; |
383 volume_manager()->AddObserver(&observer); | 375 volume_manager()->AddObserver(&observer); |
384 | 376 |
385 const chromeos::disks::DiskMountManager::Disk kMountedDisk( | 377 const chromeos::disks::DiskMountManager::Disk kMountedDisk( |
386 "device1", "mount_path", "", "", "", "", "", "", "", "", "", "", | 378 "device1", "mount_path", "", "", "", "", "", "", "", "", "", "", |
387 chromeos::DEVICE_TYPE_UNKNOWN, 0, false, false, false, false, false, | 379 chromeos::DEVICE_TYPE_UNKNOWN, 0, false, false, false, false, false, |
388 false); | 380 false); |
389 volume_manager()->OnDiskEvent( | 381 volume_manager()->OnDiskEvent( |
390 chromeos::disks::DiskMountManager::DISK_REMOVED, &kMountedDisk); | 382 chromeos::disks::DiskMountManager::DISK_REMOVED, &kMountedDisk); |
391 | 383 |
392 ASSERT_EQ(2U, observer.events().size()); | 384 ASSERT_EQ(1U, observer.events().size()); |
393 const LoggingObserver::Event& event = observer.events()[0]; | 385 const LoggingObserver::Event& event = observer.events()[0]; |
394 EXPECT_EQ(LoggingObserver::Event::DISK_REMOVED, event.type); | 386 EXPECT_EQ(LoggingObserver::Event::DISK_REMOVED, event.type); |
395 EXPECT_EQ("device1", event.device_path); | 387 EXPECT_EQ("device1", event.device_path); |
396 | 388 |
397 // Since the Disk has non-empty mount_path, it's regarded as hard unplugging. | |
398 EXPECT_EQ(LoggingObserver::Event::HARD_UNPLUGGED, | |
399 observer.events()[1].type); | |
400 | |
401 ASSERT_EQ(1U, disk_mount_manager_->unmount_requests().size()); | 389 ASSERT_EQ(1U, disk_mount_manager_->unmount_requests().size()); |
402 const FakeDiskMountManager::UnmountRequest& unmount_request = | 390 const FakeDiskMountManager::UnmountRequest& unmount_request = |
403 disk_mount_manager_->unmount_requests()[0]; | 391 disk_mount_manager_->unmount_requests()[0]; |
404 EXPECT_EQ("mount_path", unmount_request.mount_path); | 392 EXPECT_EQ("mount_path", unmount_request.mount_path); |
405 EXPECT_EQ(chromeos::UNMOUNT_OPTIONS_LAZY, unmount_request.options); | 393 EXPECT_EQ(chromeos::UNMOUNT_OPTIONS_LAZY, unmount_request.options); |
406 | 394 |
407 volume_manager()->RemoveObserver(&observer); | 395 volume_manager()->RemoveObserver(&observer); |
408 } | 396 } |
409 | 397 |
410 TEST_F(VolumeManagerTest, OnDiskEvent_RemovedNotMounted) { | 398 TEST_F(VolumeManagerTest, OnDiskEvent_RemovedNotMounted) { |
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
831 chromeos::MOUNT_ERROR_NONE, | 819 chromeos::MOUNT_ERROR_NONE, |
832 chromeos::disks::DiskMountManager::MountPointInfo( | 820 chromeos::disks::DiskMountManager::MountPointInfo( |
833 "/other/profile/drive/folder/3.zip", | 821 "/other/profile/drive/folder/3.zip", |
834 "/archive/3", | 822 "/archive/3", |
835 chromeos::MOUNT_TYPE_ARCHIVE, | 823 chromeos::MOUNT_TYPE_ARCHIVE, |
836 chromeos::disks::MOUNT_CONDITION_NONE)); | 824 chromeos::disks::MOUNT_CONDITION_NONE)); |
837 EXPECT_FALSE(volume_manager()->FindVolumeInfoById("archive:3", &volume_info)); | 825 EXPECT_FALSE(volume_manager()->FindVolumeInfoById("archive:3", &volume_info)); |
838 EXPECT_EQ(3u, observer.events().size()); | 826 EXPECT_EQ(3u, observer.events().size()); |
839 } | 827 } |
840 | 828 |
841 TEST_F(VolumeManagerTest, HardUnplugged) { | |
842 volume_manager()->Initialize(); | |
843 LoggingObserver observer; | |
844 volume_manager()->AddObserver(&observer); | |
845 | |
846 // Disk that has a mount path is removed. | |
847 chromeos::disks::DiskMountManager::Disk mounted_disk( | |
848 "device1", | |
849 "/mount/path", | |
850 "", | |
851 "", | |
852 "", | |
853 "", | |
854 "", | |
855 "", | |
856 "", | |
857 "", | |
858 "uuid1", | |
859 "device1", | |
860 chromeos::DEVICE_TYPE_UNKNOWN, | |
861 0, | |
862 false, | |
863 false, | |
864 false, | |
865 false, | |
866 false, | |
867 false); | |
868 | |
869 chromeos::disks::DiskMountManager::Disk unmounted_disk( | |
870 "device2", | |
871 "", | |
872 "", | |
873 "", | |
874 "", | |
875 "", | |
876 "", | |
877 "", | |
878 "", | |
879 "", | |
880 "uuid2", | |
881 "device2", | |
882 chromeos::DEVICE_TYPE_UNKNOWN, | |
883 0, | |
884 false, | |
885 false, | |
886 false, | |
887 false, | |
888 false, | |
889 false); | |
890 | |
891 // Do not publish the hard_unplugged event for a disk that is already | |
892 // unmounted. | |
893 disk_mount_manager_->InvokeDiskEventForTest( | |
894 chromeos::disks::DiskMountManager::DISK_REMOVED, &unmounted_disk); | |
895 // Publish the hard_unplugged event for a disk that is currently mounted. | |
896 disk_mount_manager_->InvokeDiskEventForTest( | |
897 chromeos::disks::DiskMountManager::DISK_REMOVED, &mounted_disk); | |
898 // Do not publish the hard_unplugged event twice for the same disk. | |
899 disk_mount_manager_->InvokeDiskEventForTest( | |
900 chromeos::disks::DiskMountManager::DISK_REMOVED, &mounted_disk); | |
901 | |
902 EXPECT_EQ(4u, observer.events().size()); | |
903 EXPECT_EQ(LoggingObserver::Event::DISK_REMOVED, observer.events()[0].type); | |
904 EXPECT_EQ(LoggingObserver::Event::DISK_REMOVED, observer.events()[1].type); | |
905 EXPECT_EQ(LoggingObserver::Event::HARD_UNPLUGGED, observer.events()[2].type); | |
906 EXPECT_EQ(LoggingObserver::Event::DISK_REMOVED, observer.events()[3].type); | |
907 } | |
908 | |
909 TEST_F(VolumeManagerTest, MTPPlugAndUnplug) { | 829 TEST_F(VolumeManagerTest, MTPPlugAndUnplug) { |
910 LoggingObserver observer; | 830 LoggingObserver observer; |
911 volume_manager()->AddObserver(&observer); | 831 volume_manager()->AddObserver(&observer); |
912 | 832 |
913 storage_monitor::StorageInfo info( | 833 storage_monitor::StorageInfo info( |
914 storage_monitor::StorageInfo::MakeDeviceId( | 834 storage_monitor::StorageInfo::MakeDeviceId( |
915 storage_monitor::StorageInfo::MTP_OR_PTP, "dummy-device-id"), | 835 storage_monitor::StorageInfo::MTP_OR_PTP, "dummy-device-id"), |
916 FILE_PATH_LITERAL("/dummy/device/location"), | 836 FILE_PATH_LITERAL("/dummy/device/location"), |
917 base::UTF8ToUTF16("label"), | 837 base::UTF8ToUTF16("label"), |
918 base::UTF8ToUTF16("vendor"), | 838 base::UTF8ToUTF16("vendor"), |
(...skipping 25 matching lines...) Expand all Loading... |
944 // Detach | 864 // Detach |
945 volume_manager()->OnRemovableStorageDetached(info); | 865 volume_manager()->OnRemovableStorageDetached(info); |
946 ASSERT_EQ(2u, observer.events().size()); | 866 ASSERT_EQ(2u, observer.events().size()); |
947 EXPECT_EQ(LoggingObserver::Event::VOLUME_UNMOUNTED, | 867 EXPECT_EQ(LoggingObserver::Event::VOLUME_UNMOUNTED, |
948 observer.events()[1].type); | 868 observer.events()[1].type); |
949 | 869 |
950 EXPECT_FALSE(volume_manager()->FindVolumeInfoById("mtp:model", &volume_info)); | 870 EXPECT_FALSE(volume_manager()->FindVolumeInfoById("mtp:model", &volume_info)); |
951 } | 871 } |
952 | 872 |
953 } // namespace file_manager | 873 } // namespace file_manager |
OLD | NEW |