| Index: chrome/browser/resources/file_manager/js/image_editor/image_util.js
|
| diff --git a/chrome/browser/resources/file_manager/js/image_editor/image_util.js b/chrome/browser/resources/file_manager/js/image_editor/image_util.js
|
| index c8667e9e49a67d65b2cd0702a3573ed4aa507b7f..84607589edf89f3fc548ecd1c1e5074ab2f3f674 100644
|
| --- a/chrome/browser/resources/file_manager/js/image_editor/image_util.js
|
| +++ b/chrome/browser/resources/file_manager/js/image_editor/image_util.js
|
| @@ -330,7 +330,7 @@ ImageUtil.setAttribute = function(element, attribute, on) {
|
|
|
| ImageUtil.ImageLoader = function(document) {
|
| this.document_ = document;
|
| - this.image_ = new Image();
|
| + this.image_ = null;
|
| };
|
|
|
| /**
|
| @@ -351,7 +351,14 @@ ImageUtil.ImageLoader.prototype.load = function(
|
| var self = this;
|
| function startLoad() {
|
| self.timeout_ = null;
|
| - self.image_.onload = self.convertImage_.bind(self);
|
| + // The clients of this class sometimes request the same url repeatedly.
|
| + // The onload fires only if the src is different from the previous value.
|
| + // To work around that we create a new Image every time.
|
| + self.image_ = new Image();
|
| + self.image_.onload = function(e) {
|
| + self.image_ = null;
|
| + self.convertImage_(e.target);
|
| + };
|
| self.image_.src = url;
|
| }
|
| if (opt_delay) {
|
| @@ -380,18 +387,21 @@ ImageUtil.ImageLoader.prototype.cancel = function() {
|
| clearTimeout(this.timeout_);
|
| this.timeout_ = null;
|
| }
|
| - this.image_.onload = function(){};
|
| + if (this.image_) {
|
| + this.image_.onload = function(){};
|
| + this.image_ = null;
|
| + }
|
| };
|
|
|
| -ImageUtil.ImageLoader.prototype.convertImage_ = function() {
|
| +ImageUtil.ImageLoader.prototype.convertImage_ = function(image) {
|
| var canvas = this.document_.createElement('canvas');
|
|
|
| if (this.transform_.rotate90 & 1) { // Rotated +/-90deg, swap the dimensions.
|
| - canvas.width = this.image_.height;
|
| - canvas.height = this.image_.width;
|
| + canvas.width = image.height;
|
| + canvas.height = image.width;
|
| } else {
|
| - canvas.width = this.image_.width;
|
| - canvas.height = this.image_.height;
|
| + canvas.width = image.width;
|
| + canvas.height = image.height;
|
| }
|
|
|
| ImageUtil.trace.resetTimer('load-convert');
|
| @@ -402,24 +412,22 @@ ImageUtil.ImageLoader.prototype.convertImage_ = function() {
|
| context.rotate(this.transform_.rotate90 * Math.PI/2);
|
| context.scale(this.transform_.scaleX, this.transform_.scaleY);
|
|
|
| - var stripCount =
|
| - Math.ceil (this.image_.width * this.image_.height / ( 1 << 21));
|
| - var step =
|
| - Math.max(16, Math.ceil(this.image_.height / stripCount)) & 0xFFFFF0;
|
| + var stripCount = Math.ceil(image.width * image.height / ( 1 << 21));
|
| + var step = Math.max(16, Math.ceil(image.height / stripCount)) & 0xFFFFF0;
|
|
|
| - this.copyStrip_(context, 0, step);
|
| + this.copyStrip_(context, image, 0, step);
|
| };
|
|
|
| ImageUtil.ImageLoader.prototype.copyStrip_ = function(
|
| - context, firstRow, rowCount) {
|
| - var lastRow = Math.min (firstRow + rowCount, this.image_.height);
|
| + context, image, firstRow, rowCount) {
|
| + var lastRow = Math.min (firstRow + rowCount, image.height);
|
|
|
| context.drawImage(
|
| - this.image_, 0, firstRow, this.image_.width, lastRow - firstRow,
|
| - -this.image_.width / 2, firstRow - this.image_.height / 2,
|
| - this.image_.width, lastRow - firstRow);
|
| + image, 0, firstRow, image.width, lastRow - firstRow,
|
| + -image.width / 2, firstRow - image.height / 2,
|
| + image.width, lastRow - firstRow);
|
|
|
| - if (lastRow == this.image_.height) {
|
| + if (lastRow == image.height) {
|
| context.restore();
|
| ImageUtil.trace.reportTimer('load-convert');
|
| var callback = this.callback_;
|
| @@ -430,7 +438,7 @@ ImageUtil.ImageLoader.prototype.copyStrip_ = function(
|
| this.timeout_ = setTimeout(
|
| function() {
|
| self.timeout_ = null;
|
| - self.copyStrip_(context, lastRow, rowCount);
|
| + self.copyStrip_(context, image, lastRow, rowCount);
|
| }, 0);
|
| }
|
| };
|
|
|