OLD | NEW |
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 // MediaDeviceNotificationsLinux unit tests. | 5 // MediaDeviceNotificationsLinux unit tests. |
6 | 6 |
7 #include "chrome/browser/media_gallery/media_device_notifications_linux.h" | 7 #include "chrome/browser/media_gallery/media_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/logging.h" | 15 #include "base/logging.h" |
16 #include "base/memory/scoped_ptr.h" | 16 #include "base/memory/scoped_ptr.h" |
17 #include "base/message_loop.h" | 17 #include "base/message_loop.h" |
18 #include "base/scoped_temp_dir.h" | 18 #include "base/scoped_temp_dir.h" |
19 #include "base/system_monitor/system_monitor.h" | 19 #include "base/system_monitor/system_monitor.h" |
20 #include "base/test/mock_devices_changed_observer.h" | 20 #include "base/test/mock_devices_changed_observer.h" |
21 #include "base/utf_string_conversions.h" | 21 #include "base/utf_string_conversions.h" |
| 22 #include "chrome/browser/media_gallery/media_storage_util.h" |
22 #include "content/public/test/test_browser_thread.h" | 23 #include "content/public/test/test_browser_thread.h" |
23 #include "testing/gtest/include/gtest/gtest.h" | 24 #include "testing/gtest/include/gtest/gtest.h" |
24 | 25 |
25 namespace chrome { | 26 namespace chrome { |
26 | 27 |
27 namespace { | 28 namespace { |
28 | 29 |
29 using testing::_; | 30 using testing::_; |
30 | 31 |
31 const char kValidFS[] = "vfat"; | 32 const char kValidFS[] = "vfat"; |
32 const char kInvalidFS[] = "invalidfs"; | 33 const char kInvalidFS[] = "invalidfs"; |
33 | 34 |
34 const char kInvalidPath[] = "invalid path does not exist"; | 35 const char kInvalidPath[] = "invalid path does not exist"; |
35 | 36 |
36 const char kDevice1[] = "d1"; | 37 const char kDevice1[] = "d1"; |
37 const char kDevice2[] = "d2"; | 38 const char kDevice2[] = "d2"; |
38 const char kDevice3[] = "d3"; | 39 const char kDevice3[] = "d3"; |
39 | 40 |
40 const char kDeviceId1[] = "UUID:FFF0-000F"; | 41 const char kDeviceId1[] = "UUID:FFF0-000F"; |
41 const char kDeviceId2[] = "VendorModelSerial:ComName:Model2010:898989898989"; | 42 const char kDeviceId2[] = "VendorModelSerial:ComName:Model2010:898989898989"; |
42 const char kDeviceId3[] = "VendorModelSerial:::WEM319X792"; | 43 const char kDeviceId3[] = "VendorModelSerial:::WEM319X792"; |
43 | 44 |
44 const char kDeviceLabel1[] = "TEST_USB_MODEL_1"; | 45 const char kDeviceLabel1[] = "TEST_USB_MODEL_1"; |
45 const char kDeviceLabel2[] = "TEST_USB_MODEL_2"; | 46 const char kDeviceLabel2[] = "TEST_USB_MODEL_2"; |
46 const char kDeviceLabel3[] = "TEST_USB_MODEL_3"; | 47 const char kDeviceLabel3[] = "TEST_USB_MODEL_3"; |
47 | 48 |
48 const char kMountPointA[] = "mnt_a"; | 49 const char kMountPointA[] = "mnt_a"; |
49 const char kMountPointB[] = "mnt_b"; | 50 const char kMountPointB[] = "mnt_b"; |
50 | 51 |
51 bool GetDeviceInfo(const std::string& dev_path, | 52 std::string GetDCIMDeviceId(std::string unique_id) { |
52 std::string* id, | 53 return chrome::MediaStorageUtil::MakeDeviceId( |
| 54 chrome::MediaStorageUtil::USB_MASS_STORAGE_WITH_DCIM, unique_id); |
| 55 } |
| 56 |
| 57 bool GetDeviceInfo(const std::string& dev_path, std::string* id, |
53 string16* name) { | 58 string16* name) { |
54 std::string device_name; | 59 std::string device_name; |
55 if (dev_path == kDevice1) { | 60 if (dev_path == kDevice1) { |
56 *id = std::string(kDeviceId1); | 61 *id = GetDCIMDeviceId(kDeviceId1); |
57 device_name = kDeviceLabel1; | 62 device_name = kDeviceLabel1; |
58 } else if (dev_path == kDevice2) { | 63 } else if (dev_path == kDevice2) { |
59 *id = std::string(kDeviceId2); | 64 *id = GetDCIMDeviceId(kDeviceId2); |
60 device_name = kDeviceLabel2; | 65 device_name = kDeviceLabel2; |
61 } else if (dev_path == kDevice3) { | 66 } else if (dev_path == kDevice3) { |
62 *id = std::string(kDeviceId3); | 67 *id = GetDCIMDeviceId(kDeviceId3); |
63 device_name = kDeviceLabel3; | 68 device_name = kDeviceLabel3; |
64 } else { | 69 } else { |
65 return false; | 70 return false; |
66 } | 71 } |
67 | 72 |
68 *name = ASCIIToUTF16(device_name); | 73 *name = ASCIIToUTF16(device_name); |
69 return true; | 74 return true; |
70 } | 75 } |
71 | 76 |
72 class MediaDeviceNotificationsLinuxTestWrapper | 77 class MediaDeviceNotificationsLinuxTestWrapper |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 TEST_F(MediaDeviceNotificationsLinuxTest, BasicAttachDetach) { | 265 TEST_F(MediaDeviceNotificationsLinuxTest, BasicAttachDetach) { |
261 testing::Sequence mock_sequence; | 266 testing::Sequence mock_sequence; |
262 FilePath test_path = CreateMountPointWithDCIMDir(kMountPointA); | 267 FilePath test_path = CreateMountPointWithDCIMDir(kMountPointA); |
263 ASSERT_FALSE(test_path.empty()); | 268 ASSERT_FALSE(test_path.empty()); |
264 MtabTestData test_data[] = { | 269 MtabTestData test_data[] = { |
265 MtabTestData(kDevice1, kInvalidPath, kValidFS), | 270 MtabTestData(kDevice1, kInvalidPath, kValidFS), |
266 MtabTestData(kDevice2, test_path.value(), kValidFS), | 271 MtabTestData(kDevice2, test_path.value(), kValidFS), |
267 }; | 272 }; |
268 // Only |kDevice2| should be attached, since |kDevice1| has a bad path. | 273 // Only |kDevice2| should be attached, since |kDevice1| has a bad path. |
269 EXPECT_CALL(observer(), | 274 EXPECT_CALL(observer(), |
270 OnMediaDeviceAttached(kDeviceId2, | 275 OnMediaDeviceAttached(GetDCIMDeviceId(kDeviceId2), |
271 ASCIIToUTF16(kDeviceLabel2), | 276 ASCIIToUTF16(kDeviceLabel2), |
272 base::SystemMonitor::TYPE_PATH, | |
273 test_path.value())) | 277 test_path.value())) |
274 .InSequence(mock_sequence); | 278 .InSequence(mock_sequence); |
275 AppendToMtabAndRunLoop(test_data, arraysize(test_data)); | 279 AppendToMtabAndRunLoop(test_data, arraysize(test_data)); |
276 | 280 |
277 // |kDevice2| should be detached here. | 281 // |kDevice2| should be detached here. |
278 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId2)) | 282 EXPECT_CALL(observer(), OnMediaDeviceDetached(GetDCIMDeviceId(kDeviceId2))) |
279 .InSequence(mock_sequence); | 283 .InSequence(mock_sequence); |
280 WriteEmptyMtabAndRunLoop(); | 284 WriteEmptyMtabAndRunLoop(); |
281 } | 285 } |
282 | 286 |
283 // Only mount points with DCIM directories are recognized. | 287 // Only mount points with DCIM directories are recognized. |
284 TEST_F(MediaDeviceNotificationsLinuxTest, DCIM) { | 288 TEST_F(MediaDeviceNotificationsLinuxTest, DCIM) { |
285 testing::Sequence mock_sequence; | 289 testing::Sequence mock_sequence; |
286 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); | 290 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); |
287 ASSERT_FALSE(test_path_a.empty()); | 291 ASSERT_FALSE(test_path_a.empty()); |
288 MtabTestData test_data1[] = { | 292 MtabTestData test_data1[] = { |
289 MtabTestData(kDevice1, test_path_a.value(), kValidFS), | 293 MtabTestData(kDevice1, test_path_a.value(), kValidFS), |
290 }; | 294 }; |
291 // |kDevice1| should be attached as expected. | 295 // |kDevice1| should be attached as expected. |
292 EXPECT_CALL(observer(), | 296 EXPECT_CALL(observer(), |
293 OnMediaDeviceAttached(kDeviceId1, | 297 OnMediaDeviceAttached(GetDCIMDeviceId(kDeviceId1), |
294 ASCIIToUTF16(kDeviceLabel1), | 298 ASCIIToUTF16(kDeviceLabel1), |
295 base::SystemMonitor::TYPE_PATH, | |
296 test_path_a.value())) | 299 test_path_a.value())) |
297 .InSequence(mock_sequence); | 300 .InSequence(mock_sequence); |
298 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1)); | 301 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1)); |
299 | 302 |
300 // This should do nothing, since |kMountPointB| does not have a DCIM dir. | 303 // This should do nothing, since |kMountPointB| does not have a DCIM dir. |
301 FilePath test_path_b = CreateMountPointWithoutDCIMDir(kMountPointB); | 304 FilePath test_path_b = CreateMountPointWithoutDCIMDir(kMountPointB); |
302 ASSERT_FALSE(test_path_b.empty()); | 305 ASSERT_FALSE(test_path_b.empty()); |
303 MtabTestData test_data2[] = { | 306 MtabTestData test_data2[] = { |
304 MtabTestData(kDevice2, test_path_b.value(), kValidFS), | 307 MtabTestData(kDevice2, test_path_b.value(), kValidFS), |
305 }; | 308 }; |
306 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); | 309 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); |
307 | 310 |
308 // |kDevice1| should be detached as expected. | 311 // |kDevice1| should be detached as expected. |
309 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId1)) | 312 EXPECT_CALL(observer(), OnMediaDeviceDetached(GetDCIMDeviceId(kDeviceId1))) |
310 .InSequence(mock_sequence); | 313 .InSequence(mock_sequence); |
311 WriteEmptyMtabAndRunLoop(); | 314 WriteEmptyMtabAndRunLoop(); |
312 } | 315 } |
313 | 316 |
314 // More complicated test case with multiple devices on multiple mount points. | 317 // More complicated test case with multiple devices on multiple mount points. |
315 TEST_F(MediaDeviceNotificationsLinuxTest, SwapMountPoints) { | 318 TEST_F(MediaDeviceNotificationsLinuxTest, SwapMountPoints) { |
316 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); | 319 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); |
317 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB); | 320 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB); |
318 ASSERT_FALSE(test_path_a.empty()); | 321 ASSERT_FALSE(test_path_a.empty()); |
319 ASSERT_FALSE(test_path_b.empty()); | 322 ASSERT_FALSE(test_path_b.empty()); |
320 | 323 |
321 // Attach two devices. | 324 // Attach two devices. |
322 // kDevice1 -> kMountPointA | 325 // kDevice1 -> kMountPointA |
323 // kDevice2 -> kMountPointB | 326 // kDevice2 -> kMountPointB |
324 MtabTestData test_data1[] = { | 327 MtabTestData test_data1[] = { |
325 MtabTestData(kDevice1, test_path_a.value(), kValidFS), | 328 MtabTestData(kDevice1, test_path_a.value(), kValidFS), |
326 MtabTestData(kDevice2, test_path_b.value(), kValidFS), | 329 MtabTestData(kDevice2, test_path_b.value(), kValidFS), |
327 }; | 330 }; |
328 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(2); | 331 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(2); |
329 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0); | 332 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0); |
330 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1)); | 333 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1)); |
331 | 334 |
332 // Detach two devices from old mount points and attach the devices at new | 335 // Detach two devices from old mount points and attach the devices at new |
333 // mount points. | 336 // mount points. |
334 // kDevice1 -> kMountPointB | 337 // kDevice1 -> kMountPointB |
335 // kDevice2 -> kMountPointA | 338 // kDevice2 -> kMountPointA |
336 MtabTestData test_data2[] = { | 339 MtabTestData test_data2[] = { |
337 MtabTestData(kDevice1, test_path_b.value(), kValidFS), | 340 MtabTestData(kDevice1, test_path_b.value(), kValidFS), |
338 MtabTestData(kDevice2, test_path_a.value(), kValidFS), | 341 MtabTestData(kDevice2, test_path_a.value(), kValidFS), |
339 }; | 342 }; |
340 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(2); | 343 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(2); |
341 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2); | 344 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2); |
342 OverwriteMtabAndRunLoop(test_data2, arraysize(test_data2)); | 345 OverwriteMtabAndRunLoop(test_data2, arraysize(test_data2)); |
343 | 346 |
344 // Detach all devices. | 347 // Detach all devices. |
345 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0); | 348 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(0); |
346 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2); | 349 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2); |
347 WriteEmptyMtabAndRunLoop(); | 350 WriteEmptyMtabAndRunLoop(); |
348 } | 351 } |
349 | 352 |
350 // More complicated test case with multiple devices on multiple mount points. | 353 // More complicated test case with multiple devices on multiple mount points. |
351 TEST_F(MediaDeviceNotificationsLinuxTest, MultiDevicesMultiMountPoints) { | 354 TEST_F(MediaDeviceNotificationsLinuxTest, MultiDevicesMultiMountPoints) { |
352 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); | 355 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); |
353 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB); | 356 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB); |
354 ASSERT_FALSE(test_path_a.empty()); | 357 ASSERT_FALSE(test_path_a.empty()); |
355 ASSERT_FALSE(test_path_b.empty()); | 358 ASSERT_FALSE(test_path_b.empty()); |
356 | 359 |
357 // Attach two devices. | 360 // Attach two devices. |
358 // kDevice1 -> kMountPointA | 361 // kDevice1 -> kMountPointA |
359 // kDevice2 -> kMountPointB | 362 // kDevice2 -> kMountPointB |
360 MtabTestData test_data1[] = { | 363 MtabTestData test_data1[] = { |
361 MtabTestData(kDevice1, test_path_a.value(), kValidFS), | 364 MtabTestData(kDevice1, test_path_a.value(), kValidFS), |
362 MtabTestData(kDevice2, test_path_b.value(), kValidFS), | 365 MtabTestData(kDevice2, test_path_b.value(), kValidFS), |
363 }; | 366 }; |
364 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(2); | 367 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(2); |
365 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0); | 368 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0); |
366 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1)); | 369 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1)); |
367 | 370 |
368 // Attach |kDevice1| to |kMountPointB|. | 371 // Attach |kDevice1| to |kMountPointB|. |
369 // |kDevice2| is inaccessible, so it is detached. |kDevice1| has been | 372 // |kDevice2| is inaccessible, so it is detached. |kDevice1| has been |
370 // re-attached at |kMountPointB|, so it is 'detached' from kMountPointA. | 373 // re-attached at |kMountPointB|, so it is 'detached' from kMountPointA. |
371 // kDevice1 -> kMountPointA | 374 // kDevice1 -> kMountPointA |
372 // kDevice2 -> kMountPointB | 375 // kDevice2 -> kMountPointB |
373 // kDevice1 -> kMountPointB | 376 // kDevice1 -> kMountPointB |
374 MtabTestData test_data2[] = { | 377 MtabTestData test_data2[] = { |
375 MtabTestData(kDevice1, test_path_b.value(), kValidFS), | 378 MtabTestData(kDevice1, test_path_b.value(), kValidFS), |
376 }; | 379 }; |
377 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(1); | 380 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(1); |
378 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2); | 381 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2); |
379 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); | 382 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); |
380 | 383 |
381 // Attach |kDevice2| to |kMountPointA|. | 384 // Attach |kDevice2| to |kMountPointA|. |
382 // kDevice1 -> kMountPointA | 385 // kDevice1 -> kMountPointA |
383 // kDevice2 -> kMountPointB | 386 // kDevice2 -> kMountPointB |
384 // kDevice1 -> kMountPointB | 387 // kDevice1 -> kMountPointB |
385 // kDevice2 -> kMountPointA | 388 // kDevice2 -> kMountPointA |
386 MtabTestData test_data3[] = { | 389 MtabTestData test_data3[] = { |
387 MtabTestData(kDevice2, test_path_a.value(), kValidFS), | 390 MtabTestData(kDevice2, test_path_a.value(), kValidFS), |
388 }; | 391 }; |
389 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(1); | 392 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(1); |
390 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0); | 393 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0); |
391 AppendToMtabAndRunLoop(test_data3, arraysize(test_data3)); | 394 AppendToMtabAndRunLoop(test_data3, arraysize(test_data3)); |
392 | 395 |
393 // Detach |kDevice2| from |kMountPointA|. | 396 // Detach |kDevice2| from |kMountPointA|. |
394 // kDevice1 -> kMountPointA | 397 // kDevice1 -> kMountPointA |
395 // kDevice2 -> kMountPointB | 398 // kDevice2 -> kMountPointB |
396 // kDevice1 -> kMountPointB | 399 // kDevice1 -> kMountPointB |
397 MtabTestData test_data4[] = { | 400 MtabTestData test_data4[] = { |
398 MtabTestData(kDevice1, test_path_a.value(), kValidFS), | 401 MtabTestData(kDevice1, test_path_a.value(), kValidFS), |
399 MtabTestData(kDevice2, test_path_b.value(), kValidFS), | 402 MtabTestData(kDevice2, test_path_b.value(), kValidFS), |
400 MtabTestData(kDevice1, test_path_b.value(), kValidFS), | 403 MtabTestData(kDevice1, test_path_b.value(), kValidFS), |
401 }; | 404 }; |
402 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0); | 405 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(0); |
403 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(1); | 406 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(1); |
404 OverwriteMtabAndRunLoop(test_data4, arraysize(test_data4)); | 407 OverwriteMtabAndRunLoop(test_data4, arraysize(test_data4)); |
405 | 408 |
406 // Detach |kDevice1| from |kMountPointB|. | 409 // Detach |kDevice1| from |kMountPointB|. |
407 // kDevice1 -> kMountPointA | 410 // kDevice1 -> kMountPointA |
408 // kDevice2 -> kMountPointB | 411 // kDevice2 -> kMountPointB |
409 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(2); | 412 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(2); |
410 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(1); | 413 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(1); |
411 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1)); | 414 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1)); |
412 | 415 |
413 // Detach all devices. | 416 // Detach all devices. |
414 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0); | 417 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(0); |
415 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2); | 418 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2); |
416 WriteEmptyMtabAndRunLoop(); | 419 WriteEmptyMtabAndRunLoop(); |
417 } | 420 } |
418 | 421 |
419 // More complicated test case with multiple devices on one mount point. | 422 // More complicated test case with multiple devices on one mount point. |
420 TEST_F(MediaDeviceNotificationsLinuxTest, MultiDevicesOneMountPoint) { | 423 TEST_F(MediaDeviceNotificationsLinuxTest, MultiDevicesOneMountPoint) { |
421 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); | 424 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); |
422 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB); | 425 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB); |
423 ASSERT_FALSE(test_path_a.empty()); | 426 ASSERT_FALSE(test_path_a.empty()); |
424 ASSERT_FALSE(test_path_b.empty()); | 427 ASSERT_FALSE(test_path_b.empty()); |
425 | 428 |
426 // |kDevice1| is most recently mounted at |kMountPointB|. | 429 // |kDevice1| is most recently mounted at |kMountPointB|. |
427 // kDevice1 -> kMountPointA | 430 // kDevice1 -> kMountPointA |
428 // kDevice2 -> kMountPointB | 431 // kDevice2 -> kMountPointB |
429 // kDevice1 -> kMountPointB | 432 // kDevice1 -> kMountPointB |
430 MtabTestData test_data1[] = { | 433 MtabTestData test_data1[] = { |
431 MtabTestData(kDevice1, test_path_a.value(), kValidFS), | 434 MtabTestData(kDevice1, test_path_a.value(), kValidFS), |
432 MtabTestData(kDevice2, test_path_b.value(), kValidFS), | 435 MtabTestData(kDevice2, test_path_b.value(), kValidFS), |
433 MtabTestData(kDevice1, test_path_b.value(), kValidFS), | 436 MtabTestData(kDevice1, test_path_b.value(), kValidFS), |
434 }; | 437 }; |
435 EXPECT_CALL(observer(), | 438 EXPECT_CALL(observer(), |
436 OnMediaDeviceAttached(kDeviceId1, | 439 OnMediaDeviceAttached(GetDCIMDeviceId(kDeviceId1), |
437 ASCIIToUTF16(kDeviceLabel1), | 440 ASCIIToUTF16(kDeviceLabel1), |
438 base::SystemMonitor::TYPE_PATH, | |
439 test_path_b.value())) | 441 test_path_b.value())) |
440 .Times(1); | 442 .Times(1); |
441 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0); | 443 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0); |
442 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1)); | 444 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1)); |
443 | 445 |
444 // Attach |kDevice3| to |kMountPointB|. | 446 // Attach |kDevice3| to |kMountPointB|. |
445 // |kDevice1| is inaccessible at its most recent mount point, so it is | 447 // |kDevice1| is inaccessible at its most recent mount point, so it is |
446 // detached and unavailable, even though it is still accessible via | 448 // detached and unavailable, even though it is still accessible via |
447 // |kMountPointA|. | 449 // |kMountPointA|. |
448 // kDevice1 -> kMountPointA | 450 // kDevice1 -> kMountPointA |
449 // kDevice2 -> kMountPointB | 451 // kDevice2 -> kMountPointB |
450 // kDevice1 -> kMountPointB | 452 // kDevice1 -> kMountPointB |
451 // kDevice3 -> kMountPointB | 453 // kDevice3 -> kMountPointB |
452 MtabTestData test_data2[] = { | 454 MtabTestData test_data2[] = { |
453 MtabTestData(kDevice3, test_path_b.value(), kValidFS), | 455 MtabTestData(kDevice3, test_path_b.value(), kValidFS), |
454 }; | 456 }; |
455 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId1)).Times(1); | 457 EXPECT_CALL(observer(), OnMediaDeviceDetached(GetDCIMDeviceId(kDeviceId1))) |
| 458 .Times(1); |
456 EXPECT_CALL(observer(), | 459 EXPECT_CALL(observer(), |
457 OnMediaDeviceAttached(kDeviceId3, | 460 OnMediaDeviceAttached(GetDCIMDeviceId(kDeviceId3), |
458 ASCIIToUTF16(kDeviceLabel3), | 461 ASCIIToUTF16(kDeviceLabel3), |
459 base::SystemMonitor::TYPE_PATH, | |
460 test_path_b.value())) | 462 test_path_b.value())) |
461 .Times(1); | 463 .Times(1); |
462 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); | 464 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); |
463 | 465 |
464 // Detach all devices. | 466 // Detach all devices. |
465 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0); | 467 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(0); |
466 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId3)).Times(1); | 468 EXPECT_CALL(observer(), OnMediaDeviceDetached(GetDCIMDeviceId(kDeviceId3))) |
| 469 .Times(1); |
467 WriteEmptyMtabAndRunLoop(); | 470 WriteEmptyMtabAndRunLoop(); |
468 } | 471 } |
469 | 472 |
470 } // namespace | 473 } // namespace |
471 | 474 |
472 } // namespace chrome | 475 } // namespace chrome |
OLD | NEW |