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 @@ ...@@ -2,77 +2,40 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
/** /** @final */
class MultiMetadataProvider extends MetadataProvider {
/**
* @param {!FileSystemMetadataProvider} fileSystemMetadataProvider * @param {!FileSystemMetadataProvider} fileSystemMetadataProvider
* @param {!ExternalMetadataProvider} externalMetadataProvider * @param {!ExternalMetadataProvider} externalMetadataProvider
* @param {!ContentMetadataProvider} contentMetadataProvider * @param {!ContentMetadataProvider} contentMetadataProvider
* @param {!VolumeManager} volumeManager * @param {!VolumeManager} volumeManager
* @constructor
* @extends {MetadataProvider}
* @struct
*/ */
function MultiMetadataProvider( constructor(
fileSystemMetadataProvider, externalMetadataProvider, fileSystemMetadataProvider, externalMetadataProvider,
contentMetadataProvider, volumeManager) { contentMetadataProvider, volumeManager) {
MetadataProvider.call( super(FileSystemMetadataProvider.PROPERTY_NAMES
this,
FileSystemMetadataProvider.PROPERTY_NAMES
.concat(ExternalMetadataProvider.PROPERTY_NAMES) .concat(ExternalMetadataProvider.PROPERTY_NAMES)
.concat(ContentMetadataProvider.PROPERTY_NAMES)); .concat(ContentMetadataProvider.PROPERTY_NAMES));
/** /** @private @const {!FileSystemMetadataProvider} */
* @private {!FileSystemMetadataProvider}
* @const
*/
this.fileSystemMetadataProvider_ = fileSystemMetadataProvider; this.fileSystemMetadataProvider_ = fileSystemMetadataProvider;
/** /** @private @const {!ExternalMetadataProvider} */
* @private {!ExternalMetadataProvider}
* @const
*/
this.externalMetadataProvider_ = externalMetadataProvider; this.externalMetadataProvider_ = externalMetadataProvider;
/** /** @private @const {!ContentMetadataProvider} */
* @private {!ContentMetadataProvider}
* @const
*/
this.contentMetadataProvider_ = contentMetadataProvider; this.contentMetadataProvider_ = contentMetadataProvider;
/** /** @private @const {!VolumeManager} */
* @private {!VolumeManager}
* @const
*/
this.volumeManager_ = 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. * Obtains metadata for entries.
* @param {!Array<!MetadataRequest>} requests * @param {!Array<!MetadataRequest>} requests
* @return {!Promise<!Array<!MetadataItem>>} * @return {!Promise<!Array<!MetadataItem>>}
*/ */
MultiMetadataProvider.prototype.get = function(requests) { get(requests) {
const fileSystemRequests = []; const fileSystemRequests = [];
const externalRequests = []; const externalRequests = [];
const contentRequests = []; const contentRequests = [];
...@@ -161,7 +124,8 @@ MultiMetadataProvider.prototype.get = function(requests) { ...@@ -161,7 +124,8 @@ MultiMetadataProvider.prototype.get = function(requests) {
}; };
const fileSystemPromise = const fileSystemPromise =
get(this.fileSystemMetadataProvider_, fileSystemRequests); get(this.fileSystemMetadataProvider_, fileSystemRequests);
const externalPromise = get(this.externalMetadataProvider_, externalRequests); const externalPromise =
get(this.externalMetadataProvider_, externalRequests);
const contentPromise = get(this.contentMetadataProvider_, contentRequests); const contentPromise = get(this.contentMetadataProvider_, contentRequests);
const fallbackContentPromise = externalPromise.then(requestsAndResults => { const fallbackContentPromise = externalPromise.then(requestsAndResults => {
const requests = requestsAndResults.requests; const requests = requestsAndResults.requests;
...@@ -201,7 +165,29 @@ MultiMetadataProvider.prototype.get = function(requests) { ...@@ -201,7 +165,29 @@ MultiMetadataProvider.prototype.get = function(requests) {
} }
} }
return requests.map(request => { 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