Chromium Code Reviews| Index: chrome/browser/chromeos/file_manager/volume_manager.cc |
| diff --git a/chrome/browser/chromeos/file_manager/volume_manager.cc b/chrome/browser/chromeos/file_manager/volume_manager.cc |
| index b980caf302897eb35822ba1d4b16ccf90e71456a..a2feaa0a90190d37b9bc31d5b892fa63869325f1 100644 |
| --- a/chrome/browser/chromeos/file_manager/volume_manager.cc |
| +++ b/chrome/browser/chromeos/file_manager/volume_manager.cc |
| @@ -20,6 +20,7 @@ |
| #include "chrome/browser/chromeos/file_manager/path_util.h" |
| #include "chrome/browser/chromeos/file_manager/volume_manager_factory.h" |
| #include "chrome/browser/chromeos/file_manager/volume_manager_observer.h" |
| +#include "chrome/browser/chromeos/file_system_provider/provided_file_system.h" |
| #include "chrome/browser/chromeos/profiles/profile_helper.h" |
| #include "chrome/browser/local_discovery/storage/privet_filesystem_constants.h" |
| #include "chrome/browser/profiles/profile.h" |
| @@ -103,6 +104,8 @@ std::string VolumeTypeToString(VolumeType type) { |
| return "cloud_device"; |
| case VOLUME_TYPE_TESTING: |
| return "testing"; |
| + case VOLUME_TYPE_PROVIDED: |
| + return "provided"; |
| } |
| NOTREACHED(); |
| return ""; |
| @@ -199,6 +202,18 @@ VolumeInfo CreatePrivetVolumeInfo( |
| return volume_info; |
| } |
| +VolumeInfo CreateProvidedFileSystemVolumeInfo( |
| + const chromeos::file_system_provider::ProvidedFileSystem& file_system) { |
| + VolumeInfo volume_info; |
| + volume_info.type = VOLUME_TYPE_PROVIDED; |
| + volume_info.mount_path = file_system.mount_path(); |
| + volume_info.mount_condition = chromeos::disks::MOUNT_CONDITION_NONE; |
| + volume_info.is_parent = true; |
| + volume_info.is_read_only = true; |
| + volume_info.volume_id = GenerateVolumeId(volume_info); |
| + return volume_info; |
| +} |
| + |
| } // namespace |
| VolumeInfo::VolumeInfo() { |
| @@ -211,12 +226,14 @@ VolumeManager::VolumeManager( |
| Profile* profile, |
| drive::DriveIntegrationService* drive_integration_service, |
| chromeos::PowerManagerClient* power_manager_client, |
| - chromeos::disks::DiskMountManager* disk_mount_manager) |
| + chromeos::disks::DiskMountManager* disk_mount_manager, |
| + chromeos::file_system_provider::Service* file_system_provider_service) |
| : profile_(profile), |
| drive_integration_service_(drive_integration_service), |
| disk_mount_manager_(disk_mount_manager), |
| mounted_disk_monitor_( |
| - new MountedDiskMonitor(power_manager_client, disk_mount_manager)) { |
| + new MountedDiskMonitor(power_manager_client, disk_mount_manager)), |
| + file_system_provider_service_(file_system_provider_service) { |
| DCHECK(disk_mount_manager); |
| } |
| @@ -228,7 +245,7 @@ VolumeManager* VolumeManager::Get(content::BrowserContext* context) { |
| } |
| void VolumeManager::Initialize() { |
| - const bool kNotRemounting = false; |
| + static const bool kNotRemounting = false; |
|
satorux1
2014/03/26 07:55:37
don't need static. IIRC, static like this generate
mtomasz
2014/03/26 09:21:43
Done.
|
| // Path to mount user folders have changed several times. We need to migrate |
| // the old preferences on paths to the new format when needed. For the detail, |
| @@ -272,6 +289,21 @@ void VolumeManager::Initialize() { |
| // Subscribe to DiskMountManager. |
| disk_mount_manager_->AddObserver(this); |
| + // Subscribe to FileSystemProviderService and register currently mounted |
| + // volumes for the profile. |
| + if (file_system_provider_service_) { |
| + using chromeos::file_system_provider::ProvidedFileSystem; |
| + file_system_provider_service_->AddObserver(this); |
| + |
| + std::vector<ProvidedFileSystem> provided_file_systems = |
| + file_system_provider_service_->GetRegisteredFileSystems(); |
| + for (size_t i = 0; i < provided_file_systems.size(); ++i) { |
| + VolumeInfo volume_info = |
| + CreateProvidedFileSystemVolumeInfo(provided_file_systems[i]); |
| + DoMountEvent(chromeos::MOUNT_ERROR_NONE, volume_info, kNotRemounting); |
| + } |
| + } |
| + |
| std::vector<VolumeInfo> archives; |
| const chromeos::disks::DiskMountManager::MountPointMap& mount_points = |
| @@ -342,6 +374,9 @@ void VolumeManager::Shutdown() { |
| if (drive_integration_service_) |
| drive_integration_service_->RemoveObserver(this); |
| + |
| + if (file_system_provider_service_) |
| + file_system_provider_service_->RemoveObserver(this); |
| } |
| void VolumeManager::AddObserver(VolumeManagerObserver* observer) { |
| @@ -584,6 +619,18 @@ void VolumeManager::OnFormatEvent( |
| NOTREACHED(); |
| } |
| +void VolumeManager::OnProvidedFileSystemRegistered( |
| + const chromeos::file_system_provider::ProvidedFileSystem& file_system) { |
| + VolumeInfo volume_info = CreateProvidedFileSystemVolumeInfo(file_system); |
| + DoMountEvent(chromeos::MOUNT_ERROR_NONE, volume_info, false /* remounting */); |
| +} |
| + |
| +void VolumeManager::OnProvidedFileSystemUnregistered( |
| + const chromeos::file_system_provider::ProvidedFileSystem& file_system) { |
| + VolumeInfo volume_info = CreateProvidedFileSystemVolumeInfo(file_system); |
| + DoUnmountEvent(chromeos::MOUNT_ERROR_NONE, volume_info); |
| +} |
| + |
| void VolumeManager::OnExternalStorageDisabledChanged() { |
| // If the policy just got disabled we have to unmount every device currently |
| // mounted. The opposite is fine - we can let the user re-plug her device to |