Commit 330991db authored by François Degros's avatar François Degros Committed by Commit Bot

[Files app] ES6 class for multi_metadata_provider.js

Bug: 778674
Change-Id: Ib270ab8c6f7ddc916d724ae8e0d64bbce22031ba
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1647643
Commit-Queue: François Degros <fdegros@chromium.org>
Commit-Queue: Luciano Pacheco <lucmult@chromium.org>
Auto-Submit: François Degros <fdegros@chromium.org>
Reviewed-by: default avatarLuciano Pacheco <lucmult@chromium.org>
Cr-Commit-Position: refs/heads/master@{#666618}
parent d591dd4d
......@@ -2,77 +2,40 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
/** @final */
class MultiMetadataProvider extends MetadataProvider {
/**
* @param {!FileSystemMetadataProvider} fileSystemMetadataProvider
* @param {!ExternalMetadataProvider} externalMetadataProvider
* @param {!ContentMetadataProvider} contentMetadataProvider
* @param {!VolumeManager} volumeManager
* @constructor
* @extends {MetadataProvider}
* @struct
*/
function MultiMetadataProvider(
constructor(
fileSystemMetadataProvider, externalMetadataProvider,
contentMetadataProvider, volumeManager) {
MetadataProvider.call(
this,
FileSystemMetadataProvider.PROPERTY_NAMES
super(FileSystemMetadataProvider.PROPERTY_NAMES
.concat(ExternalMetadataProvider.PROPERTY_NAMES)
.concat(ContentMetadataProvider.PROPERTY_NAMES));
/**
* @private {!FileSystemMetadataProvider}
* @const
*/
/** @private @const {!FileSystemMetadataProvider} */
this.fileSystemMetadataProvider_ = fileSystemMetadataProvider;
/**
* @private {!ExternalMetadataProvider}
* @const
*/
/** @private @const {!ExternalMetadataProvider} */
this.externalMetadataProvider_ = externalMetadataProvider;
/**
* @private {!ContentMetadataProvider}
* @const
*/
/** @private @const {!ContentMetadataProvider} */
this.contentMetadataProvider_ = contentMetadataProvider;
/**
* @private {!VolumeManager}
* @const
*/
/** @private @const {!VolumeManager} */
this.volumeManager_ = volumeManager;
}
MultiMetadataProvider.prototype.__proto__ = MetadataProvider.prototype;
/**
* Property names of documents-provider files which we should get from
* ExternalMetadataProvider.
*
* We should NOT use ExternalMetadataProvider.PROPERTY_NAMES for
* documents-provider files, since ExternalMetadataProvider zero-fills all
* requested properties (e.g. 'size' is initialized to '0 bytes' even when size
* is not acquired by chrome.fileManagerPrivate.getEntryProperties) and the
* zero-filled property can overwrite a valid property which is already
* acquired from FileSystemMetadataProvider.
*
* @const {!Array<string>}
*/
MultiMetadataProvider.DOCUMENTS_PROVIDER_EXTERNAL_PROPERTY_NAMES = [
'canCopy',
'canDelete',
'canRename',
'canAddChildren',
];
}
/**
/**
* Obtains metadata for entries.
* @param {!Array<!MetadataRequest>} requests
* @return {!Promise<!Array<!MetadataItem>>}
*/
MultiMetadataProvider.prototype.get = function(requests) {
get(requests) {
const fileSystemRequests = [];
const externalRequests = [];
const contentRequests = [];
......@@ -161,7 +124,8 @@ MultiMetadataProvider.prototype.get = function(requests) {
};
const fileSystemPromise =
get(this.fileSystemMetadataProvider_, fileSystemRequests);
const externalPromise = get(this.externalMetadataProvider_, externalRequests);
const externalPromise =
get(this.externalMetadataProvider_, externalRequests);
const contentPromise = get(this.contentMetadataProvider_, contentRequests);
const fallbackContentPromise = externalPromise.then(requestsAndResults => {
const requests = requestsAndResults.requests;
......@@ -201,7 +165,29 @@ MultiMetadataProvider.prototype.get = function(requests) {
}
}
return requests.map(request => {
return integratedResults[request.entry.toURL()] || new MetadataItem();
return integratedResults[request.entry.toURL()] ||
new MetadataItem();
});
});
};
}
}
/**
* Property names of documents-provider files which we should get from
* ExternalMetadataProvider.
*
* We should NOT use ExternalMetadataProvider.PROPERTY_NAMES for
* documents-provider files, since ExternalMetadataProvider zero-fills all
* requested properties (e.g. 'size' is initialized to '0 bytes' even when size
* is not acquired by chrome.fileManagerPrivate.getEntryProperties) and the
* zero-filled property can overwrite a valid property which is already
* acquired from FileSystemMetadataProvider.
*
* @const {!Array<string>}
*/
MultiMetadataProvider.DOCUMENTS_PROVIDER_EXTERNAL_PROPERTY_NAMES = [
'canCopy',
'canDelete',
'canRename',
'canAddChildren',
];
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment