Index: ui/file_manager/gallery/js/image_editor/image_encoder.js |
diff --git a/ui/file_manager/gallery/js/image_editor/image_encoder.js b/ui/file_manager/gallery/js/image_editor/image_encoder.js |
index f7b900ce74572dc7f51a30a7ec5bb1897d8d94ea..5d783fb761449f50e55cdbdf8c4dbf8ece236c1b 100644 |
--- a/ui/file_manager/gallery/js/image_editor/image_encoder.js |
+++ b/ui/file_manager/gallery/js/image_editor/image_encoder.js |
@@ -22,14 +22,15 @@ ImageEncoder.MIN_IMAGE_DIMENSION_FOR_THUMBNAIL = |
/** |
* Metadata encoders. |
- * @type {!Object.<string,function(new:ImageEncoder.MetadataEncoder,!Object)>} |
+ * @type {!Object.<string,function( |
+ * new:ImageEncoder.MetadataEncoder,!MetadataItem)>} |
* @const |
*/ |
ImageEncoder.metadataEncoders = {}; |
/** |
* Registers metadata encoder. |
- * @param {function(new:ImageEncoder.MetadataEncoder,!Object)} constructor |
+ * @param {function(new:ImageEncoder.MetadataEncoder,!MetadataItem)} constructor |
* Constructor of a metadata encoder. |
* @param {string} mimeType Mime type of the metadata encoder. |
*/ |
@@ -42,12 +43,12 @@ ImageEncoder.registerMetadataEncoder = function(constructor, mimeType) { |
* |
* The encoder will own and modify a copy of the original metadata. |
* |
- * @param {!Object} metadata Original metadata. |
+ * @param {!MetadataItem} metadata Original metadata. |
* @return {!ImageEncoder.MetadataEncoder} Created metadata encoder. |
*/ |
ImageEncoder.createMetadataEncoder = function(metadata) { |
var constructor = |
- (metadata && ImageEncoder.metadataEncoders[metadata.media.mimeType]) || |
+ ImageEncoder.metadataEncoders[metadata.mediaMimeType || ""] || |
ImageEncoder.MetadataEncoder; |
return new constructor(metadata); |
}; |
@@ -56,16 +57,14 @@ ImageEncoder.createMetadataEncoder = function(metadata) { |
* Create a metadata encoder object holding a copy of metadata |
* modified according to the properties of the supplied image. |
* |
- * @param {!Object} metadata Original metadata. |
+ * @param {!MetadataItem} metadata Original metadata. |
* @param {!HTMLCanvasElement} canvas Canvas to use for metadata. |
* @param {number} thumbnailQuality Encoding quality of a thumbnail. |
- * @param {Date=} opt_modificationDateTime Modification date time of an image. |
* @return {!ImageEncoder.MetadataEncoder} Encoder with encoded metadata. |
*/ |
-ImageEncoder.encodeMetadata = function( |
- metadata, canvas, thumbnailQuality, opt_modificationDateTime) { |
+ImageEncoder.encodeMetadata = function(metadata, canvas, thumbnailQuality) { |
var encoder = ImageEncoder.createMetadataEncoder(metadata); |
- encoder.setImageData(canvas, opt_modificationDateTime); |
+ encoder.setImageData(canvas); |
encoder.setThumbnailData(ImageEncoder.createThumbnail(canvas), |
thumbnailQuality); |
return encoder; |
@@ -82,8 +81,7 @@ ImageEncoder.getBlob = function(canvas, metadataEncoder, imageQuality) { |
ImageUtil.trace.resetTimer('dataurl'); |
// WebKit does not support canvas.toBlob yet so canvas.toDataURL is |
// the only way to use the Chrome built-in image encoder. |
- var dataURL = canvas.toDataURL(metadataEncoder.getMetadata().media.mimeType, |
- imageQuality); |
+ var dataURL = canvas.toDataURL(metadataEncoder.mimeType, imageQuality); |
ImageUtil.trace.reportTimer('dataurl'); |
var encodedImage = ImageEncoder.decodeDataURL(dataURL); |
@@ -112,8 +110,7 @@ ImageEncoder.getBlob = function(canvas, metadataEncoder, imageQuality) { |
appendSlice(ImageEncoder.stringToArrayBuffer( |
encodedImage, 0, encodedImage.length)); |
} |
- var blob = new Blob(slices, |
- {type: metadataEncoder.getMetadata().media.mimeType}); |
+ var blob = new Blob(slices, {type: metadataEncoder.mimeType}); |
ImageUtil.trace.reportTimer('blob'); |
return blob; |
}; |
@@ -181,21 +178,34 @@ ImageEncoder.stringToArrayBuffer = function(string, from, to) { |
* Serves as a default metadata encoder for images that none of the metadata |
* parsers recognized. |
* |
- * @param {!Object} original_metadata Starting metadata. |
+ * @param {!MetadataItem} originalMetadata Starting metadata. |
* @constructor |
* @struct |
*/ |
-ImageEncoder.MetadataEncoder = function(original_metadata) { |
- this.metadata_ = MetadataCache.cloneMetadata(original_metadata) || {}; |
- if (ImageEncoder.MetadataEncoder.getMimeType_(this.metadata_) !== |
- 'image/jpeg') { |
- // Chrome can only encode JPEG and PNG. Force PNG mime type so that we |
- // can save to file and generate a thumbnail. |
- // TODO(yawano) Change this not to modify metadata. Mime type comes from |
- // different fields depending on the conditions. Just overriding |
- // media.mimeType and use the modified metadata could cause a problem. |
- this.metadata_.media.mimeType = 'image/png'; |
- } |
+ImageEncoder.MetadataEncoder = function(originalMetadata) { |
+ var mimeType = ImageEncoder.MetadataEncoder.getMimeType_(originalMetadata); |
+ |
+ /** |
+ * Chrome can only encode JPEG and PNG. Force PNG mime type so that we |
+ * can save to file and generate a thumbnail. |
+ * @public {string} |
+ */ |
+ this.mimeType = mimeType === 'image/jpeg' ? 'image/jpeg' : 'image/png'; |
+ |
+ /** |
+ * @protected {string} |
+ */ |
+ this.thumbnailDataUrl = ''; |
+ |
+ /** |
+ * @protected {number} |
+ */ |
+ this.imageWidth = 0; |
+ |
+ /** |
+ * @protected {number} |
+ */ |
+ this.imageHeight = 0; |
}; |
/** |
@@ -203,41 +213,27 @@ ImageEncoder.MetadataEncoder = function(original_metadata) { |
* fails, it falls back to external.contentMimeType. If both fields are |
* undefined, it means that metadata is broken. Then it throws an exception. |
* |
- * @param {!Object} metadata Metadata. |
+ * @param {!MetadataItem} metadata Metadata. |
* @return {string} Mime type. |
* @private |
*/ |
ImageEncoder.MetadataEncoder.getMimeType_ = function(metadata) { |
- if (metadata.media.mimeType) |
- return metadata.media.mimeType; |
- else if (metadata.external.contentMimeType) |
- return metadata.external.contentMimeType; |
+ if (metadata.mediaMimeType) |
+ return metadata.mediaMimeType; |
+ else if (metadata.contentMimeType) |
+ return metadata.contentMimeType; |
assertNotReached(); |
}; |
/** |
- * Returns metadata. |
- * @return {!Object} A metadata. |
- * |
- * TODO(yawano): MetadataEncoder.getMetadata seems not to be used anymore. |
- * Investigate this, and remove if possible. Should not modify a metadata by |
- * using an encoder. |
- */ |
-ImageEncoder.MetadataEncoder.prototype.getMetadata = function() { |
- return this.metadata_; |
-}; |
- |
-/** |
* Sets an image data. |
* @param {!HTMLCanvasElement} canvas Canvas or anything with width and height |
* properties. |
- * @param {Date=} opt_modificationDateTime Modification date time of an image. |
*/ |
-ImageEncoder.MetadataEncoder.prototype.setImageData = |
- function(canvas, opt_modificationDateTime) { |
- this.metadata_.width = canvas.width; |
- this.metadata_.height = canvas.height; |
+ImageEncoder.MetadataEncoder.prototype.setImageData = function(canvas) { |
+ this.imageWidth = canvas.width; |
+ this.imageHeight = canvas.height; |
}; |
/** |
@@ -247,9 +243,8 @@ ImageEncoder.MetadataEncoder.prototype.setImageData = |
*/ |
ImageEncoder.MetadataEncoder.prototype.setThumbnailData = |
function(canvas, quality) { |
- this.metadata_.thumbnailURL = |
- canvas ? canvas.toDataURL(this.metadata_.media.mimeType, quality) : ''; |
- delete this.metadata_.thumbnailTransform; |
+ this.thumbnailDataUrl = |
+ canvas ? canvas.toDataURL(this.mimeType, quality) : ''; |
}; |
/** |