| Index: ui/file_manager/gallery/js/gallery_item.js
 | 
| diff --git a/ui/file_manager/gallery/js/gallery_item.js b/ui/file_manager/gallery/js/gallery_item.js
 | 
| index 54c6ef1515e5b87b4a7ed340f5f84076dc17c1c4..565067495ac31a8ed361654e43c21ad04aefe3a6 100644
 | 
| --- a/ui/file_manager/gallery/js/gallery_item.js
 | 
| +++ b/ui/file_manager/gallery/js/gallery_item.js
 | 
| @@ -260,38 +260,56 @@ Gallery.Item.prototype.saveToFile = function(
 | 
|    };
 | 
|  
 | 
|    var doSave = function(newFile, fileEntry) {
 | 
| -    var metadataPromise = metadataModel.get(
 | 
| +    var blob;
 | 
| +    var fileWriter;
 | 
| +
 | 
| +    metadataModel.get(
 | 
|          [fileEntry],
 | 
| -        ['mediaMimeType', 'contentMimeType', 'ifd', 'exifLittleEndian']);
 | 
| -    metadataPromise.then(function(metadataItems) {
 | 
| -      fileEntry.createWriter(function(fileWriter) {
 | 
| -        var writeContent = function() {
 | 
| -          fileWriter.onwriteend = onSuccess.bind(null, fileEntry);
 | 
| -          var metadataItem = metadataItems[0];
 | 
| -          metadataItem.modificationTime = new Date();
 | 
| -          var metadataEncoder = ImageEncoder.encodeMetadata(
 | 
| -              metadataItem, canvas, /* quality for thumbnail*/ 0.8);
 | 
| -          // Contrary to what one might think 1.0 is not a good default. Opening
 | 
| -          // and saving an typical photo taken with consumer camera increases
 | 
| -          // its file size by 50-100%. Experiments show that 0.9 is much better.
 | 
| -          // It shrinks some photos a bit, keeps others about the same size, but
 | 
| -          // does not visibly lower the quality.
 | 
| -          fileWriter.write(ImageEncoder.getBlob(canvas, metadataEncoder, 0.9));
 | 
| -        }.bind(this);
 | 
| -        fileWriter.onerror = function(error) {
 | 
| -          onError(error);
 | 
| -          // Disable all callbacks on the first error.
 | 
| -          fileWriter.onerror = null;
 | 
| -          fileWriter.onwriteend = null;
 | 
| -        };
 | 
| -        if (newFile) {
 | 
| -          writeContent();
 | 
| -        } else {
 | 
| -          fileWriter.onwriteend = writeContent;
 | 
| +        ['mediaMimeType', 'contentMimeType', 'ifd', 'exifLittleEndian']
 | 
| +    ).then(function(metadataItems) {
 | 
| +      // Create the blob of new image.
 | 
| +      var metadataItem = metadataItems[0];
 | 
| +      metadataItem.modificationTime = new Date();
 | 
| +      var metadataEncoder = ImageEncoder.encodeMetadata(
 | 
| +          metadataItem, canvas, /* quality for thumbnail*/ 0.8);
 | 
| +      // Contrary to what one might think 1.0 is not a good default. Opening
 | 
| +      // and saving an typical photo taken with consumer camera increases
 | 
| +      // its file size by 50-100%. Experiments show that 0.9 is much better.
 | 
| +      // It shrinks some photos a bit, keeps others about the same size, but
 | 
| +      // does not visibly lower the quality.
 | 
| +      blob = ImageEncoder.getBlob(canvas, metadataEncoder, 0.9);
 | 
| +    }).then(function() {
 | 
| +      // Create writer.
 | 
| +      return new Promise(function(fullfill, reject) {
 | 
| +        fileEntry.createWriter(fullfill, reject);
 | 
| +      });
 | 
| +    }).then(function(writer) {
 | 
| +      fileWriter = writer;
 | 
| +
 | 
| +      // Truncates the file to 0 byte if it overwrites.
 | 
| +      return new Promise(function(fulfill, reject) {
 | 
| +        if (!newFile) {
 | 
| +          fileWriter.onerror = reject;
 | 
| +          fileWriter.onwriteend = fulfill;
 | 
|            fileWriter.truncate(0);
 | 
| +        } else {
 | 
| +          fulfill(null);
 | 
|          }
 | 
| -      }.bind(this), onError);
 | 
| -    }.bind(this));
 | 
| +      });
 | 
| +    }).then(function() {
 | 
| +      // Writes the blob of new image.
 | 
| +      return new Promise(function(fulfill, reject) {
 | 
| +        fileWriter.onerror = reject;
 | 
| +        fileWriter.onwriteend = fulfill;
 | 
| +        fileWriter.write(blob);
 | 
| +      });
 | 
| +    }).then(onSuccess.bind(null, fileEntry))
 | 
| +    .catch(function(error) {
 | 
| +      onError(error);
 | 
| +      // Disable all callbacks on the first error.
 | 
| +      fileWriter.onerror = null;
 | 
| +      fileWriter.onwriteend = null;
 | 
| +    });
 | 
|    }.bind(this);
 | 
|  
 | 
|    var getFile = function(dir, newFile) {
 | 
| 
 |