| 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 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 } | 338 } |
| 339 | 339 |
| 340 void StorageMonitorLinux::EjectDevice( | 340 void StorageMonitorLinux::EjectDevice( |
| 341 const std::string& device_id, | 341 const std::string& device_id, |
| 342 base::Callback<void(EjectStatus)> callback) { | 342 base::Callback<void(EjectStatus)> callback) { |
| 343 // Find the mount point for the given device ID. | 343 // Find the mount point for the given device ID. |
| 344 base::FilePath path; | 344 base::FilePath path; |
| 345 base::FilePath device; | 345 base::FilePath device; |
| 346 for (MountMap::iterator mount_info = mount_info_map_.begin(); | 346 for (MountMap::iterator mount_info = mount_info_map_.begin(); |
| 347 mount_info != mount_info_map_.end(); ++mount_info) { | 347 mount_info != mount_info_map_.end(); ++mount_info) { |
| 348 if (mount_info->second.storage_info.device_id == device_id) { | 348 if (mount_info->second.storage_info.device_id() == device_id) { |
| 349 path = mount_info->first; | 349 path = mount_info->first; |
| 350 device = mount_info->second.mount_device; | 350 device = mount_info->second.mount_device; |
| 351 mount_info_map_.erase(mount_info); | 351 mount_info_map_.erase(mount_info); |
| 352 break; | 352 break; |
| 353 } | 353 } |
| 354 } | 354 } |
| 355 | 355 |
| 356 if (path.empty()) { | 356 if (path.empty()) { |
| 357 callback.Run(EJECT_NO_SUCH_DEVICE); | 357 callback.Run(EJECT_NO_SUCH_DEVICE); |
| 358 return; | 358 return; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 385 MountPointDeviceMap::const_iterator new_iter = new_mtab.find(mount_point); | 385 MountPointDeviceMap::const_iterator new_iter = new_mtab.find(mount_point); |
| 386 // |mount_point| not in |new_mtab| or |mount_device| is no longer mounted at | 386 // |mount_point| not in |new_mtab| or |mount_device| is no longer mounted at |
| 387 // |mount_point|. | 387 // |mount_point|. |
| 388 if (new_iter == new_mtab.end() || (new_iter->second != mount_device)) { | 388 if (new_iter == new_mtab.end() || (new_iter->second != mount_device)) { |
| 389 MountPriorityMap::iterator priority = | 389 MountPriorityMap::iterator priority = |
| 390 mount_priority_map_.find(mount_device); | 390 mount_priority_map_.find(mount_device); |
| 391 DCHECK(priority != mount_priority_map_.end()); | 391 DCHECK(priority != mount_priority_map_.end()); |
| 392 ReferencedMountPoint::const_iterator has_priority = | 392 ReferencedMountPoint::const_iterator has_priority = |
| 393 priority->second.find(mount_point); | 393 priority->second.find(mount_point); |
| 394 if (StorageInfo::IsRemovableDevice( | 394 if (StorageInfo::IsRemovableDevice( |
| 395 old_iter->second.storage_info.device_id)) { | 395 old_iter->second.storage_info.device_id())) { |
| 396 DCHECK(has_priority != priority->second.end()); | 396 DCHECK(has_priority != priority->second.end()); |
| 397 if (has_priority->second) { | 397 if (has_priority->second) { |
| 398 receiver()->ProcessDetach(old_iter->second.storage_info.device_id); | 398 receiver()->ProcessDetach(old_iter->second.storage_info.device_id()); |
| 399 } | 399 } |
| 400 if (priority->second.size() > 1) | 400 if (priority->second.size() > 1) |
| 401 multiple_mounted_devices_needing_reattachment.push_back(mount_device); | 401 multiple_mounted_devices_needing_reattachment.push_back(mount_device); |
| 402 } | 402 } |
| 403 priority->second.erase(mount_point); | 403 priority->second.erase(mount_point); |
| 404 if (priority->second.empty()) | 404 if (priority->second.empty()) |
| 405 mount_priority_map_.erase(mount_device); | 405 mount_priority_map_.erase(mount_device); |
| 406 mount_points_to_erase.push_back(mount_point); | 406 mount_points_to_erase.push_back(mount_point); |
| 407 } | 407 } |
| 408 } | 408 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 424 multiple_mounted_devices_needing_reattachment.begin(); | 424 multiple_mounted_devices_needing_reattachment.begin(); |
| 425 it != multiple_mounted_devices_needing_reattachment.end(); | 425 it != multiple_mounted_devices_needing_reattachment.end(); |
| 426 ++it) { | 426 ++it) { |
| 427 ReferencedMountPoint::iterator first_mount_point_info = | 427 ReferencedMountPoint::iterator first_mount_point_info = |
| 428 mount_priority_map_.find(*it)->second.begin(); | 428 mount_priority_map_.find(*it)->second.begin(); |
| 429 const base::FilePath& mount_point = first_mount_point_info->first; | 429 const base::FilePath& mount_point = first_mount_point_info->first; |
| 430 first_mount_point_info->second = true; | 430 first_mount_point_info->second = true; |
| 431 | 431 |
| 432 const StorageInfo& mount_info = | 432 const StorageInfo& mount_info = |
| 433 mount_info_map_.find(mount_point)->second.storage_info; | 433 mount_info_map_.find(mount_point)->second.storage_info; |
| 434 DCHECK(StorageInfo::IsRemovableDevice(mount_info.device_id)); | 434 DCHECK(StorageInfo::IsRemovableDevice(mount_info.device_id())); |
| 435 receiver()->ProcessAttach(mount_info); | 435 receiver()->ProcessAttach(mount_info); |
| 436 } | 436 } |
| 437 | 437 |
| 438 // Check new mtab entries against existing ones. | 438 // Check new mtab entries against existing ones. |
| 439 for (MountPointDeviceMap::const_iterator new_iter = new_mtab.begin(); | 439 for (MountPointDeviceMap::const_iterator new_iter = new_mtab.begin(); |
| 440 new_iter != new_mtab.end(); ++new_iter) { | 440 new_iter != new_mtab.end(); ++new_iter) { |
| 441 const base::FilePath& mount_point = new_iter->first; | 441 const base::FilePath& mount_point = new_iter->first; |
| 442 const base::FilePath& mount_device = new_iter->second; | 442 const base::FilePath& mount_device = new_iter->second; |
| 443 MountMap::iterator old_iter = mount_info_map_.find(mount_point); | 443 MountMap::iterator old_iter = mount_info_map_.find(mount_point); |
| 444 if (old_iter == mount_info_map_.end() || | 444 if (old_iter == mount_info_map_.end() || |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 490 mount_info_map_.find(other_mount_point)->second; | 490 mount_info_map_.find(other_mount_point)->second; |
| 491 } | 491 } |
| 492 | 492 |
| 493 void StorageMonitorLinux::AddNewMount(const base::FilePath& mount_device, | 493 void StorageMonitorLinux::AddNewMount(const base::FilePath& mount_device, |
| 494 scoped_ptr<StorageInfo> storage_info) { | 494 scoped_ptr<StorageInfo> storage_info) { |
| 495 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 495 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 496 | 496 |
| 497 if (!storage_info) | 497 if (!storage_info) |
| 498 return; | 498 return; |
| 499 | 499 |
| 500 DCHECK(!storage_info->device_id.empty()); | 500 DCHECK(!storage_info->device_id().empty()); |
| 501 | 501 |
| 502 bool removable = StorageInfo::IsRemovableDevice(storage_info->device_id); | 502 bool removable = StorageInfo::IsRemovableDevice(storage_info->device_id()); |
| 503 const base::FilePath mount_point(storage_info->location); | 503 const base::FilePath mount_point(storage_info->location()); |
| 504 | 504 |
| 505 MountPointInfo mount_point_info; | 505 MountPointInfo mount_point_info; |
| 506 mount_point_info.mount_device = mount_device; | 506 mount_point_info.mount_device = mount_device; |
| 507 mount_point_info.storage_info = *storage_info; | 507 mount_point_info.storage_info = *storage_info; |
| 508 mount_info_map_[mount_point] = mount_point_info; | 508 mount_info_map_[mount_point] = mount_point_info; |
| 509 mount_priority_map_[mount_device][mount_point] = removable; | 509 mount_priority_map_[mount_device][mount_point] = removable; |
| 510 if (removable) | 510 if (removable) |
| 511 receiver()->ProcessAttach(*storage_info); | 511 receiver()->ProcessAttach(*storage_info); |
| 512 } | 512 } |
| 513 | 513 |
| 514 } // namespace chrome | 514 } // namespace chrome |
| OLD | NEW |