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

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

Powered by Google App Engine
This is Rietveld 408576698