1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/stl_util.h"
6 #include "chrome/browser/chromeos/file_manager/drive_test_util.h"
7 #include "chrome/browser/extensions/extension_apitest.h"
8 #include "chromeos/dbus/cros_disks_client.h"
9 #include "chromeos/disks/mock_disk_mount_manager.h"
12 using ::testing::ReturnRef;
14 using chromeos::disks::DiskMountManager;
19 const char* system_path;
20 const char* file_path;
21 const char* device_label;
22 const char* drive_label;
23 const char* vendor_id;
24 const char* vendor_name;
25 const char* product_id;
26 const char* product_name;
28 const char* system_path_prefix;
29 chromeos::DeviceType device_type;
35 bool on_removable_device;
39 struct TestMountPoint {
40 std::string source_path;
41 std::string mount_path;
42 chromeos::MountType mount_type;
43 chromeos::disks::MountCondition mount_condition;
45 // -1 if there is no disk info.
49 TestDiskInfo kTestDisks[] = {
60 "system_path_prefix1",
61 chromeos::DEVICE_TYPE_USB,
79 "system_path_prefix2",
80 chromeos::DEVICE_TYPE_MOBILE,
98 "system_path_prefix3",
99 chromeos::DEVICE_TYPE_OPTICAL_DISC,
111 class FileBrowserPrivateApiTest : public ExtensionApiTest {
113 FileBrowserPrivateApiTest()
114 : disk_mount_manager_mock_(NULL) {
118 virtual ~FileBrowserPrivateApiTest() {
119 DCHECK(!disk_mount_manager_mock_);
120 STLDeleteValues(&volumes_);
123 // ExtensionApiTest override
124 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
125 ExtensionApiTest::SetUpInProcessBrowserTestFixture();
127 disk_mount_manager_mock_ = new chromeos::disks::MockDiskMountManager;
128 chromeos::disks::DiskMountManager::InitializeForTesting(
129 disk_mount_manager_mock_);
130 disk_mount_manager_mock_->SetupDefaultReplies();
132 // OVERRIDE mock functions.
133 ON_CALL(*disk_mount_manager_mock_, FindDiskBySourcePath(_)).WillByDefault(
134 Invoke(this, &FileBrowserPrivateApiTest::FindVolumeBySourcePath));
135 EXPECT_CALL(*disk_mount_manager_mock_, disks())
136 .WillRepeatedly(ReturnRef(volumes_));
137 EXPECT_CALL(*disk_mount_manager_mock_, mount_points())
138 .WillRepeatedly(ReturnRef(mount_points_));
141 // ExtensionApiTest override
142 virtual void TearDownInProcessBrowserTestFixture() OVERRIDE {
143 chromeos::disks::DiskMountManager::Shutdown();
144 disk_mount_manager_mock_ = NULL;
146 ExtensionApiTest::TearDownInProcessBrowserTestFixture();
150 void InitMountPoints() {
151 const TestMountPoint kTestMountPoints[] = {
154 chromeos::CrosDisksClient::GetRemovableDiskMountPoint().AppendASCII(
155 "mount_path1").AsUTF8Unsafe(),
156 chromeos::MOUNT_TYPE_DEVICE,
157 chromeos::disks::MOUNT_CONDITION_NONE,
162 chromeos::CrosDisksClient::GetRemovableDiskMountPoint().AppendASCII(
163 "mount_path2").AsUTF8Unsafe(),
164 chromeos::MOUNT_TYPE_DEVICE,
165 chromeos::disks::MOUNT_CONDITION_NONE,
170 chromeos::CrosDisksClient::GetRemovableDiskMountPoint().AppendASCII(
171 "mount_path3").AsUTF8Unsafe(),
172 chromeos::MOUNT_TYPE_DEVICE,
173 chromeos::disks::MOUNT_CONDITION_NONE,
177 // Set source path inside another mounted volume.
178 chromeos::CrosDisksClient::GetRemovableDiskMountPoint().AppendASCII(
179 "mount_path3/archive.zip").AsUTF8Unsafe(),
180 chromeos::CrosDisksClient::GetArchiveMountPoint().AppendASCII(
181 "archive_mount_path").AsUTF8Unsafe(),
182 chromeos::MOUNT_TYPE_ARCHIVE,
183 chromeos::disks::MOUNT_CONDITION_NONE,
188 for (size_t i = 0; i < arraysize(kTestMountPoints); i++) {
189 mount_points_.insert(DiskMountManager::MountPointMap::value_type(
190 kTestMountPoints[i].mount_path,
191 DiskMountManager::MountPointInfo(kTestMountPoints[i].source_path,
192 kTestMountPoints[i].mount_path,
193 kTestMountPoints[i].mount_type,
194 kTestMountPoints[i].mount_condition)
196 int disk_info_index = kTestMountPoints[i].disk_info_index;
197 if (kTestMountPoints[i].disk_info_index >= 0) {
198 EXPECT_GT(arraysize(kTestDisks), static_cast<size_t>(disk_info_index));
199 if (static_cast<size_t>(disk_info_index) >= arraysize(kTestDisks))
202 volumes_.insert(DiskMountManager::DiskMap::value_type(
203 kTestMountPoints[i].source_path,
204 new DiskMountManager::Disk(
205 kTestMountPoints[i].source_path,
206 kTestMountPoints[i].mount_path,
207 kTestDisks[disk_info_index].system_path,
208 kTestDisks[disk_info_index].file_path,
209 kTestDisks[disk_info_index].device_label,
210 kTestDisks[disk_info_index].drive_label,
211 kTestDisks[disk_info_index].vendor_id,
212 kTestDisks[disk_info_index].vendor_name,
213 kTestDisks[disk_info_index].product_id,
214 kTestDisks[disk_info_index].product_name,
215 kTestDisks[disk_info_index].fs_uuid,
216 kTestDisks[disk_info_index].system_path_prefix,
217 kTestDisks[disk_info_index].device_type,
218 kTestDisks[disk_info_index].size_in_bytes,
219 kTestDisks[disk_info_index].is_parent,
220 kTestDisks[disk_info_index].is_read_only,
221 kTestDisks[disk_info_index].has_media,
222 kTestDisks[disk_info_index].on_boot_device,
223 kTestDisks[disk_info_index].on_removable_device,
224 kTestDisks[disk_info_index].is_hidden
231 const DiskMountManager::Disk* FindVolumeBySourcePath(
232 const std::string& source_path) {
233 DiskMountManager::DiskMap::const_iterator volume_it =
234 volumes_.find(source_path);
235 return (volume_it == volumes_.end()) ? NULL : volume_it->second;
239 chromeos::disks::MockDiskMountManager* disk_mount_manager_mock_;
240 DiskMountManager::DiskMap volumes_;
241 DiskMountManager::MountPointMap mount_points_;
244 IN_PROC_BROWSER_TEST_F(FileBrowserPrivateApiTest, Mount) {
245 file_manager::test_util::WaitUntilDriveMountPointIsAdded(
246 browser()->profile());
248 // We will call fileBrowserPrivate.unmountVolume once. To test that method, we
249 // check that UnmountPath is really called with the same value.
250 EXPECT_CALL(*disk_mount_manager_mock_, UnmountPath(_, _, _))
252 EXPECT_CALL(*disk_mount_manager_mock_,
254 chromeos::CrosDisksClient::GetArchiveMountPoint().AppendASCII(
255 "archive_mount_path").AsUTF8Unsafe(),
256 chromeos::UNMOUNT_OPTIONS_NONE, _)).Times(1);
258 ASSERT_TRUE(RunComponentExtensionTest("file_browser/mount_test"))