| Index: ui/file_manager/file_manager/background/js/volume_manager.js
|
| diff --git a/ui/file_manager/file_manager/background/js/volume_manager.js b/ui/file_manager/file_manager/background/js/volume_manager.js
|
| index c824154895d882e48196ddc2036a07d9d780fe4a..ac7a45053a3dcb359cdf1c1363230ad0690ac9d8 100644
|
| --- a/ui/file_manager/file_manager/background/js/volume_manager.js
|
| +++ b/ui/file_manager/file_manager/background/js/volume_manager.js
|
| @@ -26,6 +26,7 @@
|
| * volume. Empty for native volumes.
|
| * @param {boolean} hasMedia When true the volume has been identified
|
| * as containing media such as photos or videos.
|
| + * @param {boolean} configurable When true, then the volume can be configured.
|
| */
|
| function VolumeInfo(
|
| volumeType,
|
| @@ -38,7 +39,8 @@ function VolumeInfo(
|
| profile,
|
| label,
|
| extensionId,
|
| - hasMedia) {
|
| + hasMedia,
|
| + configurable) {
|
| this.volumeType_ = volumeType;
|
| this.volumeId_ = volumeId;
|
| this.fileSystem_ = fileSystem;
|
| @@ -80,6 +82,7 @@ function VolumeInfo(
|
| this.profile_ = Object.freeze(profile);
|
| this.extensionId_ = extensionId;
|
| this.hasMedia_ = hasMedia;
|
| + this.configurable_ = configurable;
|
| }
|
|
|
| VolumeInfo.prototype = /** @struct */ {
|
| @@ -161,6 +164,12 @@ VolumeInfo.prototype = /** @struct */ {
|
| */
|
| get hasMedia() {
|
| return this.hasMedia_;
|
| + },
|
| + /**
|
| + * @return {boolean} True if the volume is configurable.
|
| + */
|
| + get configurable() {
|
| + return this.configurable_;
|
| }
|
| };
|
|
|
| @@ -245,21 +254,45 @@ volumeManagerUtil.createVolumeInfo = function(volumeMetadata) {
|
| }
|
|
|
| console.debug('Requesting file system.');
|
| + var configurable = false;
|
| +
|
| return new Promise(
|
| function(resolve, reject) {
|
| - chrome.fileSystem.requestFileSystem(
|
| - {
|
| - volumeId: volumeMetadata.volumeId,
|
| - writable: !volumeMetadata.isReadOnly
|
| - },
|
| - function(isolatedFileSystem) {
|
| - if (chrome.runtime.lastError)
|
| + if (volumeMetadata.volumeType !==
|
| + VolumeManagerCommon.VolumeType.PROVIDED) {
|
| + resolve();
|
| + }
|
| +
|
| + chrome.fileManagerPrivate.getProvidingExtensions(
|
| + function(extensions) {
|
| + if (chrome.runtime.lastError) {
|
| reject(chrome.runtime.lastError.message);
|
| - else
|
| - resolve(isolatedFileSystem);
|
| + return;
|
| + }
|
| + configurable = extensions.some(function(extension) {
|
| + return extension.extensionId === volumeMetadata.extensionId &&
|
| + extension.configurable;
|
| + });
|
| + resolve();
|
| });
|
| })
|
| .then(
|
| + function() {
|
| + return new Promise(function(resolve, reject) {
|
| + chrome.fileSystem.requestFileSystem(
|
| + {
|
| + volumeId: volumeMetadata.volumeId,
|
| + writable: !volumeMetadata.isReadOnly
|
| + },
|
| + function(isolatedFileSystem) {
|
| + if (chrome.runtime.lastError)
|
| + reject(chrome.runtime.lastError.message);
|
| + else
|
| + resolve(isolatedFileSystem);
|
| + });
|
| + });
|
| + })
|
| + .then(
|
| /**
|
| * @param {!FileSystem} isolatedFileSystem
|
| */
|
| @@ -313,7 +346,8 @@ volumeManagerUtil.createVolumeInfo = function(volumeMetadata) {
|
| volumeMetadata.profile,
|
| localizedLabel,
|
| volumeMetadata.extensionId,
|
| - volumeMetadata.hasMedia);
|
| + volumeMetadata.hasMedia,
|
| + configurable);
|
| })
|
| .catch(
|
| /**
|
| @@ -335,7 +369,8 @@ volumeManagerUtil.createVolumeInfo = function(volumeMetadata) {
|
| volumeMetadata.profile,
|
| localizedLabel,
|
| volumeMetadata.extensionId,
|
| - volumeMetadata.hasMedia);
|
| + volumeMetadata.hasMedia,
|
| + configurable);
|
| });
|
| };
|
|
|
|
|