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

Unified Diff: ui/file_manager/file_manager/foreground/js/list_thumbnail_loader.js

Issue 895093003: Change ListThumbnailLoader to use ThumbnailLoader.loadAsDataUrl. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix type annotation. Created 5 years, 10 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/list_thumbnail_loader_unittest.js » ('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/list_thumbnail_loader.js
diff --git a/ui/file_manager/file_manager/foreground/js/list_thumbnail_loader.js b/ui/file_manager/file_manager/foreground/js/list_thumbnail_loader.js
index 4769c693d3e62770abada37a9bea3f6be80bb403..ba73fa46bbadce0436fb4014c69ffc3e9dad3e76 100644
--- a/ui/file_manager/file_manager/foreground/js/list_thumbnail_loader.js
+++ b/ui/file_manager/file_manager/foreground/js/list_thumbnail_loader.js
@@ -17,7 +17,7 @@
* * Done: Implement cache size limitation.
* * Done: Modest queueing for low priority thumbnail fetches.
* * Handle other event types of FileListModel, e.g. sort.
- * * Change ThumbnailLoader to directly return dataUrl.
+ * * Done: Change ThumbnailLoader to directly return dataUrl.
* * Handle file types for which generic images are used.
*
* @param {!FileListModel} dataModel A file list model.
@@ -65,10 +65,8 @@ function ListThumbnailLoader(
this.active_ = {};
/**
- * @type {LRUCache<!Object>}
+ * @type {LRUCache<!ListThumbnailLoader.ThumbnailData>}
* @private
- *
- * TODO(yawano): After ThumbnailData class is created, type this with it.
*/
this.cache_ = new LRUCache(ListThumbnailLoader.CACHE_SIZE);
@@ -192,13 +190,17 @@ ListThumbnailLoader.prototype.enqueue_ = function(entry) {
entry, this.metadataCache_, this.document_,
this.thumbnailLoaderConstructor_);
- this.active_[entry.toURL()] = task;
+ var url = entry.toURL();
+ this.active_[url] = task;
task.fetch().then(function(thumbnail) {
- delete this.active_[thumbnail.fileUrl];
- this.cache_.put(thumbnail.fileUrl, thumbnail);
+ delete this.active_[url];
+ this.cache_.put(url, thumbnail);
this.dispatchThumbnailLoaded_(thumbnail);
this.continue_();
+ }.bind(this), function() {
+ delete this.active_[url];
+ this.continue_();
}.bind(this));
}
@@ -218,6 +220,37 @@ ListThumbnailLoader.prototype.dispatchThumbnailLoaded_ = function(thumbnail) {
};
/**
+ * A class to represent thumbnail data.
+ * @param {string} fileUrl File url of an original image.
+ * @param {string} dataUrl Data url of thumbnail.
+ * @param {number} width Width of thumbnail.
+ * @param {number} height Height of thumbnail.
+ * @constructor
+ * @struct
+ */
+ListThumbnailLoader.ThumbnailData = function(fileUrl, dataUrl, width, height) {
+ /**
+ * @const {string}
+ */
+ this.fileUrl = fileUrl;
+
+ /**
+ * @const {string}
+ */
+ this.dataUrl = dataUrl;
+
+ /**
+ * @const {number}
+ */
+ this.width = width;
+
+ /**
+ * @const {number}
+ */
+ this.height = height;
+}
+
+/**
* A task to load thumbnail.
*
* @param {!Entry} entry An entry.
@@ -238,43 +271,20 @@ ListThumbnailLoader.Task = function(
/**
* Fetches thumbnail.
- * TODO(yawano): Add error handling.
*
- * @return {!Promise} A promise which is resolved when thumbnail is fetched.
+ * @return {!Promise<!ListThumbnailLoader.ThumbnailData>} A promise which is
+ * resolved when thumbnail is fetched.
*/
ListThumbnailLoader.Task.prototype.fetch = function() {
return new Promise(function(resolve, reject) {
- this.metadataCache_.getOne(this.entry_,
- 'thumbnail|filesystem|external|media',
- function(metadata) {
- // TODO(yawano): Change ThumbnailLoader to directly return data url of
- // an image.
- var box = this.document_.createElement('div');
-
- var thumbnailLoader = new this.thumbnailLoaderConstructor_(
- this.entry_,
- ThumbnailLoader.LoaderType.IMAGE,
- metadata);
- thumbnailLoader.load(box,
- ThumbnailLoader.FillMode.FIT,
- ThumbnailLoader.OptimizationMode.DISCARD_DETACHED,
- function(image, transform) {
- // TODO(yawano): Transform an image if necessary.
- var canvas = this.document_.createElement('canvas');
- canvas.width = image.width;
- canvas.height = image.height;
-
- var context = canvas.getContext('2d');
- context.drawImage(image, 0, 0);
-
- // TODO(yawano): Create ThumbnailData class.
- resolve({
- fileUrl: this.entry_.toURL(),
- dataUrl: canvas.toDataURL('image/jpeg', 0.5),
- width: image.width,
- height: image.height
- });
- }.bind(this));
- }.bind(this));
+ this.metadataCache_.getOne(
+ this.entry_, 'thumbnail|filesystem|external|media', resolve);
+ }.bind(this)).then(function(metadata) {
+ return new this.thumbnailLoaderConstructor_(
+ this.entry_, ThumbnailLoader.LoaderType.IMAGE, metadata)
+ .loadAsDataUrl();
+ }.bind(this)).then(function(result) {
+ return new ListThumbnailLoader.ThumbnailData(
+ this.entry_.toURL(), result.data, result.width, result.height);
}.bind(this));
}
« no previous file with comments | « no previous file | ui/file_manager/file_manager/foreground/js/list_thumbnail_loader_unittest.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698