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 // StorageMonitorLinux implementation. | 5 // StorageMonitorLinux implementation. |
6 | 6 |
7 #include "chrome/browser/storage_monitor/storage_monitor_linux.h" | 7 #include "chrome/browser/storage_monitor/storage_monitor_linux.h" |
8 | 8 |
9 #include <mntent.h> | 9 #include <mntent.h> |
10 #include <stdio.h> | 10 #include <stdio.h> |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 StorageMonitorLinux::StorageMonitorLinux(const base::FilePath& path, | 268 StorageMonitorLinux::StorageMonitorLinux(const base::FilePath& path, |
269 GetDeviceInfoFunc get_device_info_func) | 269 GetDeviceInfoFunc get_device_info_func) |
270 : initialized_(false), | 270 : initialized_(false), |
271 mtab_path_(path), | 271 mtab_path_(path), |
272 get_device_info_func_(get_device_info_func) { | 272 get_device_info_func_(get_device_info_func) { |
273 } | 273 } |
274 | 274 |
275 StorageMonitorLinux::~StorageMonitorLinux() { | 275 StorageMonitorLinux::~StorageMonitorLinux() { |
276 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 276 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
277 | 277 |
278 if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kTestType)) { | 278 if (!IsRunningTest()) { |
279 BrowserThread::PostTask( | 279 BrowserThread::PostTask( |
280 BrowserThread::UI, FROM_HERE, | 280 BrowserThread::UI, FROM_HERE, |
281 base::Bind(&device::MediaTransferProtocolManager::Shutdown)); | 281 base::Bind(&device::MediaTransferProtocolManager::Shutdown)); |
282 } | 282 } |
283 } | 283 } |
284 | 284 |
285 void StorageMonitorLinux::Init() { | 285 void StorageMonitorLinux::Init() { |
286 DCHECK(!mtab_path_.empty()); | 286 DCHECK(!mtab_path_.empty()); |
287 | 287 |
288 // Put |kKnownFileSystems| in std::set to get O(log N) access time. | 288 // Put |kKnownFileSystems| in std::set to get O(log N) access time. |
289 for (size_t i = 0; i < arraysize(kKnownFileSystems); ++i) | 289 for (size_t i = 0; i < arraysize(kKnownFileSystems); ++i) |
290 known_file_systems_.insert(kKnownFileSystems[i]); | 290 known_file_systems_.insert(kKnownFileSystems[i]); |
291 | 291 |
292 BrowserThread::PostTask( | 292 BrowserThread::PostTask( |
293 BrowserThread::FILE, FROM_HERE, | 293 BrowserThread::FILE, FROM_HERE, |
294 base::Bind(&StorageMonitorLinux::InitOnFileThread, this)); | 294 base::Bind(&StorageMonitorLinux::InitOnFileThread, this)); |
295 | 295 |
296 if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kTestType)) { | 296 if (!IsRunningTest()) { |
297 scoped_refptr<base::MessageLoopProxy> loop_proxy; | 297 scoped_refptr<base::MessageLoopProxy> loop_proxy; |
298 loop_proxy = content::BrowserThread::GetMessageLoopProxyForThread( | 298 loop_proxy = content::BrowserThread::GetMessageLoopProxyForThread( |
299 content::BrowserThread::FILE); | 299 content::BrowserThread::FILE); |
300 device::MediaTransferProtocolManager::Initialize(loop_proxy); | 300 device::MediaTransferProtocolManager::Initialize(loop_proxy); |
301 | 301 |
302 media_transfer_protocol_device_observer_.reset( | 302 media_transfer_protocol_device_observer_.reset( |
303 new MediaTransferProtocolDeviceObserverLinux()); | 303 new MediaTransferProtocolDeviceObserverLinux()); |
304 media_transfer_protocol_device_observer_->SetNotifications(receiver()); | 304 media_transfer_protocol_device_observer_->SetNotifications(receiver()); |
305 } | 305 } |
306 } | 306 } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 return; | 339 return; |
340 } | 340 } |
341 if (error) { | 341 if (error) { |
342 LOG(ERROR) << "Error watching " << mtab_path_.value(); | 342 LOG(ERROR) << "Error watching " << mtab_path_.value(); |
343 return; | 343 return; |
344 } | 344 } |
345 | 345 |
346 UpdateMtab(); | 346 UpdateMtab(); |
347 } | 347 } |
348 | 348 |
| 349 bool StorageMonitorLinux::IsRunningTest() const { |
| 350 return CommandLine::ForCurrentProcess()->HasSwitch(switches::kTestType); |
| 351 } |
| 352 |
349 void StorageMonitorLinux::InitOnFileThread() { | 353 void StorageMonitorLinux::InitOnFileThread() { |
350 DCHECK(!initialized_); | 354 DCHECK(!initialized_); |
351 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 355 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
352 initialized_ = true; | 356 initialized_ = true; |
353 | 357 |
354 // The callback passed to Watch() has to be unretained. Otherwise | 358 // The callback passed to Watch() has to be unretained. Otherwise |
355 // StorageMonitorLinux will live longer than expected, and FilePathWatcher | 359 // StorageMonitorLinux will live longer than expected, and FilePathWatcher |
356 // will get in trouble at shutdown time. | 360 // will get in trouble at shutdown time. |
357 bool ret = file_watcher_.Watch( | 361 bool ret = file_watcher_.Watch( |
358 mtab_path_, false, | 362 mtab_path_, false, |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 if (removable) { | 490 if (removable) { |
487 string16 display_name = MediaStorageUtil::GetDisplayNameForDevice( | 491 string16 display_name = MediaStorageUtil::GetDisplayNameForDevice( |
488 partition_size_in_bytes, name); | 492 partition_size_in_bytes, name); |
489 | 493 |
490 receiver()->ProcessAttach(StorageInfo(device_id, display_name, | 494 receiver()->ProcessAttach(StorageInfo(device_id, display_name, |
491 mount_point.value())); | 495 mount_point.value())); |
492 } | 496 } |
493 } | 497 } |
494 | 498 |
495 } // namespace chrome | 499 } // namespace chrome |
OLD | NEW |