diff --git a/lib/OpenLayers/Tile/WFS.js b/lib/OpenLayers/Tile/WFS.js index c031b17beb..adf7a6b9d6 100644 --- a/lib/OpenLayers/Tile/WFS.js +++ b/lib/OpenLayers/Tile/WFS.js @@ -67,6 +67,8 @@ OpenLayers.Tile.WFS = OpenLayers.Class(OpenLayers.Tile, { this.url = null; if(this.request) { this.request.transport.abort(); + //this.request.destroy(); + this.request = null; } }, @@ -108,6 +110,10 @@ OpenLayers.Tile.WFS = OpenLayers.Class(OpenLayers.Tile, { * failure - {function} */ loadFeaturesForRegion:function(success, failure) { + if(this.request) { + this.request.transport.abort(); + //this.request.destroy(); + } this.request = OpenLayers.loadURL(this.url, null, this, success); }, @@ -141,6 +147,10 @@ OpenLayers.Tile.WFS = OpenLayers.Class(OpenLayers.Tile, { if (this.events) { this.events.triggerEvent("loadend"); } + + //request produced with success, we can delete the request object. + //this.request.destroy(); + this.request = null; }, /** diff --git a/tests/Tile/test_WFS.html b/tests/Tile/test_WFS.html index 2e78b69cfe..8f33f215c7 100644 --- a/tests/Tile/test_WFS.html +++ b/tests/Tile/test_WFS.html @@ -27,7 +27,16 @@ } function test_Tile_WFS_requestSuccess(t) { - t.plan(1); + t.plan(2); + + var tile = { + 'request': {} + }; + + OpenLayers.Tile.WFS.prototype.requestSuccess.apply(tile, []); + + t.ok(tile.request == null, "request property on tile set to null"); + var layer = {}; // bogus layer var position = new OpenLayers.Pixel(10,20); var bounds = new OpenLayers.Bounds(1,2,3,4); @@ -41,8 +50,41 @@ } + function test_Tile_WFS_loadFeaturesForRegion(t) { + t.plan(9); + + var tile = { + 'url': {} + }; + + var g_Success = {}; + + var tLoadURL = OpenLayers.loadURL; + OpenLayers.loadURL = function(url, params, caller, onComplete) { + t.ok(url == tile.url, "tile's url correctly passed as 1st param to loadURL"); + t.ok(params == null, "null passed as 2nd param to loadURL"); + t.ok(caller == tile, "tile passed as 3rd param to loadURL"); + t.ok(onComplete == g_Success, "success param from loadFeaturesForRegion() passed as 4th param to loadURL"); + }; + + //no running request -- 4 tests + OpenLayers.Tile.WFS.prototype.loadFeaturesForRegion.apply(tile, [g_Success]); + + //running request (cancelled) -- 4 tests + 1 test (for request abort) + tile.request = { + 'transport': { + 'abort': function() { + t.ok(true, "request aborted"); + } + } + }; + OpenLayers.Tile.WFS.prototype.loadFeaturesForRegion.apply(tile, [g_Success]); + + OpenLayers.loadURL = tLoadURL; + } + function test_Tile_WFS_destroy(t) { - t.plan(8); + t.plan(9); var layer = {}; // bogus layer var position = new OpenLayers.Pixel(10,20); @@ -73,6 +115,7 @@ t.ok(tile.size == null, "tile.size set to null"); t.ok(tile.position == null, "tile.position set to null"); t.ok(_gAbort, "request transport is aborted"); + t.ok(tile.request == null, "tile.request set to null"); t.ok(tile.events == null, "tile.events set to null");