• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "components/storage_monitor/test_storage_monitor.h"
6 
7 #include "base/run_loop.h"
8 #include "base/synchronization/waitable_event.h"
9 #include "components/storage_monitor/storage_info.h"
10 
11 #if defined(OS_LINUX)
12 #include "components/storage_monitor/test_media_transfer_protocol_manager_linux.h"
13 #include "device/media_transfer_protocol/media_transfer_protocol_manager.h"
14 #endif
15 
16 namespace storage_monitor {
17 
TestStorageMonitor()18 TestStorageMonitor::TestStorageMonitor()
19     : StorageMonitor(),
20       init_called_(false) {
21 #if defined(OS_LINUX)
22   media_transfer_protocol_manager_.reset(
23       new TestMediaTransferProtocolManagerLinux());
24 #endif
25 }
26 
~TestStorageMonitor()27 TestStorageMonitor::~TestStorageMonitor() {}
28 
29 // static
CreateAndInstall()30 TestStorageMonitor* TestStorageMonitor::CreateAndInstall() {
31   TestStorageMonitor* monitor = new TestStorageMonitor();
32   scoped_ptr<StorageMonitor> pass_monitor(monitor);
33   monitor->Init();
34   monitor->MarkInitialized();
35 
36   if (StorageMonitor::GetInstance() == NULL) {
37     StorageMonitor::SetStorageMonitorForTesting(pass_monitor.Pass());
38     return monitor;
39   }
40 
41   return NULL;
42 }
43 
44 // static
CreateForBrowserTests()45 TestStorageMonitor* TestStorageMonitor::CreateForBrowserTests() {
46   TestStorageMonitor* monitor = new TestStorageMonitor();
47   monitor->Init();
48   monitor->MarkInitialized();
49 
50   scoped_ptr<StorageMonitor> pass_monitor(monitor);
51   StorageMonitor::SetStorageMonitorForTesting(pass_monitor.Pass());
52 
53   return monitor;
54 }
55 
56 // static
SyncInitialize()57 void TestStorageMonitor::SyncInitialize() {
58   StorageMonitor* monitor = StorageMonitor::GetInstance();
59   if (monitor->IsInitialized())
60     return;
61 
62   base::WaitableEvent event(true, false);
63   monitor->EnsureInitialized(base::Bind(&base::WaitableEvent::Signal,
64                              base::Unretained(&event)));
65   while (!event.IsSignaled()) {
66     base::RunLoop().RunUntilIdle();
67   }
68   DCHECK(monitor->IsInitialized());
69 }
70 
Init()71 void TestStorageMonitor::Init() {
72   init_called_ = true;
73 }
74 
MarkInitialized()75 void TestStorageMonitor::MarkInitialized() {
76   StorageMonitor::MarkInitialized();
77 }
78 
GetStorageInfoForPath(const base::FilePath & path,StorageInfo * device_info) const79 bool TestStorageMonitor::GetStorageInfoForPath(
80     const base::FilePath& path,
81     StorageInfo* device_info) const {
82   DCHECK(device_info);
83 
84   if (!path.IsAbsolute())
85     return false;
86 
87   std::string device_id = StorageInfo::MakeDeviceId(
88       StorageInfo::FIXED_MASS_STORAGE, path.AsUTF8Unsafe());
89   *device_info =
90       StorageInfo(device_id, path.value(), base::string16(), base::string16(),
91                   base::string16(), 0);
92   return true;
93 }
94 
95 #if defined(OS_WIN)
GetMTPStorageInfoFromDeviceId(const std::string & storage_device_id,base::string16 * device_location,base::string16 * storage_object_id) const96 bool TestStorageMonitor::GetMTPStorageInfoFromDeviceId(
97     const std::string& storage_device_id,
98     base::string16* device_location,
99     base::string16* storage_object_id) const {
100   return false;
101 }
102 #endif
103 
104 #if defined(OS_LINUX)
105 device::MediaTransferProtocolManager*
media_transfer_protocol_manager()106 TestStorageMonitor::media_transfer_protocol_manager() {
107   return media_transfer_protocol_manager_.get();
108 }
109 #endif
110 
receiver() const111 StorageMonitor::Receiver* TestStorageMonitor::receiver() const {
112   return StorageMonitor::receiver();
113 }
114 
EjectDevice(const std::string & device_id,base::Callback<void (EjectStatus)> callback)115 void TestStorageMonitor::EjectDevice(
116     const std::string& device_id,
117     base::Callback<void(EjectStatus)> callback) {
118   ejected_device_ = device_id;
119   callback.Run(EJECT_OK);
120 }
121 
122 }  // namespace storage_monitor
123