From f1aeb76ce83f7fb55d8a14a432bbda5d59d6df76 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Thu, 16 Nov 2017 14:30:09 +0100 Subject: [PATCH] Create a new image when loading after an error --- src/ol/imagetile.js | 15 ++++++++++++++- test/spec/ol/imagetile.test.js | 7 +++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/ol/imagetile.js b/src/ol/imagetile.js index 139d5b0e46..acbb67e4b1 100644 --- a/src/ol/imagetile.js +++ b/src/ol/imagetile.js @@ -22,6 +22,12 @@ ol.ImageTile = function(tileCoord, state, src, crossOrigin, tileLoadFunction, op ol.Tile.call(this, tileCoord, state, opt_options); + /** + * @private + * @type {?string} + */ + this.crossOrigin_ = crossOrigin; + /** * Image URI * @@ -124,7 +130,14 @@ ol.ImageTile.prototype.handleImageLoad_ = function() { * @api */ ol.ImageTile.prototype.load = function() { - if (this.state == ol.TileState.IDLE || this.state == ol.TileState.ERROR) { + if (this.state == ol.TileState.ERROR) { + this.state = ol.TileState.IDLE; + this.image_ = new Image(); + if (this.crossOrigin_ !== null) { + this.image_.crossOrigin = this.crossOrigin_; + } + } + if (this.state == ol.TileState.IDLE) { this.state = ol.TileState.LOADING; this.changed(); this.imageListenerKeys_ = [ diff --git a/test/spec/ol/imagetile.test.js b/test/spec/ol/imagetile.test.js index 39409b7fc0..5fe0b9c337 100644 --- a/test/spec/ol/imagetile.test.js +++ b/test/spec/ol/imagetile.test.js @@ -68,11 +68,14 @@ describe('ol.ImageTile', function() { var tileLoadFunction = ol.source.Image.defaultImageLoadFunction; var tile = new ol.ImageTile(tileCoord, state, src, null, tileLoadFunction); - ol.events.listen(tile, ol.events.EventType.CHANGE, function(event) { + var key = ol.events.listen(tile, ol.events.EventType.CHANGE, function(event) { var state = tile.getState(); if (state == ol.TileState.ERROR) { expect(state).to.be(ol.TileState.ERROR); - expect(tile.image_.src).to.be(ol.ImageTile.blankImageUrl); + expect(tile.image_).to.be.a(HTMLCanvasElement); + ol.events.unlistenByKey(key); + tile.load(); + expect(tile.image_).to.be.a(HTMLImageElement); done(); } });