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

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

Issue 831833004: Files.app: Stop to use drive thumbnail for cached files. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix. 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
Index: ui/file_manager/file_manager/foreground/js/thumbnail_loader.js
diff --git a/ui/file_manager/file_manager/foreground/js/thumbnail_loader.js b/ui/file_manager/file_manager/foreground/js/thumbnail_loader.js
index a9fa132e7fdf0867a45f8ccd8ce1b2b349188e6c..0580e1dafaf80e0da72c9529756b05a6905bbae5 100644
--- a/ui/file_manager/file_manager/foreground/js/thumbnail_loader.js
+++ b/ui/file_manager/file_manager/foreground/js/thumbnail_loader.js
@@ -12,14 +12,19 @@
* default: IMAGE.
* @param {Object=} opt_metadata Metadata object.
* @param {string=} opt_mediaType Media type.
- * @param {ThumbnailLoader.UseEmbedded=} opt_useEmbedded If to use embedded
- * jpeg thumbnail if available. Default: USE_EMBEDDED.
+ * @param {Array<ThumbnailLoader.LoadTarget>=} opt_loadTargets The list of load
+ * targets in preferential order. The default value is [CONTENT_METADATA,
+ * EXTERNAL_METADATA, FILE_ENTRY].
* @param {number=} opt_priority Priority, the highest is 0. default: 2.
* @constructor
*/
function ThumbnailLoader(entry, opt_loaderType, opt_metadata, opt_mediaType,
- opt_useEmbedded, opt_priority) {
- opt_useEmbedded = opt_useEmbedded || ThumbnailLoader.UseEmbedded.USE_EMBEDDED;
+ opt_loadTargets, opt_priority) {
+ var loadTargets = opt_loadTargets || [
+ ThumbnailLoader.LoadTarget.CONTENT_METADATA,
+ ThumbnailLoader.LoadTarget.EXTERNAL_METADATA,
+ ThumbnailLoader.LoadTarget.FILE_ENTRY
+ ];
this.mediaType_ = opt_mediaType || FileType.getMediaType(entry);
this.loaderType_ = opt_loaderType || ThumbnailLoader.LoaderType.IMAGE;
@@ -27,8 +32,15 @@ function ThumbnailLoader(entry, opt_loaderType, opt_metadata, opt_mediaType,
this.priority_ = (opt_priority !== undefined) ? opt_priority : 2;
this.transform_ = null;
+ /**
+ * @type {?ThumbnailLoader.LoadTarget}
+ * @private
+ */
+ this.loadTarget_ = null;
+
if (!opt_metadata) {
this.thumbnailUrl_ = entry.toURL(); // Use the URL directly.
+ this.loadTarget_ = ThumbnailLoader.LoadTarget.FILE_ENTRY;
return;
}
@@ -37,20 +49,39 @@ function ThumbnailLoader(entry, opt_loaderType, opt_metadata, opt_mediaType,
if (opt_metadata.external && opt_metadata.external.customIconUrl)
this.fallbackUrl_ = opt_metadata.external.customIconUrl;
- if (ThumbnailLoader.hasThumbnailInMetadata(opt_metadata) &&
- opt_useEmbedded === ThumbnailLoader.UseEmbedded.USE_EMBEDDED) {
- // If the thumbnail generated from the local cache (metadata.thumbnail.url)
- // is available, use it. If not, use the one passed from the external
- // provider (metadata.external.thumbnailUrl).
- this.thumbnailUrl_ =
- (opt_metadata.thumbnail && opt_metadata.thumbnail.url) ||
- (opt_metadata.external && opt_metadata.external.thumbnailUrl);
- this.transform_ =
- opt_metadata.thumbnail && opt_metadata.thumbnail.transform;
- } else if (FileType.isImage(entry)) {
- this.thumbnailUrl_ = entry.toURL();
- this.transform_ = opt_metadata.media && opt_metadata.media.imageTransform;
- } else if (this.fallbackUrl_) {
+ for (var i = 0; i < loadTargets.length; i++) {
+ switch (loadTargets[i]) {
+ case ThumbnailLoader.LoadTarget.CONTENT_METADATA:
+ if (opt_metadata.thumbnail && opt_metadata.thumbnail.url) {
+ this.thumbnailUrl_ = opt_metadata.thumbnail.url;
+ this.thumbnailTransform =
+ opt_metadata.thumbnail && opt_metadata.thumbnail.transform;
+ this.loadTarget_ = ThumbnailLoader.LoadTarget.CONTENT_METADATA;
+ }
+ break;
+ case ThumbnailLoader.LoadTarget.EXTERNAL_METADATA:
+ if (opt_metadata.external && opt_metadata.external.thumbnailUrl &&
+ (!opt_metadata.external.dirty || !FileType.isImage(entry))) {
+ this.thumbnailUrl_ = opt_metadata.external.thumbnailUrl;
+ this.loadTarget_ = ThumbnailLoader.LoadTarget.EXTERNAL_METADATA;
+ }
+ break;
+ case ThumbnailLoader.LoadTarget.FILE_ENTRY:
+ if (FileType.isImage(entry)) {
+ this.thumbnailUrl_ = entry.toURL();
+ this.transform_ =
+ opt_metadata.media && opt_metadata.media.imageTransform;
+ this.loadTarget_ = ThumbnailLoader.LoadTarget.FILE_ENTRY;
+ }
+ break;
+ default:
+ assertNotReached('Unkonwn load type: ' + loadTargets[i]);
+ }
+ if (this.thumbnailUrl_)
+ break;
+ }
+
+ if (!this.thumbnailUrl_ && this.fallbackUrl_) {
// Use fallback as the primary thumbnail.
this.thumbnailUrl_ = this.fallbackUrl_;
this.fallbackUrl_ = null;
@@ -95,13 +126,16 @@ ThumbnailLoader.LoaderType = {
};
/**
- * Whether to use the embedded thumbnail, or not. The embedded thumbnail may
- * be small.
- * @enum {number}
+ * Load target of ThumbnailLoader.
+ * @enum {string}
*/
-ThumbnailLoader.UseEmbedded = {
- USE_EMBEDDED: 0,
- NO_EMBEDDED: 1
+ThumbnailLoader.LoadTarget = {
+ // e.g. Drive thumbnail, FSP thumbnail.
+ EXTERNAL_METADATA: 'externalMetadata',
+ // e.g. EXIF thumbnail.
+ CONTENT_METADATA: 'contentMetadata',
+ // Image file itself.
+ FILE_ENTRY: 'fileEntry'
};
/**
@@ -119,13 +153,11 @@ ThumbnailLoader.THUMBNAIL_MAX_WIDTH = 500;
ThumbnailLoader.THUMBNAIL_MAX_HEIGHT = 500;
/**
- * Returns whether the metadata have the thumbnail information or not.
- * @param {!Object} metadata Metadata.
- * @return {boolean}
+ * Returns the target of loading.
+ * @return {?ThumbnailLoader.LoadTarget}
*/
-ThumbnailLoader.hasThumbnailInMetadata = function(metadata) {
- return (metadata.thumbnail && metadata.thumbnail.url) ||
- (metadata.external && metadata.external.thumbnailUrl);
+ThumbnailLoader.prototype.getLoadTarget = function() {
+ return this.loadTarget_;
};
/**

Powered by Google App Engine
This is Rietveld 408576698