Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(900)

Unified Diff: ui/file_manager/file_manager/foreground/js/metadata/metadata_cache.js

Issue 806853007: Files.app: Fix exception thrown by ContentProvider if getLatest is called with the type 'media|thum… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | ui/file_manager/file_manager/foreground/js/metadata/metadata_cache_unittest.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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));
+ }
};
/**
« no previous file with comments | « no previous file | ui/file_manager/file_manager/foreground/js/metadata/metadata_cache_unittest.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698