| 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 8d592b6a2a778360974b525c78e39ea1ae4f25d8..b8aef4826754d800d09f386524bd861f6aa6d843 100644
|
| --- a/chrome/browser/chromeos/file_manager/volume_manager.cc
|
| +++ b/chrome/browser/chromeos/file_manager/volume_manager.cc
|
| @@ -168,10 +168,10 @@ Volume::~Volume() {
|
| }
|
|
|
| // static
|
| -Volume* Volume::CreateForDrive(Profile* profile) {
|
| +std::unique_ptr<Volume> Volume::CreateForDrive(Profile* profile) {
|
| const base::FilePath& drive_path =
|
| drive::util::GetDriveMountPointPath(profile);
|
| - Volume* const volume = new Volume;
|
| + std::unique_ptr<Volume> volume(new Volume());
|
| volume->type_ = VOLUME_TYPE_GOOGLE_DRIVE;
|
| volume->device_type_ = chromeos::DEVICE_TYPE_UNKNOWN;
|
| volume->source_path_ = drive_path;
|
| @@ -184,8 +184,9 @@ Volume* Volume::CreateForDrive(Profile* profile) {
|
| }
|
|
|
| // static
|
| -Volume* Volume::CreateForDownloads(const base::FilePath& downloads_path) {
|
| - Volume* const volume = new Volume;
|
| +std::unique_ptr<Volume> Volume::CreateForDownloads(
|
| + const base::FilePath& downloads_path) {
|
| + std::unique_ptr<Volume> volume(new Volume());
|
| volume->type_ = VOLUME_TYPE_DOWNLOADS_DIRECTORY;
|
| volume->device_type_ = chromeos::DEVICE_TYPE_UNKNOWN;
|
| // Keep source_path empty.
|
| @@ -198,10 +199,10 @@ Volume* Volume::CreateForDownloads(const base::FilePath& downloads_path) {
|
| }
|
|
|
| // static
|
| -Volume* Volume::CreateForRemovable(
|
| +std::unique_ptr<Volume> Volume::CreateForRemovable(
|
| const chromeos::disks::DiskMountManager::MountPointInfo& mount_point,
|
| const chromeos::disks::DiskMountManager::Disk* disk) {
|
| - Volume* const volume = new Volume;
|
| + std::unique_ptr<Volume> volume(new Volume());
|
| volume->type_ = MountTypeToVolumeType(mount_point.mount_type);
|
| volume->source_path_ = base::FilePath(mount_point.source_path);
|
| volume->source_ = mount_point.mount_type == chromeos::MOUNT_TYPE_ARCHIVE
|
| @@ -228,11 +229,11 @@ Volume* Volume::CreateForRemovable(
|
| }
|
|
|
| // static
|
| -Volume* Volume::CreateForProvidedFileSystem(
|
| +std::unique_ptr<Volume> Volume::CreateForProvidedFileSystem(
|
| const chromeos::file_system_provider::ProvidedFileSystemInfo&
|
| file_system_info,
|
| MountContext mount_context) {
|
| - Volume* const volume = new Volume;
|
| + std::unique_ptr<Volume> volume(new Volume());
|
| volume->file_system_id_ = file_system_info.file_system_id();
|
| volume->extension_id_ = file_system_info.extension_id();
|
| switch (file_system_info.source()) {
|
| @@ -260,10 +261,10 @@ Volume* Volume::CreateForProvidedFileSystem(
|
| }
|
|
|
| // static
|
| -Volume* Volume::CreateForMTP(const base::FilePath& mount_path,
|
| - const std::string& label,
|
| - bool read_only) {
|
| - Volume* const volume = new Volume;
|
| +std::unique_ptr<Volume> Volume::CreateForMTP(const base::FilePath& mount_path,
|
| + const std::string& label,
|
| + bool read_only) {
|
| + std::unique_ptr<Volume> volume(new Volume());
|
| volume->type_ = VOLUME_TYPE_MTP;
|
| volume->mount_path_ = mount_path;
|
| volume->mount_condition_ = chromeos::disks::MOUNT_CONDITION_NONE;
|
| @@ -278,8 +279,9 @@ Volume* Volume::CreateForMTP(const base::FilePath& mount_path,
|
| }
|
|
|
| // static
|
| -Volume* Volume::CreateForMediaView(const std::string& root_document_id) {
|
| - Volume* const volume = new Volume;
|
| +std::unique_ptr<Volume> Volume::CreateForMediaView(
|
| + const std::string& root_document_id) {
|
| + std::unique_ptr<Volume> volume(new Volume());
|
| volume->type_ = VOLUME_TYPE_MEDIA_VIEW;
|
| volume->device_type_ = chromeos::DEVICE_TYPE_UNKNOWN;
|
| volume->source_ = SOURCE_SYSTEM;
|
| @@ -294,11 +296,12 @@ Volume* Volume::CreateForMediaView(const std::string& root_document_id) {
|
| }
|
|
|
| // static
|
| -Volume* Volume::CreateForTesting(const base::FilePath& path,
|
| - VolumeType volume_type,
|
| - chromeos::DeviceType device_type,
|
| - bool read_only) {
|
| - Volume* const volume = new Volume;
|
| +std::unique_ptr<Volume> Volume::CreateForTesting(
|
| + const base::FilePath& path,
|
| + VolumeType volume_type,
|
| + chromeos::DeviceType device_type,
|
| + bool read_only) {
|
| + std::unique_ptr<Volume> volume(new Volume());
|
| volume->type_ = volume_type;
|
| volume->device_type_ = device_type;
|
| // Keep source_path empty.
|
| @@ -311,9 +314,10 @@ Volume* Volume::CreateForTesting(const base::FilePath& path,
|
| }
|
|
|
| // static
|
| -Volume* Volume::CreateForTesting(const base::FilePath& device_path,
|
| - const base::FilePath& mount_path) {
|
| - Volume* const volume = new Volume;
|
| +std::unique_ptr<Volume> Volume::CreateForTesting(
|
| + const base::FilePath& device_path,
|
| + const base::FilePath& mount_path) {
|
| + std::unique_ptr<Volume> volume(new Volume());
|
| volume->system_path_prefix_ = device_path;
|
| volume->mount_path_ = mount_path;
|
| return volume;
|
| @@ -355,14 +359,14 @@ void VolumeManager::Initialize() {
|
| DCHECK(success);
|
|
|
| DoMountEvent(chromeos::MOUNT_ERROR_NONE,
|
| - make_linked_ptr(Volume::CreateForDownloads(downloads)));
|
| + Volume::CreateForDownloads(downloads));
|
|
|
| // Subscribe to DriveIntegrationService.
|
| if (drive_integration_service_) {
|
| drive_integration_service_->AddObserver(this);
|
| if (drive_integration_service_->IsMounted()) {
|
| DoMountEvent(chromeos::MOUNT_ERROR_NONE,
|
| - make_linked_ptr(Volume::CreateForDrive(profile_)));
|
| + Volume::CreateForDrive(profile_));
|
| }
|
| }
|
|
|
| @@ -382,9 +386,9 @@ void VolumeManager::Initialize() {
|
| std::vector<ProvidedFileSystemInfo> file_system_info_list =
|
| file_system_provider_service_->GetProvidedFileSystemInfoList();
|
| for (size_t i = 0; i < file_system_info_list.size(); ++i) {
|
| - linked_ptr<Volume> volume(Volume::CreateForProvidedFileSystem(
|
| - file_system_info_list[i], MOUNT_CONTEXT_AUTO));
|
| - DoMountEvent(chromeos::MOUNT_ERROR_NONE, volume);
|
| + std::unique_ptr<Volume> volume = Volume::CreateForProvidedFileSystem(
|
| + file_system_info_list[i], MOUNT_CONTEXT_AUTO);
|
| + DoMountEvent(chromeos::MOUNT_ERROR_NONE, std::move(volume));
|
| }
|
| }
|
|
|
| @@ -457,6 +461,7 @@ std::vector<base::WeakPtr<Volume>> VolumeManager::GetVolumeList() {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
|
|
| std::vector<base::WeakPtr<Volume>> result;
|
| + result.reserve(mounted_volumes_.size());
|
| for (const auto& pair : mounted_volumes_) {
|
| result.push_back(pair.second->AsWeakPtr());
|
| }
|
| @@ -480,13 +485,13 @@ bool VolumeManager::RegisterDownloadsDirectoryForTesting(
|
| base::FilePath old_path;
|
| if (FindDownloadsMountPointPath(profile_, &old_path)) {
|
| DoUnmountEvent(chromeos::MOUNT_ERROR_NONE,
|
| - make_linked_ptr(Volume::CreateForDownloads(old_path)));
|
| + *Volume::CreateForDownloads(old_path));
|
| }
|
|
|
| bool success = RegisterDownloadsMountPoint(profile_, path);
|
| DoMountEvent(
|
| success ? chromeos::MOUNT_ERROR_NONE : chromeos::MOUNT_ERROR_INVALID_PATH,
|
| - make_linked_ptr(Volume::CreateForDownloads(path)));
|
| + Volume::CreateForDownloads(path));
|
| return success;
|
| }
|
|
|
| @@ -495,14 +500,14 @@ void VolumeManager::AddVolumeForTesting(const base::FilePath& path,
|
| chromeos::DeviceType device_type,
|
| bool read_only) {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
| - DoMountEvent(chromeos::MOUNT_ERROR_NONE,
|
| - make_linked_ptr(Volume::CreateForTesting(
|
| - path, volume_type, device_type, read_only)));
|
| + DoMountEvent(
|
| + chromeos::MOUNT_ERROR_NONE,
|
| + Volume::CreateForTesting(path, volume_type, device_type, read_only));
|
| }
|
|
|
| -void VolumeManager::AddVolumeForTesting(const linked_ptr<Volume>& volume) {
|
| +void VolumeManager::AddVolumeForTesting(std::unique_ptr<Volume> volume) {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
| - DoMountEvent(chromeos::MOUNT_ERROR_NONE, volume);
|
| + DoMountEvent(chromeos::MOUNT_ERROR_NONE, std::move(volume));
|
| }
|
|
|
| void VolumeManager::OnFileSystemMounted() {
|
| @@ -511,15 +516,13 @@ void VolumeManager::OnFileSystemMounted() {
|
| // Raise mount event.
|
| // We can pass chromeos::MOUNT_ERROR_NONE even when authentication is failed
|
| // or network is unreachable. These two errors will be handled later.
|
| - linked_ptr<Volume> volume(Volume::CreateForDrive(profile_));
|
| - DoMountEvent(chromeos::MOUNT_ERROR_NONE, volume);
|
| + DoMountEvent(chromeos::MOUNT_ERROR_NONE, Volume::CreateForDrive(profile_));
|
| }
|
|
|
| void VolumeManager::OnFileSystemBeingUnmounted() {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
|
|
| - linked_ptr<Volume> volume(Volume::CreateForDrive(profile_));
|
| - DoUnmountEvent(chromeos::MOUNT_ERROR_NONE, volume);
|
| + DoUnmountEvent(chromeos::MOUNT_ERROR_NONE, *Volume::CreateForDrive(profile_));
|
| }
|
|
|
| void VolumeManager::OnDiskEvent(
|
| @@ -629,14 +632,14 @@ void VolumeManager::OnMountEvent(
|
| // Notify a mounting/unmounting event to observers.
|
| const chromeos::disks::DiskMountManager::Disk* const disk =
|
| disk_mount_manager_->FindDiskBySourcePath(mount_info.source_path);
|
| - linked_ptr<Volume> volume(Volume::CreateForRemovable(mount_info, disk));
|
| + std::unique_ptr<Volume> volume = Volume::CreateForRemovable(mount_info, disk);
|
| switch (event) {
|
| case chromeos::disks::DiskMountManager::MOUNTING: {
|
| - DoMountEvent(error_code, volume);
|
| + DoMountEvent(error_code, std::move(volume));
|
| return;
|
| }
|
| case chromeos::disks::DiskMountManager::UNMOUNTING:
|
| - DoUnmountEvent(error_code, volume);
|
| + DoUnmountEvent(error_code, *volume);
|
| return;
|
| }
|
| NOTREACHED();
|
| @@ -694,8 +697,8 @@ void VolumeManager::OnProvidedFileSystemMount(
|
| break;
|
| }
|
|
|
| - linked_ptr<Volume> volume(
|
| - Volume::CreateForProvidedFileSystem(file_system_info, volume_context));
|
| + std::unique_ptr<Volume> volume =
|
| + Volume::CreateForProvidedFileSystem(file_system_info, volume_context);
|
|
|
| // TODO(mtomasz): Introduce own type, and avoid using MountError internally,
|
| // since it is related to cros disks only.
|
| @@ -712,7 +715,7 @@ void VolumeManager::OnProvidedFileSystemMount(
|
| break;
|
| }
|
|
|
| - DoMountEvent(mount_error, volume);
|
| + DoMountEvent(mount_error, std::move(volume));
|
| }
|
|
|
| void VolumeManager::OnProvidedFileSystemUnmount(
|
| @@ -724,9 +727,9 @@ void VolumeManager::OnProvidedFileSystemUnmount(
|
| const chromeos::MountError mount_error = error == base::File::FILE_OK
|
| ? chromeos::MOUNT_ERROR_NONE
|
| : chromeos::MOUNT_ERROR_UNKNOWN;
|
| - linked_ptr<Volume> volume(Volume::CreateForProvidedFileSystem(
|
| - file_system_info, MOUNT_CONTEXT_UNKNOWN));
|
| - DoUnmountEvent(mount_error, volume);
|
| + std::unique_ptr<Volume> volume = Volume::CreateForProvidedFileSystem(
|
| + file_system_info, MOUNT_CONTEXT_UNKNOWN);
|
| + DoUnmountEvent(mount_error, *volume);
|
| }
|
|
|
| void VolumeManager::OnExternalStorageDisabledChangedUnmountCallback(
|
| @@ -753,24 +756,18 @@ void VolumeManager::OnArcPlayStoreEnabledChanged(bool enabled) {
|
|
|
| if (enabled) {
|
| DoMountEvent(chromeos::MOUNT_ERROR_NONE,
|
| - linked_ptr<Volume>(
|
| - Volume::CreateForMediaView(arc::kImagesRootDocumentId)));
|
| + Volume::CreateForMediaView(arc::kImagesRootDocumentId));
|
| DoMountEvent(chromeos::MOUNT_ERROR_NONE,
|
| - linked_ptr<Volume>(
|
| - Volume::CreateForMediaView(arc::kVideosRootDocumentId)));
|
| + Volume::CreateForMediaView(arc::kVideosRootDocumentId));
|
| DoMountEvent(chromeos::MOUNT_ERROR_NONE,
|
| - linked_ptr<Volume>(
|
| - Volume::CreateForMediaView(arc::kAudioRootDocumentId)));
|
| + Volume::CreateForMediaView(arc::kAudioRootDocumentId));
|
| } else {
|
| DoUnmountEvent(chromeos::MOUNT_ERROR_NONE,
|
| - linked_ptr<Volume>(
|
| - Volume::CreateForMediaView(arc::kImagesRootDocumentId)));
|
| + *Volume::CreateForMediaView(arc::kImagesRootDocumentId));
|
| DoUnmountEvent(chromeos::MOUNT_ERROR_NONE,
|
| - linked_ptr<Volume>(
|
| - Volume::CreateForMediaView(arc::kVideosRootDocumentId)));
|
| + *Volume::CreateForMediaView(arc::kVideosRootDocumentId));
|
| DoUnmountEvent(chromeos::MOUNT_ERROR_NONE,
|
| - linked_ptr<Volume>(
|
| - Volume::CreateForMediaView(arc::kAudioRootDocumentId)));
|
| + *Volume::CreateForMediaView(arc::kAudioRootDocumentId));
|
| }
|
|
|
| arc_volumes_mounted_ = enabled;
|
| @@ -858,8 +855,8 @@ void VolumeManager::OnRemovableStorageAttached(
|
| base::Unretained(MTPDeviceMapService::GetInstance()),
|
| info.location(), fsid, read_only));
|
|
|
| - linked_ptr<Volume> volume(Volume::CreateForMTP(path, label, read_only));
|
| - DoMountEvent(chromeos::MOUNT_ERROR_NONE, volume);
|
| + std::unique_ptr<Volume> volume = Volume::CreateForMTP(path, label, read_only);
|
| + DoMountEvent(chromeos::MOUNT_ERROR_NONE, std::move(volume));
|
| }
|
|
|
| void VolumeManager::OnRemovableStorageDetached(
|
| @@ -867,9 +864,9 @@ void VolumeManager::OnRemovableStorageDetached(
|
| if (!storage_monitor::StorageInfo::IsMTPDevice(info.device_id()))
|
| return;
|
|
|
| - for (const auto mounted_volume : mounted_volumes_) {
|
| + for (const auto& mounted_volume : mounted_volumes_) {
|
| if (mounted_volume.second->source_path().value() == info.location()) {
|
| - DoUnmountEvent(chromeos::MOUNT_ERROR_NONE, mounted_volume.second);
|
| + DoUnmountEvent(chromeos::MOUNT_ERROR_NONE, *mounted_volume.second.get());
|
|
|
| const std::string fsid = GetMountPointNameForMediaStorage(info);
|
| storage::ExternalMountPoints::GetSystemInstance()->RevokeFileSystem(fsid);
|
| @@ -889,7 +886,7 @@ void VolumeManager::OnDiskMountManagerRefreshed(bool success) {
|
| return;
|
| }
|
|
|
| - std::vector<linked_ptr<Volume>> archives;
|
| + std::vector<std::unique_ptr<Volume>> archives;
|
|
|
| const chromeos::disks::DiskMountManager::MountPointMap& mount_points =
|
| disk_mount_manager_->mount_points();
|
| @@ -899,14 +896,14 @@ void VolumeManager::OnDiskMountManagerRefreshed(bool success) {
|
| ++it) {
|
| if (it->second.mount_type == chromeos::MOUNT_TYPE_ARCHIVE) {
|
| // Archives are mounted after other types of volume. See below.
|
| - archives.push_back(
|
| - make_linked_ptr(Volume::CreateForRemovable(it->second, NULL)));
|
| + archives.push_back(Volume::CreateForRemovable(it->second, nullptr));
|
| continue;
|
| }
|
| - DoMountEvent(chromeos::MOUNT_ERROR_NONE,
|
| - make_linked_ptr(Volume::CreateForRemovable(
|
| - it->second, disk_mount_manager_->FindDiskBySourcePath(
|
| - it->second.source_path))));
|
| + DoMountEvent(
|
| + chromeos::MOUNT_ERROR_NONE,
|
| + Volume::CreateForRemovable(
|
| + it->second,
|
| + disk_mount_manager_->FindDiskBySourcePath(it->second.source_path)));
|
| }
|
|
|
| // We mount archives only if they are opened from currently mounted volumes.
|
| @@ -916,24 +913,26 @@ void VolumeManager::OnDiskMountManagerRefreshed(bool success) {
|
| if (done[i])
|
| continue;
|
|
|
| - std::vector<linked_ptr<Volume>> chain;
|
| + std::vector<std::unique_ptr<Volume>> chain;
|
| + // done[x] = true means archives[x] is null and that volume is in |chain|.
|
| done[i] = true;
|
| - chain.push_back(archives[i]);
|
| + chain.push_back(std::move(archives[i]));
|
|
|
| // If archives[i]'s source_path is in another archive, mount it first.
|
| for (size_t parent = i + 1; parent < archives.size(); ++parent) {
|
| if (!done[parent] &&
|
| archives[parent]->mount_path().IsParent(
|
| chain.back()->source_path())) {
|
| + // done[parent] started false, so archives[parent] is non-null.
|
| done[parent] = true;
|
| - chain.push_back(archives[parent]);
|
| + chain.push_back(std::move(archives[parent]));
|
| parent = i + 1; // Search archives[parent]'s parent from the beginning.
|
| }
|
| }
|
|
|
| // Mount from the tail of chain.
|
| for (size_t i = chain.size(); i > 0; --i) {
|
| - DoMountEvent(chromeos::MOUNT_ERROR_NONE, chain[i - 1]);
|
| + DoMountEvent(chromeos::MOUNT_ERROR_NONE, std::move(chain[i - 1]));
|
| }
|
| }
|
| }
|
| @@ -947,7 +946,7 @@ void VolumeManager::OnStorageMonitorInitialized() {
|
| }
|
|
|
| void VolumeManager::DoMountEvent(chromeos::MountError error_code,
|
| - const linked_ptr<Volume>& volume) {
|
| + std::unique_ptr<Volume> volume) {
|
| // Archive files are mounted globally in system. We however don't want to show
|
| // archives from profile-specific folders (Drive/Downloads) of other users in
|
| // multi-profile session. To this end, we filter out archives not on the
|
| @@ -972,25 +971,27 @@ void VolumeManager::DoMountEvent(chromeos::MountError error_code,
|
| return;
|
| }
|
|
|
| + Volume* raw_volume = volume.get();
|
| if (error_code == chromeos::MOUNT_ERROR_NONE || volume->mount_condition()) {
|
| - mounted_volumes_[volume->volume_id()] = volume;
|
| - UMA_HISTOGRAM_ENUMERATION("FileBrowser.VolumeType", volume->type(),
|
| + mounted_volumes_[volume->volume_id()] = std::move(volume);
|
| + UMA_HISTOGRAM_ENUMERATION("FileBrowser.VolumeType", raw_volume->type(),
|
| NUM_VOLUME_TYPE);
|
| }
|
|
|
| for (auto& observer : observers_)
|
| - observer.OnVolumeMounted(error_code, *volume);
|
| + observer.OnVolumeMounted(error_code, *raw_volume);
|
| }
|
|
|
| void VolumeManager::DoUnmountEvent(chromeos::MountError error_code,
|
| - const linked_ptr<Volume>& volume) {
|
| - if (mounted_volumes_.find(volume->volume_id()) == mounted_volumes_.end())
|
| + const Volume& volume) {
|
| + auto iter = mounted_volumes_.find(volume.volume_id());
|
| + if (iter == mounted_volumes_.end())
|
| return;
|
| if (error_code == chromeos::MOUNT_ERROR_NONE)
|
| - mounted_volumes_.erase(volume->volume_id());
|
| + mounted_volumes_.erase(iter);
|
|
|
| for (auto& observer : observers_)
|
| - observer.OnVolumeUnmounted(error_code, *volume.get());
|
| + observer.OnVolumeUnmounted(error_code, volume);
|
| }
|
|
|
| } // namespace file_manager
|
|
|