| Index: ui/file_manager/file_manager/foreground/js/metadata/metadata_cache.js
|
| diff --git a/ui/file_manager/file_manager/foreground/js/metadata/metadata_cache.js b/ui/file_manager/file_manager/foreground/js/metadata/metadata_cache.js
|
| index d6a4cb0117b05bef30cc6cadb658c5e24188b207..e3a9ad6d31ae04bf9d7e057657102077ef094c84 100644
|
| --- a/ui/file_manager/file_manager/foreground/js/metadata/metadata_cache.js
|
| +++ b/ui/file_manager/file_manager/foreground/js/metadata/metadata_cache.js
|
| @@ -928,16 +928,19 @@ ExternalProvider.prototype.convert_ = function(data, entry) {
|
| * thumbnail: { url, transform }
|
| * media: { artist, album, title, width, height, imageTransform, etc. }
|
| * fetchedMedia: { same fields here }
|
| + * @param {!MessagePort=} opt_messagePort Message port overriding the default
|
| + * worker port.
|
| * @constructor
|
| * @extends {MetadataProvider}
|
| */
|
| -function ContentProvider() {
|
| +function ContentProvider(opt_messagePort) {
|
| MetadataProvider.call(this);
|
|
|
| // Pass all URLs to the metadata reader until we have a correct filter.
|
| this.urlFilter_ = /.*/;
|
|
|
| - var dispatcher = new SharedWorker(ContentProvider.WORKER_SCRIPT).port;
|
| + var dispatcher = opt_messagePort ?
|
| + opt_messagePort : new SharedWorker(ContentProvider.WORKER_SCRIPT).port;
|
| dispatcher.onmessage = this.onMessage_.bind(this);
|
| dispatcher.postMessage({verb: 'init'});
|
| dispatcher.start();
|
| @@ -947,8 +950,13 @@ function ContentProvider() {
|
| // 'initialized' message. See below.
|
| this.initialized_ = false;
|
|
|
| - // Map from Entry.toURL() to callback.
|
| - // Note that simultaneous requests for same url are handled in MetadataCache.
|
| + /**
|
| + * Map from Entry.toURL() to callback.
|
| + * Note that simultaneous requests for same url are handled in MetadataCache.
|
| + * @type {!Object<!string, !Array<function(Object)>>}
|
| + * @const
|
| + * @private
|
| + */
|
| this.callbacks_ = {};
|
| }
|
|
|
| @@ -997,9 +1005,13 @@ ContentProvider.prototype.fetch = function(entry, type, callback) {
|
| setTimeout(callback.bind(null, {}), 0);
|
| return;
|
| }
|
| - var entryURL = entry.toURL();
|
| - this.callbacks_[entryURL] = callback;
|
| - this.dispatcher_.postMessage({verb: 'request', arguments: [entryURL]});
|
| + var url = entry.toURL();
|
| + if (this.callbacks_[url]) {
|
| + this.callbacks_[url].push(callback);
|
| + } else {
|
| + this.callbacks_[url] = [callback];
|
| + this.dispatcher_.postMessage({verb: 'request', arguments: [url]});
|
| + }
|
| };
|
|
|
| /**
|
| @@ -1084,9 +1096,11 @@ ContentProvider.ConvertContentMetadata = function(metadata, opt_result) {
|
| * @private
|
| */
|
| ContentProvider.prototype.onResult_ = function(url, metadata) {
|
| - var callback = this.callbacks_[url];
|
| + var callbacks = this.callbacks_[url];
|
| delete this.callbacks_[url];
|
| - callback(ContentProvider.ConvertContentMetadata(metadata));
|
| + for (var i = 0; i < callbacks.length; i++) {
|
| + callbacks[i](ContentProvider.ConvertContentMetadata(metadata));
|
| + }
|
| };
|
|
|
| /**
|
|
|