prototype: Prevent memory leaks in Ajax.PeriodicalUpdater. Closes #10049

This commit is contained in:
Tobie Langel 2007-11-15 23:14:36 +00:00
parent c371096a71
commit 23823048d1
3 changed files with 18 additions and 8 deletions

View File

@ -1,3 +1,5 @@
* Make Ajax.Updater clone its options hash before modifying it. Prevents memory leaks in Ajax.PeriodicalUpdater. Closes #10049 [Mislav Marohnić, Tobie Langel].
* Remove useless variable in Selector.handlers.child. Closes #10006 [kuriyama]
* Don't redeclare previously declared variables. Closes #10007 [kuriyama]

View File

@ -306,11 +306,11 @@ Ajax.Updater = Class.create(Ajax.Request, {
failure: (container.failure || (container.success ? null : container))
};
options = options || { };
options = Object.clone(options);
var onComplete = options.onComplete;
options.onComplete = (function(response, param) {
options.onComplete = (function(response, json) {
this.updateContent(response.responseText);
if (Object.isFunction(onComplete)) onComplete(response, param);
if (Object.isFunction(onComplete)) onComplete(response, json);
}).bind(this);
$super(url, options);
@ -332,10 +332,6 @@ Ajax.Updater = Class.create(Ajax.Request, {
}
else receiver.update(responseText);
}
if (this.success()) {
if (this.onComplete) this.onComplete.bind(this).defer();
}
}
});

View File

@ -161,7 +161,19 @@
});
});
}},
testUpdaterOptions: function() {with(this) {
var options = {
method: 'get',
asynchronous: false,
evalJS: 'force',
onComplete: Prototype.emptyFunction
}
var request = new Ajax.Updater("content", "fixtures/hello.js", options);
request.options.onComplete = function() {};
assertIdentical(Prototype.emptyFunction, options.onComplete);
}},
testResponders: function(){with(this) {
// check for internal responder
assertEqual(1, Ajax.Responders.responders.length);