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

Side by Side Diff: chrome/browser/media_gallery/media_device_notifications_linux_unittest.cc

Issue 10829384: SystemMonitor: Pull device type into the device id (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comment Created 8 years, 4 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 // 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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698