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 16namespace storage_monitor { 17 18TestStorageMonitor::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 27TestStorageMonitor::~TestStorageMonitor() {} 28 29// static 30TestStorageMonitor* 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 45TestStorageMonitor* 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 57void 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 71void TestStorageMonitor::Init() { 72 init_called_ = true; 73} 74 75void TestStorageMonitor::MarkInitialized() { 76 StorageMonitor::MarkInitialized(); 77} 78 79bool 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) 96bool 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) 105device::MediaTransferProtocolManager* 106TestStorageMonitor::media_transfer_protocol_manager() { 107 return media_transfer_protocol_manager_.get(); 108} 109#endif 110 111StorageMonitor::Receiver* TestStorageMonitor::receiver() const { 112 return StorageMonitor::receiver(); 113} 114 115void 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