Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Side by Side Diff: chrome/browser/system_monitor/removable_device_notifications_linux_unittest.cc

Issue 11573048: [Media Galleries] Move RemovableStorageInfo notifications to chrome namespace (part 2) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Typedef, init observer Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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 // RemovableDeviceNotificationsLinux unit tests. 5 // RemovableDeviceNotificationsLinux unit tests.
6 6
7 #include "chrome/browser/system_monitor/removable_device_notifications_linux.h" 7 #include "chrome/browser/system_monitor/removable_device_notifications_linux.h"
8 8
9 #include <mntent.h> 9 #include <mntent.h>
10 #include <stdio.h> 10 #include <stdio.h>
11 11
12 #include <string> 12 #include <string>
13 13
14 #include "base/file_util.h" 14 #include "base/file_util.h"
15 #include "base/files/scoped_temp_dir.h" 15 #include "base/files/scoped_temp_dir.h"
16 #include "base/logging.h" 16 #include "base/logging.h"
17 #include "base/memory/scoped_ptr.h" 17 #include "base/memory/scoped_ptr.h"
18 #include "base/message_loop.h" 18 #include "base/message_loop.h"
19 #include "base/system_monitor/system_monitor.h"
20 #include "base/test/mock_devices_changed_observer.h"
21 #include "base/utf_string_conversions.h" 19 #include "base/utf_string_conversions.h"
22 #include "chrome/browser/system_monitor/media_device_notifications_utils.h" 20 #include "chrome/browser/system_monitor/media_device_notifications_utils.h"
23 #include "chrome/browser/system_monitor/media_storage_util.h" 21 #include "chrome/browser/system_monitor/media_storage_util.h"
22 #include "chrome/browser/system_monitor/mock_removable_storage_observer.h"
24 #include "chrome/browser/system_monitor/removable_device_constants.h" 23 #include "chrome/browser/system_monitor/removable_device_constants.h"
24 #include "chrome/browser/system_monitor/removable_storage_notifications.h"
25 #include "content/public/test/test_browser_thread.h" 25 #include "content/public/test/test_browser_thread.h"
26 #include "testing/gtest/include/gtest/gtest.h" 26 #include "testing/gtest/include/gtest/gtest.h"
27 27
28 namespace chrome { 28 namespace chrome {
29 29
30 namespace { 30 namespace {
31 31
32 using testing::_;
33
34 const char kValidFS[] = "vfat"; 32 const char kValidFS[] = "vfat";
35 const char kInvalidFS[] = "invalidfs"; 33 const char kInvalidFS[] = "invalidfs";
36 34
37 const char kInvalidPath[] = "invalid path does not exist"; 35 const char kInvalidPath[] = "invalid path does not exist";
38 36
39 const char kDeviceDCIM1[] = "d1"; 37 const char kDeviceDCIM1[] = "d1";
40 const char kDeviceDCIM2[] = "d2"; 38 const char kDeviceDCIM2[] = "d2";
41 const char kDeviceDCIM3[] = "d3"; 39 const char kDeviceDCIM3[] = "d3";
42 const char kDeviceNoDCIM[] = "d4"; 40 const char kDeviceNoDCIM[] = "d4";
43 const char kDeviceFixed[] = "d5"; 41 const char kDeviceFixed[] = "d5";
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 }; 176 };
179 177
180 RemovableDeviceNotificationLinuxTest() 178 RemovableDeviceNotificationLinuxTest()
181 : message_loop_(MessageLoop::TYPE_IO), 179 : message_loop_(MessageLoop::TYPE_IO),
182 file_thread_(content::BrowserThread::FILE, &message_loop_) { 180 file_thread_(content::BrowserThread::FILE, &message_loop_) {
183 } 181 }
184 virtual ~RemovableDeviceNotificationLinuxTest() {} 182 virtual ~RemovableDeviceNotificationLinuxTest() {}
185 183
186 protected: 184 protected:
187 virtual void SetUp() OVERRIDE { 185 virtual void SetUp() OVERRIDE {
188 mock_devices_changed_observer_.reset(new base::MockDevicesChangedObserver);
189 system_monitor_.AddDevicesChangedObserver(
190 mock_devices_changed_observer_.get());
191
192 // Create and set up a temp dir with files for the test. 186 // Create and set up a temp dir with files for the test.
193 ASSERT_TRUE(scoped_temp_dir_.CreateUniqueTempDir()); 187 ASSERT_TRUE(scoped_temp_dir_.CreateUniqueTempDir());
194 FilePath test_dir = scoped_temp_dir_.path().AppendASCII("test_etc"); 188 FilePath test_dir = scoped_temp_dir_.path().AppendASCII("test_etc");
195 ASSERT_TRUE(file_util::CreateDirectory(test_dir)); 189 ASSERT_TRUE(file_util::CreateDirectory(test_dir));
196 mtab_file_ = test_dir.AppendASCII("test_mtab"); 190 mtab_file_ = test_dir.AppendASCII("test_mtab");
197 MtabTestData initial_test_data[] = { 191 MtabTestData initial_test_data[] = {
198 MtabTestData("dummydevice", "dummydir", kInvalidFS), 192 MtabTestData("dummydevice", "dummydir", kInvalidFS),
199 }; 193 };
200 WriteToMtab(initial_test_data, 194 WriteToMtab(initial_test_data,
201 arraysize(initial_test_data), 195 arraysize(initial_test_data),
202 true /* overwrite */); 196 true /* overwrite */);
203 197
204 // Initialize the test subject. 198 // Initialize the test subject.
205 notifications_ = new RemovableDeviceNotificationsLinuxTestWrapper( 199 notifications_ = new RemovableDeviceNotificationsLinuxTestWrapper(
206 mtab_file_, &message_loop_); 200 mtab_file_, &message_loop_);
201 mock_storage_observer_.reset(new MockRemovableStorageObserver);
202 notifications_->AddObserver(mock_storage_observer_.get());
203
207 notifications_->Init(); 204 notifications_->Init();
208 message_loop_.RunUntilIdle(); 205 message_loop_.RunUntilIdle();
209 } 206 }
210 207
211 virtual void TearDown() OVERRIDE { 208 virtual void TearDown() OVERRIDE {
212 message_loop_.RunUntilIdle(); 209 message_loop_.RunUntilIdle();
210 notifications_->RemoveObserver(mock_storage_observer_.get());
213 notifications_ = NULL; 211 notifications_ = NULL;
214 system_monitor_.RemoveDevicesChangedObserver(
215 mock_devices_changed_observer_.get());
216 } 212 }
217 213
218 // Append mtab entries from the |data| array of size |data_size| to the mtab 214 // Append mtab entries from the |data| array of size |data_size| to the mtab
219 // file, and run the message loop. 215 // file, and run the message loop.
220 void AppendToMtabAndRunLoop(const MtabTestData* data, size_t data_size) { 216 void AppendToMtabAndRunLoop(const MtabTestData* data, size_t data_size) {
221 WriteToMtab(data, data_size, false /* do not overwrite */); 217 WriteToMtab(data, data_size, false /* do not overwrite */);
222 message_loop_.Run(); 218 message_loop_.Run();
223 } 219 }
224 220
225 // Overwrite the mtab file with mtab entries from the |data| array of size 221 // Overwrite the mtab file with mtab entries from the |data| array of size
(...skipping 23 matching lines...) Expand all
249 FilePath CreateMountPointWithoutDCIMDir(const std::string& dir) { 245 FilePath CreateMountPointWithoutDCIMDir(const std::string& dir) {
250 return CreateMountPoint(dir, false /* do not create DCIM dir */); 246 return CreateMountPoint(dir, false /* do not create DCIM dir */);
251 } 247 }
252 248
253 void RemoveDCIMDirFromMountPoint(const std::string& dir) { 249 void RemoveDCIMDirFromMountPoint(const std::string& dir) {
254 FilePath dcim = 250 FilePath dcim =
255 scoped_temp_dir_.path().AppendASCII(dir).Append(kDCIMDirectoryName); 251 scoped_temp_dir_.path().AppendASCII(dir).Append(kDCIMDirectoryName);
256 file_util::Delete(dcim, false); 252 file_util::Delete(dcim, false);
257 } 253 }
258 254
259 base::MockDevicesChangedObserver& observer() { 255 MockRemovableStorageObserver& observer() {
260 return *mock_devices_changed_observer_; 256 return *mock_storage_observer_;
261 } 257 }
262 258
263 RemovableDeviceNotificationsLinux* notifier() { 259 RemovableDeviceNotificationsLinux* notifier() {
264 return notifications_.get(); 260 return notifications_.get();
265 } 261 }
266 262
267 private: 263 private:
268 // Create a directory named |dir| relative to the test directory. 264 // Create a directory named |dir| relative to the test directory.
269 // Set |with_dcim_dir| to true if the created directory will have a "DCIM" 265 // Set |with_dcim_dir| to true if the created directory will have a "DCIM"
270 // subdirectory. 266 // subdirectory.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 entry.mnt_type = const_cast<char*>(data[i].mount_type.c_str()); 307 entry.mnt_type = const_cast<char*>(data[i].mount_type.c_str());
312 ASSERT_EQ(0, addmntent(file, &entry)); 308 ASSERT_EQ(0, addmntent(file, &entry));
313 } 309 }
314 ASSERT_EQ(1, endmntent(file)); 310 ASSERT_EQ(1, endmntent(file));
315 } 311 }
316 312
317 // The message loop and file thread to run tests on. 313 // The message loop and file thread to run tests on.
318 MessageLoop message_loop_; 314 MessageLoop message_loop_;
319 content::TestBrowserThread file_thread_; 315 content::TestBrowserThread file_thread_;
320 316
321 // SystemMonitor and DevicesChangedObserver to hook together to test. 317 scoped_ptr<MockRemovableStorageObserver> mock_storage_observer_;
322 base::SystemMonitor system_monitor_;
323 scoped_ptr<base::MockDevicesChangedObserver> mock_devices_changed_observer_;
324 318
325 // Temporary directory for created test data. 319 // Temporary directory for created test data.
326 base::ScopedTempDir scoped_temp_dir_; 320 base::ScopedTempDir scoped_temp_dir_;
327 // Path to the test mtab file. 321 // Path to the test mtab file.
328 FilePath mtab_file_; 322 FilePath mtab_file_;
329 323
330 scoped_refptr<RemovableDeviceNotificationsLinuxTestWrapper> notifications_; 324 scoped_refptr<RemovableDeviceNotificationsLinuxTestWrapper> notifications_;
331 325
332 DISALLOW_COPY_AND_ASSIGN(RemovableDeviceNotificationLinuxTest); 326 DISALLOW_COPY_AND_ASSIGN(RemovableDeviceNotificationLinuxTest);
333 }; 327 };
334 328
335 // Simple test case where we attach and detach a media device. 329 // Simple test case where we attach and detach a media device.
336 TEST_F(RemovableDeviceNotificationLinuxTest, BasicAttachDetach) { 330 TEST_F(RemovableDeviceNotificationLinuxTest, BasicAttachDetach) {
337 testing::Sequence mock_sequence;
338 FilePath test_path = CreateMountPointWithDCIMDir(kMountPointA); 331 FilePath test_path = CreateMountPointWithDCIMDir(kMountPointA);
339 ASSERT_FALSE(test_path.empty()); 332 ASSERT_FALSE(test_path.empty());
340 MtabTestData test_data[] = { 333 MtabTestData test_data[] = {
341 MtabTestData(kDeviceDCIM2, test_path.value(), kValidFS), 334 MtabTestData(kDeviceDCIM2, test_path.value(), kValidFS),
342 MtabTestData(kDeviceFixed, kInvalidPath, kValidFS), 335 MtabTestData(kDeviceFixed, kInvalidPath, kValidFS),
343 }; 336 };
344 // Only |kDeviceDCIM2| should be attached, since |kDeviceFixed| has a bad 337 // Only |kDeviceDCIM2| should be attached, since |kDeviceFixed| has a bad
345 // path. 338 // path.
346 EXPECT_CALL(observer(),
347 OnRemovableStorageAttached(
348 GetDeviceId(kDeviceDCIM2),
349 GetDeviceNameWithSizeDetails(kDeviceDCIM2),
350 test_path.value()))
351 .InSequence(mock_sequence);
352 AppendToMtabAndRunLoop(test_data, arraysize(test_data)); 339 AppendToMtabAndRunLoop(test_data, arraysize(test_data));
353 340
341 EXPECT_EQ(1, observer().attach_calls());
342 EXPECT_EQ(0, observer().detach_calls());
343 EXPECT_EQ(GetDeviceId(kDeviceDCIM2), observer().last_attached().device_id);
344 EXPECT_EQ(GetDeviceNameWithSizeDetails(kDeviceDCIM2),
345 observer().last_attached().name);
346 EXPECT_EQ(test_path.value(),
347 observer().last_attached().location);
348
354 // |kDeviceDCIM2| should be detached here. 349 // |kDeviceDCIM2| should be detached here.
355 EXPECT_CALL(observer(), OnRemovableStorageDetached(GetDeviceId(kDeviceDCIM2)))
356 .InSequence(mock_sequence);
357 WriteEmptyMtabAndRunLoop(); 350 WriteEmptyMtabAndRunLoop();
351 EXPECT_EQ(1, observer().attach_calls());
352 EXPECT_EQ(1, observer().detach_calls());
353 EXPECT_EQ(GetDeviceId(kDeviceDCIM2), observer().last_detached().device_id);
358 } 354 }
359 355
360 // Only removable devices are recognized. 356 // Only removable devices are recognized.
361 TEST_F(RemovableDeviceNotificationLinuxTest, Removable) { 357 TEST_F(RemovableDeviceNotificationLinuxTest, Removable) {
362 testing::Sequence mock_sequence;
363 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); 358 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA);
364 ASSERT_FALSE(test_path_a.empty()); 359 ASSERT_FALSE(test_path_a.empty());
365 MtabTestData test_data1[] = { 360 MtabTestData test_data1[] = {
366 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS), 361 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS),
367 }; 362 };
368 // |kDeviceDCIM1| should be attached as expected. 363 // |kDeviceDCIM1| should be attached as expected.
369 EXPECT_CALL(observer(),
370 OnRemovableStorageAttached(
371 GetDeviceId(kDeviceDCIM1),
372 GetDeviceNameWithSizeDetails(kDeviceDCIM1),
373 test_path_a.value()))
374 .InSequence(mock_sequence);
375 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1)); 364 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1));
376 365
366 EXPECT_EQ(1, observer().attach_calls());
367 EXPECT_EQ(0, observer().detach_calls());
368 EXPECT_EQ(GetDeviceId(kDeviceDCIM1), observer().last_attached().device_id);
369 EXPECT_EQ(GetDeviceNameWithSizeDetails(kDeviceDCIM1),
370 observer().last_attached().name);
371 EXPECT_EQ(test_path_a.value(),
372 observer().last_attached().location);
373
377 // This should do nothing, since |kDeviceFixed| is not removable. 374 // This should do nothing, since |kDeviceFixed| is not removable.
378 FilePath test_path_b = CreateMountPointWithoutDCIMDir(kMountPointB); 375 FilePath test_path_b = CreateMountPointWithoutDCIMDir(kMountPointB);
379 ASSERT_FALSE(test_path_b.empty()); 376 ASSERT_FALSE(test_path_b.empty());
380 MtabTestData test_data2[] = { 377 MtabTestData test_data2[] = {
381 MtabTestData(kDeviceFixed, test_path_b.value(), kValidFS), 378 MtabTestData(kDeviceFixed, test_path_b.value(), kValidFS),
382 }; 379 };
383 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); 380 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2));
381 EXPECT_EQ(1, observer().attach_calls());
382 EXPECT_EQ(0, observer().detach_calls());
384 383
385 // |kDeviceDCIM1| should be detached as expected. 384 // |kDeviceDCIM1| should be detached as expected.
386 EXPECT_CALL(observer(), OnRemovableStorageDetached(GetDeviceId(kDeviceDCIM1)))
387 .InSequence(mock_sequence);
388 WriteEmptyMtabAndRunLoop(); 385 WriteEmptyMtabAndRunLoop();
386 EXPECT_EQ(1, observer().attach_calls());
387 EXPECT_EQ(1, observer().detach_calls());
388 EXPECT_EQ(GetDeviceId(kDeviceDCIM1), observer().last_detached().device_id);
389 389
390 // |kDeviceNoDCIM| should be attached as expected. 390 // |kDeviceNoDCIM| should be attached as expected.
391 EXPECT_CALL(observer(),
392 OnRemovableStorageAttached(
393 GetDeviceId(kDeviceNoDCIM),
394 GetDeviceNameWithSizeDetails(kDeviceNoDCIM),
395 test_path_b.value()))
396 .InSequence(mock_sequence);
397 MtabTestData test_data3[] = { 391 MtabTestData test_data3[] = {
398 MtabTestData(kDeviceNoDCIM, test_path_b.value(), kValidFS), 392 MtabTestData(kDeviceNoDCIM, test_path_b.value(), kValidFS),
399 }; 393 };
400 AppendToMtabAndRunLoop(test_data3, arraysize(test_data3)); 394 AppendToMtabAndRunLoop(test_data3, arraysize(test_data3));
395 EXPECT_EQ(2, observer().attach_calls());
396 EXPECT_EQ(1, observer().detach_calls());
397 EXPECT_EQ(GetDeviceId(kDeviceNoDCIM), observer().last_attached().device_id);
398 EXPECT_EQ(GetDeviceNameWithSizeDetails(kDeviceNoDCIM),
399 observer().last_attached().name);
400 EXPECT_EQ(test_path_b.value(),
401 observer().last_attached().location);
401 402
402 // |kDeviceNoDCIM| should be detached as expected. 403 // |kDeviceNoDCIM| should be detached as expected.
403 EXPECT_CALL(observer(),
404 OnRemovableStorageDetached(GetDeviceId(kDeviceNoDCIM)))
405 .InSequence(mock_sequence);
406 WriteEmptyMtabAndRunLoop(); 404 WriteEmptyMtabAndRunLoop();
405 EXPECT_EQ(2, observer().attach_calls());
406 EXPECT_EQ(2, observer().detach_calls());
407 EXPECT_EQ(GetDeviceId(kDeviceNoDCIM), observer().last_detached().device_id);
407 } 408 }
408 409
409 // More complicated test case with multiple devices on multiple mount points. 410 // More complicated test case with multiple devices on multiple mount points.
410 TEST_F(RemovableDeviceNotificationLinuxTest, SwapMountPoints) { 411 TEST_F(RemovableDeviceNotificationLinuxTest, SwapMountPoints) {
411 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); 412 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA);
412 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB); 413 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB);
413 ASSERT_FALSE(test_path_a.empty()); 414 ASSERT_FALSE(test_path_a.empty());
414 ASSERT_FALSE(test_path_b.empty()); 415 ASSERT_FALSE(test_path_b.empty());
415 416
416 // Attach two devices. (*'d mounts are those SystemMonitor knows about.) 417 // Attach two devices.
418 // (*'d mounts are those RemovableStorageNotifications knows about.)
417 // kDeviceDCIM1 -> kMountPointA * 419 // kDeviceDCIM1 -> kMountPointA *
418 // kDeviceDCIM2 -> kMountPointB * 420 // kDeviceDCIM2 -> kMountPointB *
419 MtabTestData test_data1[] = { 421 MtabTestData test_data1[] = {
420 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS), 422 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS),
421 MtabTestData(kDeviceDCIM2, test_path_b.value(), kValidFS), 423 MtabTestData(kDeviceDCIM2, test_path_b.value(), kValidFS),
422 }; 424 };
423 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(2);
424 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(0);
425 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1)); 425 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1));
426 EXPECT_EQ(2, observer().attach_calls());
427 EXPECT_EQ(0, observer().detach_calls());
426 428
427 // Detach two devices from old mount points and attach the devices at new 429 // Detach two devices from old mount points and attach the devices at new
428 // mount points. 430 // mount points.
429 // kDeviceDCIM1 -> kMountPointB * 431 // kDeviceDCIM1 -> kMountPointB *
430 // kDeviceDCIM2 -> kMountPointA * 432 // kDeviceDCIM2 -> kMountPointA *
431 MtabTestData test_data2[] = { 433 MtabTestData test_data2[] = {
432 MtabTestData(kDeviceDCIM1, test_path_b.value(), kValidFS), 434 MtabTestData(kDeviceDCIM1, test_path_b.value(), kValidFS),
433 MtabTestData(kDeviceDCIM2, test_path_a.value(), kValidFS), 435 MtabTestData(kDeviceDCIM2, test_path_a.value(), kValidFS),
434 }; 436 };
435 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(2);
436 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(2);
437 OverwriteMtabAndRunLoop(test_data2, arraysize(test_data2)); 437 OverwriteMtabAndRunLoop(test_data2, arraysize(test_data2));
438 EXPECT_EQ(4, observer().attach_calls());
439 EXPECT_EQ(2, observer().detach_calls());
438 440
439 // Detach all devices. 441 // Detach all devices.
440 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(0);
441 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(2);
442 WriteEmptyMtabAndRunLoop(); 442 WriteEmptyMtabAndRunLoop();
443 EXPECT_EQ(4, observer().attach_calls());
444 EXPECT_EQ(4, observer().detach_calls());
443 } 445 }
444 446
445 // More complicated test case with multiple devices on multiple mount points. 447 // More complicated test case with multiple devices on multiple mount points.
446 TEST_F(RemovableDeviceNotificationLinuxTest, MultiDevicesMultiMountPoints) { 448 TEST_F(RemovableDeviceNotificationLinuxTest, MultiDevicesMultiMountPoints) {
447 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); 449 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA);
448 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB); 450 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB);
449 ASSERT_FALSE(test_path_a.empty()); 451 ASSERT_FALSE(test_path_a.empty());
450 ASSERT_FALSE(test_path_b.empty()); 452 ASSERT_FALSE(test_path_b.empty());
451 453
452 // Attach two devices. (*'d mounts are those SystemMonitor knows about.) 454 // Attach two devices.
455 // (*'d mounts are those RemovableStorageNotifications knows about.)
453 // kDeviceDCIM1 -> kMountPointA * 456 // kDeviceDCIM1 -> kMountPointA *
454 // kDeviceDCIM2 -> kMountPointB * 457 // kDeviceDCIM2 -> kMountPointB *
455 MtabTestData test_data1[] = { 458 MtabTestData test_data1[] = {
456 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS), 459 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS),
457 MtabTestData(kDeviceDCIM2, test_path_b.value(), kValidFS), 460 MtabTestData(kDeviceDCIM2, test_path_b.value(), kValidFS),
458 }; 461 };
459 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(2);
460 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(0);
461 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1)); 462 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1));
463 EXPECT_EQ(2, observer().attach_calls());
464 EXPECT_EQ(0, observer().detach_calls());
462 465
463 // Attach |kDeviceDCIM1| to |kMountPointB|. 466 // Attach |kDeviceDCIM1| to |kMountPointB|.
464 // |kDeviceDCIM2| is inaccessible, so it is detached. |kDeviceDCIM1| has been 467 // |kDeviceDCIM2| is inaccessible, so it is detached. |kDeviceDCIM1| has been
465 // attached at |kMountPointB|, but is still accessible from |kMountPointA|. 468 // attached at |kMountPointB|, but is still accessible from |kMountPointA|.
466 // kDeviceDCIM1 -> kMountPointA * 469 // kDeviceDCIM1 -> kMountPointA *
467 // kDeviceDCIM2 -> kMountPointB 470 // kDeviceDCIM2 -> kMountPointB
468 // kDeviceDCIM1 -> kMountPointB 471 // kDeviceDCIM1 -> kMountPointB
469 MtabTestData test_data2[] = { 472 MtabTestData test_data2[] = {
470 MtabTestData(kDeviceDCIM1, test_path_b.value(), kValidFS), 473 MtabTestData(kDeviceDCIM1, test_path_b.value(), kValidFS),
471 }; 474 };
472 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(0);
473 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(1);
474 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); 475 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2));
476 EXPECT_EQ(2, observer().attach_calls());
477 EXPECT_EQ(1, observer().detach_calls());
475 478
476 // Detach |kDeviceDCIM1| from |kMountPointA|, causing a detach and attach 479 // Detach |kDeviceDCIM1| from |kMountPointA|, causing a detach and attach
477 // event. 480 // event.
478 // kDeviceDCIM2 -> kMountPointB 481 // kDeviceDCIM2 -> kMountPointB
479 // kDeviceDCIM1 -> kMountPointB * 482 // kDeviceDCIM1 -> kMountPointB *
480 MtabTestData test_data3[] = { 483 MtabTestData test_data3[] = {
481 MtabTestData(kDeviceDCIM2, test_path_b.value(), kValidFS), 484 MtabTestData(kDeviceDCIM2, test_path_b.value(), kValidFS),
482 MtabTestData(kDeviceDCIM1, test_path_b.value(), kValidFS), 485 MtabTestData(kDeviceDCIM1, test_path_b.value(), kValidFS),
483 }; 486 };
484 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(1);
485 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(1);
486 OverwriteMtabAndRunLoop(test_data3, arraysize(test_data3)); 487 OverwriteMtabAndRunLoop(test_data3, arraysize(test_data3));
488 EXPECT_EQ(3, observer().attach_calls());
489 EXPECT_EQ(2, observer().detach_calls());
487 490
488 // Attach |kDeviceDCIM1| to |kMountPointA|. 491 // Attach |kDeviceDCIM1| to |kMountPointA|.
489 // kDeviceDCIM2 -> kMountPointB 492 // kDeviceDCIM2 -> kMountPointB
490 // kDeviceDCIM1 -> kMountPointB * 493 // kDeviceDCIM1 -> kMountPointB *
491 // kDeviceDCIM1 -> kMountPointA 494 // kDeviceDCIM1 -> kMountPointA
492 MtabTestData test_data4[] = { 495 MtabTestData test_data4[] = {
493 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS), 496 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS),
494 }; 497 };
495 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(0);
496 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(0);
497 AppendToMtabAndRunLoop(test_data4, arraysize(test_data4)); 498 AppendToMtabAndRunLoop(test_data4, arraysize(test_data4));
499 EXPECT_EQ(3, observer().attach_calls());
500 EXPECT_EQ(2, observer().detach_calls());
498 501
499 // Detach |kDeviceDCIM1| from |kMountPointB|. 502 // Detach |kDeviceDCIM1| from |kMountPointB|.
500 // kDeviceDCIM1 -> kMountPointA * 503 // kDeviceDCIM1 -> kMountPointA *
501 // kDeviceDCIM2 -> kMountPointB * 504 // kDeviceDCIM2 -> kMountPointB *
502 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(2);
503 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(1);
504 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1)); 505 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1));
506 EXPECT_EQ(5, observer().attach_calls());
507 EXPECT_EQ(3, observer().detach_calls());
505 508
506 // Detach all devices. 509 // Detach all devices.
507 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(0);
508 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(2);
509 WriteEmptyMtabAndRunLoop(); 510 WriteEmptyMtabAndRunLoop();
511 EXPECT_EQ(5, observer().attach_calls());
512 EXPECT_EQ(5, observer().detach_calls());
510 } 513 }
511 514
512 TEST_F(RemovableDeviceNotificationLinuxTest, 515 TEST_F(RemovableDeviceNotificationLinuxTest,
513 MultipleMountPointsWithNonDCIMDevices) { 516 MultipleMountPointsWithNonDCIMDevices) {
514 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); 517 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA);
515 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB); 518 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB);
516 ASSERT_FALSE(test_path_a.empty()); 519 ASSERT_FALSE(test_path_a.empty());
517 ASSERT_FALSE(test_path_b.empty()); 520 ASSERT_FALSE(test_path_b.empty());
518 521
519 // Attach to one first. (*'d mounts are those SystemMonitor knows about.) 522 // Attach to one first.
523 // (*'d mounts are those RemovableStorageNotifications knows about.)
520 // kDeviceDCIM1 -> kMountPointA * 524 // kDeviceDCIM1 -> kMountPointA *
521 MtabTestData test_data1[] = { 525 MtabTestData test_data1[] = {
522 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS), 526 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS),
523 }; 527 };
524 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(1);
525 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(0);
526 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1)); 528 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1));
529 EXPECT_EQ(1, observer().attach_calls());
530 EXPECT_EQ(0, observer().detach_calls());
527 531
528 // Attach |kDeviceDCIM1| to |kMountPointB|. 532 // Attach |kDeviceDCIM1| to |kMountPointB|.
529 // kDeviceDCIM1 -> kMountPointA * 533 // kDeviceDCIM1 -> kMountPointA *
530 // kDeviceDCIM1 -> kMountPointB 534 // kDeviceDCIM1 -> kMountPointB
531 MtabTestData test_data2[] = { 535 MtabTestData test_data2[] = {
532 MtabTestData(kDeviceDCIM1, test_path_b.value(), kValidFS), 536 MtabTestData(kDeviceDCIM1, test_path_b.value(), kValidFS),
533 }; 537 };
534 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(0);
535 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(0);
536 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); 538 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2));
539 EXPECT_EQ(1, observer().attach_calls());
540 EXPECT_EQ(0, observer().detach_calls());
537 541
538 // Attach |kDeviceFixed| (a non-removable device) to |kMountPointA|. 542 // Attach |kDeviceFixed| (a non-removable device) to |kMountPointA|.
539 // kDeviceDCIM1 -> kMountPointA 543 // kDeviceDCIM1 -> kMountPointA
540 // kDeviceDCIM1 -> kMountPointB * 544 // kDeviceDCIM1 -> kMountPointB *
541 // kDeviceFixed -> kMountPointA 545 // kDeviceFixed -> kMountPointA
542 MtabTestData test_data3[] = { 546 MtabTestData test_data3[] = {
543 MtabTestData(kDeviceFixed, test_path_a.value(), kValidFS), 547 MtabTestData(kDeviceFixed, test_path_a.value(), kValidFS),
544 }; 548 };
545 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(1);
546 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(1);
547 RemoveDCIMDirFromMountPoint(kMountPointA); 549 RemoveDCIMDirFromMountPoint(kMountPointA);
548 AppendToMtabAndRunLoop(test_data3, arraysize(test_data3)); 550 AppendToMtabAndRunLoop(test_data3, arraysize(test_data3));
551 EXPECT_EQ(2, observer().attach_calls());
552 EXPECT_EQ(1, observer().detach_calls());
549 553
550 // Detach |kDeviceFixed|. 554 // Detach |kDeviceFixed|.
551 // kDeviceDCIM1 -> kMountPointA 555 // kDeviceDCIM1 -> kMountPointA
552 // kDeviceDCIM1 -> kMountPointB * 556 // kDeviceDCIM1 -> kMountPointB *
553 MtabTestData test_data4[] = { 557 MtabTestData test_data4[] = {
554 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS), 558 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS),
555 MtabTestData(kDeviceDCIM1, test_path_b.value(), kValidFS), 559 MtabTestData(kDeviceDCIM1, test_path_b.value(), kValidFS),
556 }; 560 };
557 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(0);
558 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(0);
559 CreateMountPointWithDCIMDir(kMountPointA); 561 CreateMountPointWithDCIMDir(kMountPointA);
560 OverwriteMtabAndRunLoop(test_data4, arraysize(test_data4)); 562 OverwriteMtabAndRunLoop(test_data4, arraysize(test_data4));
563 EXPECT_EQ(2, observer().attach_calls());
564 EXPECT_EQ(1, observer().detach_calls());
561 565
562 // Attach |kDeviceNoDCIM| (a non-DCIM device) to |kMountPointB|. 566 // Attach |kDeviceNoDCIM| (a non-DCIM device) to |kMountPointB|.
563 // kDeviceDCIM1 -> kMountPointA * 567 // kDeviceDCIM1 -> kMountPointA *
564 // kDeviceDCIM1 -> kMountPointB 568 // kDeviceDCIM1 -> kMountPointB
565 // kDeviceNoDCIM -> kMountPointB * 569 // kDeviceNoDCIM -> kMountPointB *
566 MtabTestData test_data5[] = { 570 MtabTestData test_data5[] = {
567 MtabTestData(kDeviceNoDCIM, test_path_b.value(), kValidFS), 571 MtabTestData(kDeviceNoDCIM, test_path_b.value(), kValidFS),
568 }; 572 };
569 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(2);
570 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(1);
571 file_util::Delete(test_path_b.Append(kDCIMDirectoryName), false); 573 file_util::Delete(test_path_b.Append(kDCIMDirectoryName), false);
572 AppendToMtabAndRunLoop(test_data5, arraysize(test_data5)); 574 AppendToMtabAndRunLoop(test_data5, arraysize(test_data5));
575 EXPECT_EQ(4, observer().attach_calls());
576 EXPECT_EQ(2, observer().detach_calls());
573 577
574 // Detach |kDeviceNoDCIM|. 578 // Detach |kDeviceNoDCIM|.
575 // kDeviceDCIM1 -> kMountPointA * 579 // kDeviceDCIM1 -> kMountPointA *
576 // kDeviceDCIM1 -> kMountPointB 580 // kDeviceDCIM1 -> kMountPointB
577 MtabTestData test_data6[] = { 581 MtabTestData test_data6[] = {
578 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS), 582 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS),
579 MtabTestData(kDeviceDCIM1, test_path_b.value(), kValidFS), 583 MtabTestData(kDeviceDCIM1, test_path_b.value(), kValidFS),
580 }; 584 };
581 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(0);
582 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(1);
583 CreateMountPointWithDCIMDir(kMountPointB); 585 CreateMountPointWithDCIMDir(kMountPointB);
584 OverwriteMtabAndRunLoop(test_data6, arraysize(test_data6)); 586 OverwriteMtabAndRunLoop(test_data6, arraysize(test_data6));
587 EXPECT_EQ(4, observer().attach_calls());
588 EXPECT_EQ(3, observer().detach_calls());
585 589
586 // Detach |kDeviceDCIM1| from |kMountPointB|. 590 // Detach |kDeviceDCIM1| from |kMountPointB|.
587 // kDeviceDCIM1 -> kMountPointA * 591 // kDeviceDCIM1 -> kMountPointA *
588 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(0);
589 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(0);
590 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1)); 592 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1));
593 EXPECT_EQ(4, observer().attach_calls());
594 EXPECT_EQ(3, observer().detach_calls());
591 595
592 // Detach all devices. 596 // Detach all devices.
593 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(0);
594 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(1);
595 WriteEmptyMtabAndRunLoop(); 597 WriteEmptyMtabAndRunLoop();
598 EXPECT_EQ(4, observer().attach_calls());
599 EXPECT_EQ(4, observer().detach_calls());
596 } 600 }
597 601
598 TEST_F(RemovableDeviceNotificationLinuxTest, DeviceLookUp) { 602 TEST_F(RemovableDeviceNotificationLinuxTest, DeviceLookUp) {
599 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); 603 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA);
600 FilePath test_path_b = CreateMountPointWithoutDCIMDir(kMountPointB); 604 FilePath test_path_b = CreateMountPointWithoutDCIMDir(kMountPointB);
601 FilePath test_path_c = CreateMountPointWithoutDCIMDir(kMountPointC); 605 FilePath test_path_c = CreateMountPointWithoutDCIMDir(kMountPointC);
602 ASSERT_FALSE(test_path_a.empty()); 606 ASSERT_FALSE(test_path_a.empty());
603 ASSERT_FALSE(test_path_b.empty()); 607 ASSERT_FALSE(test_path_b.empty());
604 ASSERT_FALSE(test_path_c.empty()); 608 ASSERT_FALSE(test_path_c.empty());
605 609
606 // Attach to one first. (*'d mounts are those SystemMonitor knows about.) 610 // Attach to one first.
611 // (*'d mounts are those RemovableStorageNotifications knows about.)
607 // kDeviceDCIM1 -> kMountPointA * 612 // kDeviceDCIM1 -> kMountPointA *
608 // kDeviceNoDCIM -> kMountPointB * 613 // kDeviceNoDCIM -> kMountPointB *
609 // kDeviceFixed -> kMountPointC 614 // kDeviceFixed -> kMountPointC
610 MtabTestData test_data1[] = { 615 MtabTestData test_data1[] = {
611 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS), 616 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS),
612 MtabTestData(kDeviceNoDCIM, test_path_b.value(), kValidFS), 617 MtabTestData(kDeviceNoDCIM, test_path_b.value(), kValidFS),
613 MtabTestData(kDeviceFixed, test_path_c.value(), kValidFS), 618 MtabTestData(kDeviceFixed, test_path_c.value(), kValidFS),
614 }; 619 };
615 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(2);
616 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(0);
617 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1)); 620 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1));
621 EXPECT_EQ(2, observer().attach_calls());
622 EXPECT_EQ(0, observer().detach_calls());
618 623
619 base::SystemMonitor::RemovableStorageInfo device_info; 624 RemovableStorageNotifications::StorageInfo device_info;
620 EXPECT_TRUE(notifier()->GetDeviceInfoForPath(test_path_a, &device_info)); 625 EXPECT_TRUE(notifier()->GetDeviceInfoForPath(test_path_a, &device_info));
621 EXPECT_EQ(GetDeviceId(kDeviceDCIM1), device_info.device_id); 626 EXPECT_EQ(GetDeviceId(kDeviceDCIM1), device_info.device_id);
622 EXPECT_EQ(test_path_a.value(), device_info.location); 627 EXPECT_EQ(test_path_a.value(), device_info.location);
623 EXPECT_EQ(GetDeviceName(kDeviceDCIM1), device_info.name); 628 EXPECT_EQ(GetDeviceName(kDeviceDCIM1), device_info.name);
624 629
625 EXPECT_TRUE(notifier()->GetDeviceInfoForPath(test_path_b, &device_info)); 630 EXPECT_TRUE(notifier()->GetDeviceInfoForPath(test_path_b, &device_info));
626 EXPECT_EQ(GetDeviceId(kDeviceNoDCIM), device_info.device_id); 631 EXPECT_EQ(GetDeviceId(kDeviceNoDCIM), device_info.device_id);
627 EXPECT_EQ(test_path_b.value(), device_info.location); 632 EXPECT_EQ(test_path_b.value(), device_info.location);
628 EXPECT_EQ(GetDeviceName(kDeviceNoDCIM), device_info.name); 633 EXPECT_EQ(GetDeviceName(kDeviceNoDCIM), device_info.name);
629 634
(...skipping 14 matching lines...) Expand all
644 649
645 // One device attached at multiple points. 650 // One device attached at multiple points.
646 // kDeviceDCIM1 -> kMountPointA * 651 // kDeviceDCIM1 -> kMountPointA *
647 // kDeviceFixed -> kMountPointB 652 // kDeviceFixed -> kMountPointB
648 // kDeviceFixed -> kMountPointC 653 // kDeviceFixed -> kMountPointC
649 MtabTestData test_data2[] = { 654 MtabTestData test_data2[] = {
650 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS), 655 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS),
651 MtabTestData(kDeviceFixed, test_path_b.value(), kValidFS), 656 MtabTestData(kDeviceFixed, test_path_b.value(), kValidFS),
652 MtabTestData(kDeviceFixed, test_path_c.value(), kValidFS), 657 MtabTestData(kDeviceFixed, test_path_c.value(), kValidFS),
653 }; 658 };
654 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(0);
655 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(1);
656 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); 659 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2));
657 660
658 EXPECT_TRUE(notifier()->GetDeviceInfoForPath(test_path_a, &device_info)); 661 EXPECT_TRUE(notifier()->GetDeviceInfoForPath(test_path_a, &device_info));
659 EXPECT_EQ(GetDeviceId(kDeviceDCIM1), device_info.device_id); 662 EXPECT_EQ(GetDeviceId(kDeviceDCIM1), device_info.device_id);
660 663
661 EXPECT_TRUE(notifier()->GetDeviceInfoForPath(test_path_b, &device_info)); 664 EXPECT_TRUE(notifier()->GetDeviceInfoForPath(test_path_b, &device_info));
662 EXPECT_EQ(GetDeviceId(kDeviceFixed), device_info.device_id); 665 EXPECT_EQ(GetDeviceId(kDeviceFixed), device_info.device_id);
663 666
664 EXPECT_TRUE(notifier()->GetDeviceInfoForPath(test_path_c, &device_info)); 667 EXPECT_TRUE(notifier()->GetDeviceInfoForPath(test_path_c, &device_info));
665 EXPECT_EQ(GetDeviceId(kDeviceFixed), device_info.device_id); 668 EXPECT_EQ(GetDeviceId(kDeviceFixed), device_info.device_id);
669
670 EXPECT_EQ(2, observer().attach_calls());
671 EXPECT_EQ(1, observer().detach_calls());
666 } 672 }
667 673
668 TEST_F(RemovableDeviceNotificationLinuxTest, DevicePartitionSize) { 674 TEST_F(RemovableDeviceNotificationLinuxTest, DevicePartitionSize) {
669 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); 675 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA);
670 FilePath test_path_b = CreateMountPointWithoutDCIMDir(kMountPointB); 676 FilePath test_path_b = CreateMountPointWithoutDCIMDir(kMountPointB);
671 ASSERT_FALSE(test_path_a.empty()); 677 ASSERT_FALSE(test_path_a.empty());
672 ASSERT_FALSE(test_path_b.empty()); 678 ASSERT_FALSE(test_path_b.empty());
673 679
674 MtabTestData test_data1[] = { 680 MtabTestData test_data1[] = {
675 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS), 681 MtabTestData(kDeviceDCIM1, test_path_a.value(), kValidFS),
676 MtabTestData(kDeviceNoDCIM, test_path_b.value(), kValidFS), 682 MtabTestData(kDeviceNoDCIM, test_path_b.value(), kValidFS),
677 MtabTestData(kDeviceFixed, kInvalidPath, kInvalidFS), 683 MtabTestData(kDeviceFixed, kInvalidPath, kInvalidFS),
678 }; 684 };
679 EXPECT_CALL(observer(), OnRemovableStorageAttached(_, _, _)).Times(2);
680 EXPECT_CALL(observer(), OnRemovableStorageDetached(_)).Times(0);
681 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1)); 685 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1));
686 EXPECT_EQ(2, observer().attach_calls());
687 EXPECT_EQ(0, observer().detach_calls());
682 688
683 EXPECT_EQ(GetDevicePartitionSize(kDeviceDCIM1), 689 EXPECT_EQ(GetDevicePartitionSize(kDeviceDCIM1),
684 notifier()->GetStorageSize(test_path_a.value())); 690 notifier()->GetStorageSize(test_path_a.value()));
685 EXPECT_EQ(GetDevicePartitionSize(kDeviceNoDCIM), 691 EXPECT_EQ(GetDevicePartitionSize(kDeviceNoDCIM),
686 notifier()->GetStorageSize(test_path_b.value())); 692 notifier()->GetStorageSize(test_path_b.value()));
687 EXPECT_EQ(GetDevicePartitionSize(kInvalidPath), 693 EXPECT_EQ(GetDevicePartitionSize(kInvalidPath),
688 notifier()->GetStorageSize(kInvalidPath)); 694 notifier()->GetStorageSize(kInvalidPath));
689 } 695 }
690 696
691 } // namespace 697 } // namespace
692 698
693 } // namespace chrome 699 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698