| 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..0459c577228c3802578cc35287bf8a29baa13abd 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);
 | 
|  }
 | 
|  
 | 
| @@ -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
 | 
| 
 |